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
