OvmfPkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
This commit is contained in:
committed by
mergify[bot]
parent
d1050b9dff
commit
ac0a286f4d
@@ -63,7 +63,7 @@
|
||||
(Value) \
|
||||
))
|
||||
|
||||
#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \
|
||||
#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \
|
||||
(Dev)->VirtIo, \
|
||||
OFFSET_OF_VBLK (Field), \
|
||||
SIZE_OF_VBLK (Field), \
|
||||
@@ -71,7 +71,6 @@
|
||||
(Pointer) \
|
||||
))
|
||||
|
||||
|
||||
//
|
||||
// UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol
|
||||
// Driver Writer's Guide for UEFI 2.3.1 v1.01,
|
||||
@@ -80,8 +79,8 @@
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkReset (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -143,26 +142,28 @@ STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VerifyReadWriteRequest (
|
||||
IN EFI_BLOCK_IO_MEDIA *Media,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN PositiveBufferSize,
|
||||
IN BOOLEAN RequestIsWrite
|
||||
IN EFI_BLOCK_IO_MEDIA *Media,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN PositiveBufferSize,
|
||||
IN BOOLEAN RequestIsWrite
|
||||
)
|
||||
{
|
||||
UINTN BlockCount;
|
||||
UINTN BlockCount;
|
||||
|
||||
ASSERT (PositiveBufferSize > 0);
|
||||
|
||||
if (PositiveBufferSize > SIZE_1GB ||
|
||||
PositiveBufferSize % Media->BlockSize > 0) {
|
||||
if ((PositiveBufferSize > SIZE_1GB) ||
|
||||
(PositiveBufferSize % Media->BlockSize > 0))
|
||||
{
|
||||
return EFI_BAD_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
BlockCount = PositiveBufferSize / Media->BlockSize;
|
||||
|
||||
//
|
||||
// Avoid unsigned wraparound on either side in the second comparison.
|
||||
//
|
||||
if (Lba > Media->LastBlock || BlockCount - 1 > Media->LastBlock - Lba) {
|
||||
if ((Lba > Media->LastBlock) || (BlockCount - 1 > Media->LastBlock - Lba)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -173,9 +174,6 @@ VerifyReadWriteRequest (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Format a read / write / flush request as three consecutive virtio
|
||||
@@ -230,31 +228,30 @@ VerifyReadWriteRequest (
|
||||
for a bus master operation.
|
||||
|
||||
**/
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SynchronousRequest (
|
||||
IN VBLK_DEV *Dev,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT volatile VOID *Buffer,
|
||||
IN BOOLEAN RequestIsWrite
|
||||
IN VBLK_DEV *Dev,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT volatile VOID *Buffer,
|
||||
IN BOOLEAN RequestIsWrite
|
||||
)
|
||||
{
|
||||
UINT32 BlockSize;
|
||||
volatile VIRTIO_BLK_REQ Request;
|
||||
volatile UINT8 *HostStatus;
|
||||
VOID *HostStatusBuffer;
|
||||
DESC_INDICES Indices;
|
||||
VOID *RequestMapping;
|
||||
VOID *StatusMapping;
|
||||
VOID *BufferMapping;
|
||||
EFI_PHYSICAL_ADDRESS BufferDeviceAddress;
|
||||
EFI_PHYSICAL_ADDRESS HostStatusDeviceAddress;
|
||||
EFI_PHYSICAL_ADDRESS RequestDeviceAddress;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS UnmapStatus;
|
||||
UINT32 BlockSize;
|
||||
volatile VIRTIO_BLK_REQ Request;
|
||||
volatile UINT8 *HostStatus;
|
||||
VOID *HostStatusBuffer;
|
||||
DESC_INDICES Indices;
|
||||
VOID *RequestMapping;
|
||||
VOID *StatusMapping;
|
||||
VOID *BufferMapping;
|
||||
EFI_PHYSICAL_ADDRESS BufferDeviceAddress;
|
||||
EFI_PHYSICAL_ADDRESS HostStatusDeviceAddress;
|
||||
EFI_PHYSICAL_ADDRESS RequestDeviceAddress;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS UnmapStatus;
|
||||
|
||||
BlockSize = Dev->BlockIoMedia.BlockSize;
|
||||
|
||||
@@ -280,11 +277,11 @@ SynchronousRequest (
|
||||
// Prepare virtio-blk request header, setting zero size for flush.
|
||||
// IO Priority is homogeneously 0.
|
||||
//
|
||||
Request.Type = RequestIsWrite ?
|
||||
(BufferSize == 0 ? VIRTIO_BLK_T_FLUSH : VIRTIO_BLK_T_OUT) :
|
||||
VIRTIO_BLK_T_IN;
|
||||
Request.Type = RequestIsWrite ?
|
||||
(BufferSize == 0 ? VIRTIO_BLK_T_FLUSH : VIRTIO_BLK_T_OUT) :
|
||||
VIRTIO_BLK_T_IN;
|
||||
Request.IoPrio = 0;
|
||||
Request.Sector = MultU64x32(Lba, BlockSize / 512);
|
||||
Request.Sector = MultU64x32 (Lba, BlockSize / 512);
|
||||
|
||||
//
|
||||
// Host status is bi-directional (we preset with a value and expect the
|
||||
@@ -309,7 +306,7 @@ SynchronousRequest (
|
||||
Status = VirtioMapAllBytesInSharedBuffer (
|
||||
Dev->VirtIo,
|
||||
VirtioOperationBusMasterRead,
|
||||
(VOID *) &Request,
|
||||
(VOID *)&Request,
|
||||
sizeof Request,
|
||||
&RequestDeviceAddress,
|
||||
&RequestMapping
|
||||
@@ -328,7 +325,7 @@ SynchronousRequest (
|
||||
(RequestIsWrite ?
|
||||
VirtioOperationBusMasterRead :
|
||||
VirtioOperationBusMasterWrite),
|
||||
(VOID *) Buffer,
|
||||
(VOID *)Buffer,
|
||||
BufferSize,
|
||||
&BufferDeviceAddress,
|
||||
&BufferMapping
|
||||
@@ -400,7 +397,7 @@ SynchronousRequest (
|
||||
VirtioAppendDesc (
|
||||
&Dev->Ring,
|
||||
BufferDeviceAddress,
|
||||
(UINT32) BufferSize,
|
||||
(UINT32)BufferSize,
|
||||
VRING_DESC_F_NEXT | (RequestIsWrite ? 0 : VRING_DESC_F_WRITE),
|
||||
&Indices
|
||||
);
|
||||
@@ -420,9 +417,15 @@ SynchronousRequest (
|
||||
//
|
||||
// virtio-blk's only virtqueue is #0, called "requestq" (see Appendix D).
|
||||
//
|
||||
if (VirtioFlush (Dev->VirtIo, 0, &Dev->Ring, &Indices,
|
||||
NULL) == EFI_SUCCESS &&
|
||||
*HostStatus == VIRTIO_BLK_S_OK) {
|
||||
if ((VirtioFlush (
|
||||
Dev->VirtIo,
|
||||
0,
|
||||
&Dev->Ring,
|
||||
&Indices,
|
||||
NULL
|
||||
) == EFI_SUCCESS) &&
|
||||
(*HostStatus == VIRTIO_BLK_S_OK))
|
||||
{
|
||||
Status = EFI_SUCCESS;
|
||||
} else {
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
@@ -454,7 +457,6 @@ FreeHostStatusBuffer:
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
ReadBlocks() operation for virtio-blk.
|
||||
@@ -472,25 +474,24 @@ FreeHostStatusBuffer:
|
||||
successfully.
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkReadBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (BufferSize == 0) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
Dev = VIRTIO_BLK_FROM_BLOCK_IO (This);
|
||||
Dev = VIRTIO_BLK_FROM_BLOCK_IO (This);
|
||||
Status = VerifyReadWriteRequest (
|
||||
&Dev->BlockIoMedia,
|
||||
Lba,
|
||||
@@ -527,25 +528,24 @@ VirtioBlkReadBlocks (
|
||||
successfully.
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkWriteBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (BufferSize == 0) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
Dev = VIRTIO_BLK_FROM_BLOCK_IO (This);
|
||||
Dev = VIRTIO_BLK_FROM_BLOCK_IO (This);
|
||||
Status = VerifyReadWriteRequest (
|
||||
&Dev->BlockIoMedia,
|
||||
Lba,
|
||||
@@ -565,7 +565,6 @@ VirtioBlkWriteBlocks (
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
FlushBlocks() operation for virtio-blk.
|
||||
@@ -582,28 +581,26 @@ VirtioBlkWriteBlocks (
|
||||
Should they do nonetheless, we do nothing, successfully.
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkFlushBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
)
|
||||
{
|
||||
VBLK_DEV *Dev;
|
||||
VBLK_DEV *Dev;
|
||||
|
||||
Dev = VIRTIO_BLK_FROM_BLOCK_IO (This);
|
||||
return Dev->BlockIoMedia.WriteCaching ?
|
||||
SynchronousRequest (
|
||||
Dev,
|
||||
0, // Lba
|
||||
0, // BufferSize
|
||||
NULL, // Buffer
|
||||
TRUE // RequestIsWrite
|
||||
) :
|
||||
EFI_SUCCESS;
|
||||
SynchronousRequest (
|
||||
Dev,
|
||||
0, // Lba
|
||||
0, // BufferSize
|
||||
NULL, // Buffer
|
||||
TRUE // RequestIsWrite
|
||||
) :
|
||||
EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Device probe function for this driver.
|
||||
@@ -640,17 +637,16 @@ VirtioBlkFlushBlocks (
|
||||
the VirtIo protocol.
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkDriverBindingSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VIRTIO_DEVICE_PROTOCOL *VirtIo;
|
||||
EFI_STATUS Status;
|
||||
VIRTIO_DEVICE_PROTOCOL *VirtIo;
|
||||
|
||||
//
|
||||
// Attempt to open the device with the VirtIo set of interfaces. On success,
|
||||
@@ -679,12 +675,15 @@ VirtioBlkDriverBindingSupported (
|
||||
// We needed VirtIo access only transitorily, to see whether we support the
|
||||
// device or not.
|
||||
//
|
||||
gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle, DeviceHandle);
|
||||
gBS->CloseProtocol (
|
||||
DeviceHandle,
|
||||
&gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
DeviceHandle
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Set up all BlockIo and virtio-blk aspects of this driver for the specified
|
||||
@@ -704,47 +703,46 @@ VirtioBlkDriverBindingSupported (
|
||||
VirtioRingMap().
|
||||
|
||||
**/
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkInit (
|
||||
IN OUT VBLK_DEV *Dev
|
||||
IN OUT VBLK_DEV *Dev
|
||||
)
|
||||
{
|
||||
UINT8 NextDevStat;
|
||||
EFI_STATUS Status;
|
||||
UINT8 NextDevStat;
|
||||
EFI_STATUS Status;
|
||||
|
||||
UINT64 Features;
|
||||
UINT64 NumSectors;
|
||||
UINT32 BlockSize;
|
||||
UINT8 PhysicalBlockExp;
|
||||
UINT8 AlignmentOffset;
|
||||
UINT32 OptIoSize;
|
||||
UINT16 QueueSize;
|
||||
UINT64 RingBaseShift;
|
||||
UINT64 Features;
|
||||
UINT64 NumSectors;
|
||||
UINT32 BlockSize;
|
||||
UINT8 PhysicalBlockExp;
|
||||
UINT8 AlignmentOffset;
|
||||
UINT32 OptIoSize;
|
||||
UINT16 QueueSize;
|
||||
UINT64 RingBaseShift;
|
||||
|
||||
PhysicalBlockExp = 0;
|
||||
AlignmentOffset = 0;
|
||||
OptIoSize = 0;
|
||||
AlignmentOffset = 0;
|
||||
OptIoSize = 0;
|
||||
|
||||
//
|
||||
// Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence.
|
||||
//
|
||||
NextDevStat = 0; // step 1 -- reset device
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
|
||||
NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
|
||||
NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
@@ -769,6 +767,7 @@ VirtioBlkInit (
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
|
||||
if (NumSectors == 0) {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto Failed;
|
||||
@@ -779,8 +778,10 @@ VirtioBlkInit (
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
if (BlockSize == 0 || BlockSize % 512 != 0 ||
|
||||
ModU64x32 (NumSectors, BlockSize / 512) != 0) {
|
||||
|
||||
if ((BlockSize == 0) || (BlockSize % 512 != 0) ||
|
||||
(ModU64x32 (NumSectors, BlockSize / 512) != 0))
|
||||
{
|
||||
//
|
||||
// We can only handle a logical block consisting of whole sectors,
|
||||
// and only a disk composed of whole logical blocks.
|
||||
@@ -788,17 +789,20 @@ VirtioBlkInit (
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto Failed;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
BlockSize = 512;
|
||||
}
|
||||
|
||||
if (Features & VIRTIO_BLK_F_TOPOLOGY) {
|
||||
Status = VIRTIO_CFG_READ (Dev, Topology.PhysicalBlockExp,
|
||||
&PhysicalBlockExp);
|
||||
Status = VIRTIO_CFG_READ (
|
||||
Dev,
|
||||
Topology.PhysicalBlockExp,
|
||||
&PhysicalBlockExp
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
|
||||
if (PhysicalBlockExp >= 32) {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto Failed;
|
||||
@@ -837,11 +841,14 @@ VirtioBlkInit (
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
|
||||
Status = Dev->VirtIo->GetQueueNumMax (Dev->VirtIo, &QueueSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Failed;
|
||||
}
|
||||
if (QueueSize < 3) { // SynchronousRequest() uses at most three descriptors
|
||||
|
||||
if (QueueSize < 3) {
|
||||
// SynchronousRequest() uses at most three descriptors
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto Failed;
|
||||
}
|
||||
@@ -890,13 +897,12 @@ VirtioBlkInit (
|
||||
goto UnmapQueue;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// step 5 -- Report understood features.
|
||||
//
|
||||
if (Dev->VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) {
|
||||
Features &= ~(UINT64)(VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM);
|
||||
Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features);
|
||||
Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto UnmapQueue;
|
||||
}
|
||||
@@ -906,7 +912,7 @@ VirtioBlkInit (
|
||||
// step 6 -- initialization complete
|
||||
//
|
||||
NextDevStat |= VSTAT_DRIVER_OK;
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto UnmapQueue;
|
||||
}
|
||||
@@ -925,30 +931,45 @@ VirtioBlkInit (
|
||||
Dev->BlockIoMedia.RemovableMedia = FALSE;
|
||||
Dev->BlockIoMedia.MediaPresent = TRUE;
|
||||
Dev->BlockIoMedia.LogicalPartition = FALSE;
|
||||
Dev->BlockIoMedia.ReadOnly = (BOOLEAN) ((Features & VIRTIO_BLK_F_RO) != 0);
|
||||
Dev->BlockIoMedia.WriteCaching = (BOOLEAN) ((Features & VIRTIO_BLK_F_FLUSH) != 0);
|
||||
Dev->BlockIoMedia.ReadOnly = (BOOLEAN)((Features & VIRTIO_BLK_F_RO) != 0);
|
||||
Dev->BlockIoMedia.WriteCaching = (BOOLEAN)((Features & VIRTIO_BLK_F_FLUSH) != 0);
|
||||
Dev->BlockIoMedia.BlockSize = BlockSize;
|
||||
Dev->BlockIoMedia.IoAlign = 0;
|
||||
Dev->BlockIoMedia.LastBlock = DivU64x32 (NumSectors,
|
||||
BlockSize / 512) - 1;
|
||||
Dev->BlockIoMedia.LastBlock = DivU64x32 (
|
||||
NumSectors,
|
||||
BlockSize / 512
|
||||
) - 1;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "%a: LbaSize=0x%x[B] NumBlocks=0x%Lx[Lba]\n",
|
||||
__FUNCTION__, Dev->BlockIoMedia.BlockSize,
|
||||
Dev->BlockIoMedia.LastBlock + 1));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: LbaSize=0x%x[B] NumBlocks=0x%Lx[Lba]\n",
|
||||
__FUNCTION__,
|
||||
Dev->BlockIoMedia.BlockSize,
|
||||
Dev->BlockIoMedia.LastBlock + 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.LowestAlignedLba = AlignmentOffset;
|
||||
Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock = 1u << PhysicalBlockExp;
|
||||
Dev->BlockIoMedia.OptimalTransferLengthGranularity = OptIoSize;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "%a: FirstAligned=0x%Lx[Lba] PhysBlkSize=0x%x[Lba]\n",
|
||||
__FUNCTION__, Dev->BlockIoMedia.LowestAlignedLba,
|
||||
Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock));
|
||||
DEBUG ((DEBUG_INFO, "%a: OptimalTransferLengthGranularity=0x%x[Lba]\n",
|
||||
__FUNCTION__, Dev->BlockIoMedia.OptimalTransferLengthGranularity));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: FirstAligned=0x%Lx[Lba] PhysBlkSize=0x%x[Lba]\n",
|
||||
__FUNCTION__,
|
||||
Dev->BlockIoMedia.LowestAlignedLba,
|
||||
Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock
|
||||
));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: OptimalTransferLengthGranularity=0x%x[Lba]\n",
|
||||
__FUNCTION__,
|
||||
Dev->BlockIoMedia.OptimalTransferLengthGranularity
|
||||
));
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
UnmapQueue:
|
||||
@@ -968,7 +989,6 @@ Failed:
|
||||
return Status; // reached only via Failed above
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Uninitialize the internals of a virtio-blk device that has been successfully
|
||||
@@ -977,12 +997,11 @@ Failed:
|
||||
@param[in out] Dev The device to clean up.
|
||||
|
||||
**/
|
||||
|
||||
STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
VirtioBlkUninit (
|
||||
IN OUT VBLK_DEV *Dev
|
||||
IN OUT VBLK_DEV *Dev
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -995,11 +1014,10 @@ VirtioBlkUninit (
|
||||
Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap);
|
||||
VirtioRingUninit (Dev->VirtIo, &Dev->Ring);
|
||||
|
||||
SetMem (&Dev->BlockIo, sizeof Dev->BlockIo, 0x00);
|
||||
SetMem (&Dev->BlockIo, sizeof Dev->BlockIo, 0x00);
|
||||
SetMem (&Dev->BlockIoMedia, sizeof Dev->BlockIoMedia, 0x00);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Event notification function enqueued by ExitBootServices().
|
||||
@@ -1009,16 +1027,15 @@ VirtioBlkUninit (
|
||||
@param[in] Context Pointer to the VBLK_DEV structure.
|
||||
|
||||
**/
|
||||
|
||||
STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
VirtioBlkExitBoot (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
VBLK_DEV *Dev;
|
||||
VBLK_DEV *Dev;
|
||||
|
||||
DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context));
|
||||
//
|
||||
@@ -1060,26 +1077,30 @@ VirtioBlkExitBoot (
|
||||
or the InstallProtocolInterface() boot service.
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkDriverBindingStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
|
||||
Dev = (VBLK_DEV *) AllocateZeroPool (sizeof *Dev);
|
||||
Dev = (VBLK_DEV *)AllocateZeroPool (sizeof *Dev);
|
||||
if (Dev == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,
|
||||
(VOID **)&Dev->VirtIo, This->DriverBindingHandle,
|
||||
DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER);
|
||||
Status = gBS->OpenProtocol (
|
||||
DeviceHandle,
|
||||
&gVirtioDeviceProtocolGuid,
|
||||
(VOID **)&Dev->VirtIo,
|
||||
This->DriverBindingHandle,
|
||||
DeviceHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto FreeVirtioBlk;
|
||||
}
|
||||
@@ -1092,8 +1113,13 @@ VirtioBlkDriverBindingStart (
|
||||
goto CloseVirtIo;
|
||||
}
|
||||
|
||||
Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK,
|
||||
&VirtioBlkExitBoot, Dev, &Dev->ExitBoot);
|
||||
Status = gBS->CreateEvent (
|
||||
EVT_SIGNAL_EXIT_BOOT_SERVICES,
|
||||
TPL_CALLBACK,
|
||||
&VirtioBlkExitBoot,
|
||||
Dev,
|
||||
&Dev->ExitBoot
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto UninitDev;
|
||||
}
|
||||
@@ -1102,9 +1128,12 @@ VirtioBlkDriverBindingStart (
|
||||
// Setup complete, attempt to export the driver instance's BlockIo interface.
|
||||
//
|
||||
Dev->Signature = VBLK_SIG;
|
||||
Status = gBS->InstallProtocolInterface (&DeviceHandle,
|
||||
&gEfiBlockIoProtocolGuid, EFI_NATIVE_INTERFACE,
|
||||
&Dev->BlockIo);
|
||||
Status = gBS->InstallProtocolInterface (
|
||||
&DeviceHandle,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
EFI_NATIVE_INTERFACE,
|
||||
&Dev->BlockIo
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto CloseExitBoot;
|
||||
}
|
||||
@@ -1118,8 +1147,12 @@ UninitDev:
|
||||
VirtioBlkUninit (Dev);
|
||||
|
||||
CloseVirtIo:
|
||||
gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle, DeviceHandle);
|
||||
gBS->CloseProtocol (
|
||||
DeviceHandle,
|
||||
&gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
DeviceHandle
|
||||
);
|
||||
|
||||
FreeVirtioBlk:
|
||||
FreePool (Dev);
|
||||
@@ -1127,7 +1160,6 @@ FreeVirtioBlk:
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Stop driving a virtio-blk device and remove its BlockIo interface.
|
||||
@@ -1150,19 +1182,18 @@ FreeVirtioBlk:
|
||||
@param[in] ChildHandleBuffer Ignored (corresponding to NumberOfChildren).
|
||||
|
||||
**/
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkDriverBindingStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
VBLK_DEV *Dev;
|
||||
EFI_STATUS Status;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
VBLK_DEV *Dev;
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
DeviceHandle, // candidate device
|
||||
@@ -1181,8 +1212,11 @@ VirtioBlkDriverBindingStop (
|
||||
//
|
||||
// Handle Stop() requests for in-use driver instances gracefully.
|
||||
//
|
||||
Status = gBS->UninstallProtocolInterface (DeviceHandle,
|
||||
&gEfiBlockIoProtocolGuid, &Dev->BlockIo);
|
||||
Status = gBS->UninstallProtocolInterface (
|
||||
DeviceHandle,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
&Dev->BlockIo
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
@@ -1191,21 +1225,24 @@ VirtioBlkDriverBindingStop (
|
||||
|
||||
VirtioBlkUninit (Dev);
|
||||
|
||||
gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle, DeviceHandle);
|
||||
gBS->CloseProtocol (
|
||||
DeviceHandle,
|
||||
&gVirtioDeviceProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
DeviceHandle
|
||||
);
|
||||
|
||||
FreePool (Dev);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// The static object that groups the Supported() (ie. probe), Start() and
|
||||
// Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata
|
||||
// C, 10.1 EFI Driver Binding Protocol.
|
||||
//
|
||||
STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
|
||||
STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
|
||||
&VirtioBlkDriverBindingSupported,
|
||||
&VirtioBlkDriverBindingStart,
|
||||
&VirtioBlkDriverBindingStop,
|
||||
@@ -1215,7 +1252,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
|
||||
NULL // DriverBindingHandle, ditto
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
|
||||
// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
|
||||
@@ -1229,20 +1265,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = {
|
||||
//
|
||||
|
||||
STATIC
|
||||
EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {
|
||||
EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {
|
||||
{ "eng;en", L"Virtio Block Driver" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
STATIC
|
||||
EFI_COMPONENT_NAME_PROTOCOL gComponentName;
|
||||
EFI_COMPONENT_NAME_PROTOCOL gComponentName;
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
)
|
||||
{
|
||||
return LookupUnicodeString2 (
|
||||
@@ -1257,39 +1293,38 @@ VirtioBlkGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkGetDeviceName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_HANDLE ChildHandle,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_HANDLE ChildHandle,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_COMPONENT_NAME_PROTOCOL gComponentName = {
|
||||
EFI_COMPONENT_NAME_PROTOCOL gComponentName = {
|
||||
&VirtioBlkGetDriverName,
|
||||
&VirtioBlkGetDeviceName,
|
||||
"eng" // SupportedLanguages, ISO 639-2 language codes
|
||||
};
|
||||
|
||||
STATIC
|
||||
EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioBlkGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioBlkGetDeviceName,
|
||||
EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioBlkGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioBlkGetDeviceName,
|
||||
"en" // SupportedLanguages, RFC 4646 language codes
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Entry point of this driver.
|
||||
//
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioBlkEntryPoint (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
return EfiLibInstallDriverBindingComponentName2 (
|
||||
@@ -1301,4 +1336,3 @@ VirtioBlkEntryPoint (
|
||||
&gComponentName2
|
||||
);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user