On Sun, Dec 15, 2013 at 10:36 AM, Laszlo Ersek <[email protected]> wrote:
> UEFI spec                                virtio spec
> =======================================  =================================
> LowestAlignedLba EFI_LBA (UINT64)        alignment_offset u8
> +--------------------------------------  +--------------------------------
> | first LBA that is aligned to a         | offset of first aligned
> | physical block boundary (SCSI          | logical block
> | definition)
>
> LogicalBlocksPerPhysicalBlock UINT32     physical_block_exp u8
> +--------------------------------------  +--------------------------------
> | number of logical blocks per           | # of logical blocks per
> | physical block [...] does not contain  | physical block (log2)
> | an exponential value
>
> OptimalTransferLengthGranularity UINT32  opt_io_size le32
> +--------------------------------------  +--------------------------------
> | optimal transfer length granularity    | optimal (suggested maximum) I/O
> | as a number of logical blocks [...] A  | size in blocks
> | value of 0 means there is no reported
> | optimal transfer length granularity
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <[email protected]>
> ---
>  OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 38 +++++++++++++++++++++++++++++++++++---
>  1 file changed, 35 insertions(+), 3 deletions(-)
>
> diff --git a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c 
> b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c
> index 5815cdf..181e5d1 100644
> --- a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c
> +++ b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c
> @@ -595,6 +595,9 @@ VirtioBlkInit (
>    UINT32     Features;
>    UINT64     NumSectors;
>    UINT32     BlockSize;
> +  UINT8      PhysicalBlockExp;
> +  UINT8      AlignmentOffset;
> +  UINT32     OptIoSize;

VS considers these to be potentially used before initialization. Do
you want me to fix this?

For series:
Reviewed-by: Jordan Justen <[email protected]>

>    UINT16     QueueSize;
>
>    //
> @@ -662,6 +665,28 @@ VirtioBlkInit (
>      BlockSize = 512;
>    }
>
> +  if (Features & VIRTIO_BLK_F_TOPOLOGY) {
> +    Status = VIRTIO_CFG_READ (Dev, Topology.PhysicalBlockExp,
> +               &PhysicalBlockExp);
> +    if (EFI_ERROR (Status)) {
> +      goto Failed;
> +    }
> +    if (PhysicalBlockExp >= 32) {
> +      Status = EFI_UNSUPPORTED;
> +      goto Failed;
> +    }
> +
> +    Status = VIRTIO_CFG_READ (Dev, Topology.AlignmentOffset, 
> &AlignmentOffset);
> +    if (EFI_ERROR (Status)) {
> +      goto Failed;
> +    }
> +
> +    Status = VIRTIO_CFG_READ (Dev, Topology.OptIoSize, &OptIoSize);
> +    if (EFI_ERROR (Status)) {
> +      goto Failed;
> +    }
> +  }
> +
>    //
>    // step 4b -- allocate virtqueue
>    //
> @@ -728,9 +753,8 @@ VirtioBlkInit (
>    }
>
>    //
> -  // Populate the exported interface's attributes; see UEFI spec v2.3.1 +
> -  // Errata C, 12.8 EFI Block I/O Protocol. We stick to the lowest possible
> -  // EFI_BLOCK_IO_PROTOCOL revision for now.
> +  // Populate the exported interface's attributes; see UEFI spec v2.4, 12.9 
> EFI
> +  // Block I/O Protocol.
>    //
>    Dev->BlockIo.Revision              = 0;
>    Dev->BlockIo.Media                 = &Dev->BlockIoMedia;
> @@ -748,6 +772,14 @@ VirtioBlkInit (
>    Dev->BlockIoMedia.IoAlign          = 0;
>    Dev->BlockIoMedia.LastBlock        = DivU64x32 (NumSectors,
>                                           BlockSize / 512) - 1;
> +
> +  if (Features & VIRTIO_BLK_F_TOPOLOGY) {
> +    Dev->BlockIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION3;
> +
> +    Dev->BlockIoMedia.LowestAlignedLba = AlignmentOffset;
> +    Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock = 1u << PhysicalBlockExp;
> +    Dev->BlockIoMedia.OptimalTransferLengthGranularity = OptIoSize;
> +  }
>    return EFI_SUCCESS;
>
>  ReleaseQueue:
> --
> 1.8.3.1
>
>
>
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT
> organizations don't have a clear picture of how application performance
> affects their revenue. With AppDynamics, you get 100% visibility into your
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to