\r
#include "Virtio10.h"\r
\r
-\r
//\r
// Utility functions\r
//\r
STATIC\r
EFI_STATUS\r
Virtio10Transfer (\r
- IN EFI_PCI_IO_PROTOCOL *PciIo,\r
- IN VIRTIO_1_0_CONFIG *Config,\r
- IN BOOLEAN Write,\r
- IN UINTN FieldOffset,\r
- IN UINTN FieldSize,\r
- IN OUT VOID *Buffer\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN VIRTIO_1_0_CONFIG *Config,\r
+ IN BOOLEAN Write,\r
+ IN UINTN FieldOffset,\r
+ IN UINTN FieldSize,\r
+ IN OUT VOID *Buffer\r
)\r
{\r
- UINTN Count;\r
- EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
- EFI_PCI_IO_PROTOCOL_ACCESS *BarType;\r
- EFI_PCI_IO_PROTOCOL_IO_MEM Access;\r
+ UINTN Count;\r
+ EFI_PCI_IO_PROTOCOL_WIDTH Width;\r
+ EFI_PCI_IO_PROTOCOL_ACCESS *BarType;\r
+ EFI_PCI_IO_PROTOCOL_IO_MEM Access;\r
\r
if (!Config->Exists ||\r
- FieldSize > Config->Length ||\r
- FieldOffset > Config->Length - FieldSize) {\r
+ (FieldSize > Config->Length) ||\r
+ (FieldOffset > Config->Length - FieldSize))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
\r
case 8:\r
Count = 2;\r
- //\r
- // fall through\r
- //\r
+ //\r
+ // fall through\r
+ //\r
\r
case 4:\r
Width = EfiPciIoWidthUint32;\r
}\r
\r
BarType = (Config->BarType == Virtio10BarTypeMem) ? &PciIo->Mem : &PciIo->Io;\r
- Access = Write ? BarType->Write : BarType->Read;\r
-\r
- return Access (PciIo, Width, Config->Bar, Config->Offset + FieldOffset,\r
- Count, Buffer);\r
+ Access = Write ? BarType->Write : BarType->Read;\r
+\r
+ return Access (\r
+ PciIo,\r
+ Width,\r
+ Config->Bar,\r
+ Config->Offset + FieldOffset,\r
+ Count,\r
+ Buffer\r
+ );\r
}\r
\r
-\r
/**\r
Determine if a PCI BAR is IO or MMIO.\r
\r
STATIC\r
EFI_STATUS\r
GetBarType (\r
- IN EFI_PCI_IO_PROTOCOL *PciIo,\r
- IN UINT8 BarIndex,\r
- OUT VIRTIO_1_0_BAR_TYPE *BarType\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN UINT8 BarIndex,\r
+ OUT VIRTIO_1_0_BAR_TYPE *BarType\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *Resources;\r
+ EFI_STATUS Status;\r
+ VOID *Resources;\r
\r
Status = PciIo->GetBarAttributes (PciIo, BarIndex, NULL, &Resources);\r
if (EFI_ERROR (Status)) {\r
Status = EFI_UNSUPPORTED;\r
\r
if (*(UINT8 *)Resources == ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR) {\r
- EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
+ EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
\r
Descriptor = Resources;\r
switch (Descriptor->ResType) {\r
- case ACPI_ADDRESS_SPACE_TYPE_MEM:\r
- *BarType = Virtio10BarTypeMem;\r
- Status = EFI_SUCCESS;\r
- break;\r
-\r
- case ACPI_ADDRESS_SPACE_TYPE_IO:\r
- *BarType = Virtio10BarTypeIo;\r
- Status = EFI_SUCCESS;\r
- break;\r
-\r
- default:\r
- break;\r
+ case ACPI_ADDRESS_SPACE_TYPE_MEM:\r
+ *BarType = Virtio10BarTypeMem;\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+\r
+ case ACPI_ADDRESS_SPACE_TYPE_IO:\r
+ *BarType = Virtio10BarTypeIo;\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+\r
+ default:\r
+ break;\r
}\r
}\r
\r
return Status;\r
}\r
\r
-\r
/*\r
Traverse the PCI capabilities list of a virtio-1.0 device, and capture the\r
locations of the interesting virtio-1.0 register blocks.\r
STATIC\r
EFI_STATUS\r
ParseCapabilities (\r
- IN OUT VIRTIO_1_0_DEV *Device\r
+ IN OUT VIRTIO_1_0_DEV *Device\r
)\r
{\r
- EFI_STATUS Status;\r
- PCI_CAP_DEV *PciDevice;\r
- PCI_CAP_LIST *CapList;\r
- UINT16 VendorInstance;\r
- PCI_CAP *VendorCap;\r
+ EFI_STATUS Status;\r
+ PCI_CAP_DEV *PciDevice;\r
+ PCI_CAP_LIST *CapList;\r
+ UINT16 VendorInstance;\r
+ PCI_CAP *VendorCap;\r
\r
Status = PciCapPciIoDeviceInit (Device->PciIo, &PciDevice);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
Status = PciCapListInit (PciDevice, &CapList);\r
if (EFI_ERROR (Status)) {\r
goto UninitPciDevice;\r
}\r
\r
for (VendorInstance = 0;\r
- !EFI_ERROR (PciCapListFindCap (CapList, PciCapNormal,\r
- EFI_PCI_CAPABILITY_ID_VENDOR, VendorInstance,\r
- &VendorCap));\r
- VendorInstance++) {\r
- UINT8 CapLen;\r
- VIRTIO_PCI_CAP VirtIoCap;\r
- VIRTIO_1_0_CONFIG *ParsedConfig;\r
+ !EFI_ERROR (\r
+ PciCapListFindCap (\r
+ CapList,\r
+ PciCapNormal,\r
+ EFI_PCI_CAPABILITY_ID_VENDOR,\r
+ VendorInstance,\r
+ &VendorCap\r
+ )\r
+ );\r
+ VendorInstance++)\r
+ {\r
+ UINT8 CapLen;\r
+ VIRTIO_PCI_CAP VirtIoCap;\r
+ VIRTIO_1_0_CONFIG *ParsedConfig;\r
\r
//\r
// Big enough to accommodate a VIRTIO_PCI_CAP structure?\r
//\r
- Status = PciCapRead (PciDevice, VendorCap,\r
- OFFSET_OF (EFI_PCI_CAPABILITY_VENDOR_HDR, Length), &CapLen,\r
- sizeof CapLen);\r
+ Status = PciCapRead (\r
+ PciDevice,\r
+ VendorCap,\r
+ OFFSET_OF (EFI_PCI_CAPABILITY_VENDOR_HDR, Length),\r
+ &CapLen,\r
+ sizeof CapLen\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto UninitCapList;\r
}\r
+\r
if (CapLen < sizeof VirtIoCap) {\r
//\r
// Too small, move to next.\r
}\r
\r
switch (VirtIoCap.ConfigType) {\r
- case VIRTIO_PCI_CAP_COMMON_CFG:\r
- ParsedConfig = &Device->CommonConfig;\r
- break;\r
- case VIRTIO_PCI_CAP_NOTIFY_CFG:\r
- ParsedConfig = &Device->NotifyConfig;\r
- break;\r
- case VIRTIO_PCI_CAP_DEVICE_CFG:\r
- ParsedConfig = &Device->SpecificConfig;\r
- break;\r
- default:\r
- //\r
- // Capability is not interesting.\r
- //\r
- continue;\r
+ case VIRTIO_PCI_CAP_COMMON_CFG:\r
+ ParsedConfig = &Device->CommonConfig;\r
+ break;\r
+ case VIRTIO_PCI_CAP_NOTIFY_CFG:\r
+ ParsedConfig = &Device->NotifyConfig;\r
+ break;\r
+ case VIRTIO_PCI_CAP_DEVICE_CFG:\r
+ ParsedConfig = &Device->SpecificConfig;\r
+ break;\r
+ default:\r
+ //\r
+ // Capability is not interesting.\r
+ //\r
+ continue;\r
}\r
\r
//\r
if (EFI_ERROR (Status)) {\r
goto UninitCapList;\r
}\r
+\r
ParsedConfig->Bar = VirtIoCap.Bar;\r
ParsedConfig->Offset = VirtIoCap.Offset;\r
ParsedConfig->Length = VirtIoCap.Length;\r
continue;\r
}\r
\r
- Status = PciCapRead (PciDevice, VendorCap, sizeof VirtIoCap,\r
+ Status = PciCapRead (\r
+ PciDevice,\r
+ VendorCap,\r
+ sizeof VirtIoCap,\r
&Device->NotifyOffsetMultiplier,\r
- sizeof Device->NotifyOffsetMultiplier);\r
+ sizeof Device->NotifyOffsetMultiplier\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto UninitCapList;\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
Accumulate the BAR type of a virtio-1.0 register block into a UINT64\r
attribute map, such that the latter is suitable for enabling IO / MMIO\r
STATIC\r
VOID\r
UpdateAttributes (\r
- IN VIRTIO_1_0_CONFIG *Config,\r
- IN OUT UINT64 *Attributes\r
+ IN VIRTIO_1_0_CONFIG *Config,\r
+ IN OUT UINT64 *Attributes\r
)\r
{\r
if (Config->Exists) {\r
*Attributes |= (Config->BarType == Virtio10BarTypeMem) ?\r
- EFI_PCI_IO_ATTRIBUTE_MEMORY:\r
- EFI_PCI_IO_ATTRIBUTE_IO;\r
+ EFI_PCI_IO_ATTRIBUTE_MEMORY :\r
+ EFI_PCI_IO_ATTRIBUTE_IO;\r
}\r
}\r
\r
-\r
//\r
// VIRTIO_DEVICE_PROTOCOL member functions\r
//\r
EFI_STATUS\r
EFIAPI\r
Virtio10GetDeviceFeatures (\r
- IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT64 *DeviceFeatures\r
+ IN VIRTIO_DEVICE_PROTOCOL *This,\r
+ OUT UINT64 *DeviceFeatures\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- UINT32 Selector;\r
- UINT32 Features32[2];\r
+ VIRTIO_1_0_DEV *Dev;\r
+ UINT32 Selector;\r
+ UINT32 Features32[2];\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
for (Selector = 0; Selector < 2; ++Selector) {\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// Select the low or high half of the features.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceFeatureSelect),\r
- sizeof Selector, &Selector);\r
+ sizeof Selector,\r
+ &Selector\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Fetch that half.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ FALSE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceFeature),\r
- sizeof Features32[Selector], &Features32[Selector]);\r
+ sizeof Features32[Selector],\r
+ &Features32[Selector]\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetGuestFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT64 Features\r
+ IN UINT64 Features\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- UINT32 Selector;\r
- UINT32 Features32[2];\r
+ VIRTIO_1_0_DEV *Dev;\r
+ UINT32 Selector;\r
+ UINT32 Features32[2];\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
Features32[1] = (UINT32)RShiftU64 (Features, 32);\r
\r
for (Selector = 0; Selector < 2; ++Selector) {\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// Select the low or high half of the features.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DriverFeatureSelect),\r
- sizeof Selector, &Selector);\r
+ sizeof Selector,\r
+ &Selector\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Write that half.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DriverFeature),\r
- sizeof Features32[Selector], &Features32[Selector]);\r
+ sizeof Features32[Selector],\r
+ &Features32[Selector]\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
IN UINT64 RingBaseShift\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
- UINT64 Address;\r
- UINT16 Enable;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
+ UINT64 Address;\r
+ UINT16 Enable;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Address = (UINTN)Ring->Desc;\r
+ Address = (UINTN)Ring->Desc;\r
Address += RingBaseShift;\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
- OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueDesc),\r
- sizeof Address, &Address);\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
+ OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueDesc),\r
+ sizeof Address,\r
+ &Address\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Address = (UINTN)Ring->Avail.Flags;\r
+ Address = (UINTN)Ring->Avail.Flags;\r
Address += RingBaseShift;\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
- OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueAvail),\r
- sizeof Address, &Address);\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
+ OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueAvail),\r
+ sizeof Address,\r
+ &Address\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Address = (UINTN)Ring->Used.Flags;\r
+ Address = (UINTN)Ring->Used.Flags;\r
Address += RingBaseShift;\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
- OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueUsed),\r
- sizeof Address, &Address);\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
+ OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueUsed),\r
+ sizeof Address,\r
+ &Address\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
Enable = 1;\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueEnable),\r
- sizeof Enable, &Enable);\r
+ sizeof Enable,\r
+ &Enable\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetQueueSel (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT16 Index\r
+ IN UINT16 Index\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect),\r
- sizeof Index, &Index);\r
+ sizeof Index,\r
+ &Index\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetQueueNotify (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT16 Index\r
+ IN UINT16 Index\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
- UINT16 SavedQueueSelect;\r
- UINT16 NotifyOffset;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
+ UINT16 SavedQueueSelect;\r
+ UINT16 NotifyOffset;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
//\r
// So, start with saving the current queue selector.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ FALSE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect),\r
- sizeof SavedQueueSelect, &SavedQueueSelect);\r
+ sizeof SavedQueueSelect,\r
+ &SavedQueueSelect\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Select the requested queue.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect),\r
- sizeof Index, &Index);\r
+ sizeof Index,\r
+ &Index\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Read the QueueNotifyOff field.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ FALSE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueNotifyOff),\r
- sizeof NotifyOffset, &NotifyOffset);\r
+ sizeof NotifyOffset,\r
+ &NotifyOffset\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Re-select the original queue.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect),\r
- sizeof SavedQueueSelect, &SavedQueueSelect);\r
+ sizeof SavedQueueSelect,\r
+ &SavedQueueSelect\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// We can now kick the queue.\r
//\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->NotifyConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->NotifyConfig,\r
+ TRUE,\r
NotifyOffset * Dev->NotifyOffsetMultiplier,\r
- sizeof Index, &Index);\r
+ sizeof Index,\r
+ &Index\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetQueueAlign (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT32 Alignment\r
+ IN UINT32 Alignment\r
)\r
{\r
return (Alignment == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetPageSize (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT32 PageSize\r
+ IN UINT32 PageSize\r
)\r
{\r
return (PageSize == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
OUT UINT16 *QueueNumMax\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ FALSE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSize),\r
- sizeof *QueueNumMax, QueueNumMax);\r
+ sizeof *QueueNumMax,\r
+ QueueNumMax\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10SetQueueNum (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT16 QueueSize\r
+ IN UINT16 QueueSize\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT16 CurrentSize;\r
+ EFI_STATUS Status;\r
+ UINT16 CurrentSize;\r
\r
//\r
// This member function is required for VirtIo MMIO, and a no-op in\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
return (CurrentSize == QueueSize) ? EFI_SUCCESS : EFI_UNSUPPORTED;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
OUT UINT8 *DeviceStatus\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ FALSE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceStatus),\r
- sizeof *DeviceStatus, DeviceStatus);\r
+ sizeof *DeviceStatus,\r
+ DeviceStatus\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
IN UINT8 DeviceStatus\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->CommonConfig,\r
+ TRUE,\r
OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceStatus),\r
- sizeof DeviceStatus, &DeviceStatus);\r
+ sizeof DeviceStatus,\r
+ &DeviceStatus\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10WriteDevice (\r
- IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINTN FieldOffset,\r
- IN UINTN FieldSize,\r
- IN UINT64 Value\r
+ IN VIRTIO_DEVICE_PROTOCOL *This,\r
+ IN UINTN FieldOffset,\r
+ IN UINTN FieldSize,\r
+ IN UINT64 Value\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->SpecificConfig, TRUE,\r
- FieldOffset, FieldSize, &Value);\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->SpecificConfig,\r
+ TRUE,\r
+ FieldOffset,\r
+ FieldSize,\r
+ &Value\r
+ );\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10ReadDevice (\r
- IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINTN FieldOffset,\r
- IN UINTN FieldSize,\r
- IN UINTN BufferSize,\r
- OUT VOID *Buffer\r
+ IN VIRTIO_DEVICE_PROTOCOL *This,\r
+ IN UINTN FieldOffset,\r
+ IN UINTN FieldSize,\r
+ IN UINTN BufferSize,\r
+ OUT VOID *Buffer\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
if (FieldSize != BufferSize) {\r
return EFI_INVALID_PARAMETER;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
- Status = Virtio10Transfer (Dev->PciIo, &Dev->SpecificConfig, FALSE,\r
- FieldOffset, FieldSize, Buffer);\r
+ Status = Virtio10Transfer (\r
+ Dev->PciIo,\r
+ &Dev->SpecificConfig,\r
+ FALSE,\r
+ FieldOffset,\r
+ FieldSize,\r
+ Buffer\r
+ );\r
return Status;\r
}\r
\r
IN OUT VOID **HostAddress\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_STATUS Status;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
IN VOID *HostAddress\r
)\r
{\r
- VIRTIO_1_0_DEV *Dev;\r
+ VIRTIO_1_0_DEV *Dev;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
OUT VOID **Mapping\r
)\r
{\r
- EFI_STATUS Status;\r
- VIRTIO_1_0_DEV *Dev;\r
- EFI_PCI_IO_PROTOCOL_OPERATION PciIoOperation;\r
+ EFI_STATUS Status;\r
+ VIRTIO_1_0_DEV *Dev;\r
+ EFI_PCI_IO_PROTOCOL_OPERATION PciIoOperation;\r
\r
Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
\r
// Map VIRTIO_MAP_OPERATION to EFI_PCI_IO_PROTOCOL_OPERATION\r
//\r
switch (Operation) {\r
- case VirtioOperationBusMasterRead:\r
- PciIoOperation = EfiPciIoOperationBusMasterRead;\r
- break;\r
- case VirtioOperationBusMasterWrite:\r
- PciIoOperation = EfiPciIoOperationBusMasterWrite;\r
- break;\r
- case VirtioOperationBusMasterCommonBuffer:\r
- PciIoOperation = EfiPciIoOperationBusMasterCommonBuffer;\r
- break;\r
- default:\r
- return EFI_INVALID_PARAMETER;\r
+ case VirtioOperationBusMasterRead:\r
+ PciIoOperation = EfiPciIoOperationBusMasterRead;\r
+ break;\r
+ case VirtioOperationBusMasterWrite:\r
+ PciIoOperation = EfiPciIoOperationBusMasterWrite;\r
+ break;\r
+ case VirtioOperationBusMasterCommonBuffer:\r
+ PciIoOperation = EfiPciIoOperationBusMasterCommonBuffer;\r
+ break;\r
+ default:\r
+ return EFI_INVALID_PARAMETER;\r
}\r
\r
Status = Dev->PciIo->Map (\r
return Status;\r
}\r
\r
-STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = {\r
- VIRTIO_SPEC_REVISION (1, 0, 0),\r
- 0, // SubSystemDeviceId, filled in dynamically\r
+STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = {\r
+ VIRTIO_SPEC_REVISION (1, 0, 0),\r
+ 0, // SubSystemDeviceId, filled in dynamically\r
Virtio10GetDeviceFeatures,\r
Virtio10SetGuestFeatures,\r
Virtio10SetQueueAddress,\r
Virtio10UnmapSharedBuffer\r
};\r
\r
-\r
//\r
// EFI_DRIVER_BINDING_PROTOCOL member functions\r
//\r
EFI_STATUS\r
EFIAPI\r
Virtio10BindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- PCI_TYPE00 Pci;\r
-\r
- Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- (VOID **)&PciIo, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER);\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ PCI_TYPE00 Pci;\r
+\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&PciIo,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0,\r
- sizeof Pci / sizeof (UINT32), &Pci);\r
+ Status = PciIo->Pci.Read (\r
+ PciIo,\r
+ EfiPciIoWidthUint32,\r
+ 0,\r
+ sizeof Pci / sizeof (UINT32),\r
+ &Pci\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto CloseProtocol;\r
}\r
// Recognize non-transitional modern devices. Also, we'll have to parse the\r
// PCI capability list, so make sure the CapabilityPtr field will be valid.\r
//\r
- if (Pci.Hdr.VendorId == VIRTIO_VENDOR_ID &&\r
- Pci.Hdr.DeviceId >= 0x1040 &&\r
- Pci.Hdr.DeviceId <= 0x107F &&\r
- Pci.Hdr.RevisionID >= 0x01 &&\r
- Pci.Device.SubsystemID >= 0x40 &&\r
- (Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0) {\r
+ if ((Pci.Hdr.VendorId == VIRTIO_VENDOR_ID) &&\r
+ (Pci.Hdr.DeviceId >= 0x1040) &&\r
+ (Pci.Hdr.DeviceId <= 0x107F) &&\r
+ (Pci.Hdr.RevisionID >= 0x01) &&\r
+ (Pci.Device.SubsystemID >= 0x40) &&\r
+ ((Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0))\r
+ {\r
//\r
// The virtio-vga device is special. It can be driven both as a VGA device\r
// with a linear framebuffer, and through its underlying, modern,\r
// Both virtio-vga and virtio-gpu-pci have DeviceId 0x1050, but only the\r
// former has device class PCI_CLASS_DISPLAY_VGA.\r
//\r
- if (Pci.Hdr.DeviceId != 0x1050 || !IS_PCI_VGA (&Pci)) {\r
+ if ((Pci.Hdr.DeviceId != 0x1050) || !IS_PCI_VGA (&Pci)) {\r
Status = EFI_SUCCESS;\r
}\r
}\r
\r
CloseProtocol:\r
- gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10BindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- VIRTIO_1_0_DEV *Device;\r
- EFI_STATUS Status;\r
- PCI_TYPE00 Pci;\r
- UINT64 SetAttributes;\r
+ VIRTIO_1_0_DEV *Device;\r
+ EFI_STATUS Status;\r
+ PCI_TYPE00 Pci;\r
+ UINT64 SetAttributes;\r
\r
Device = AllocateZeroPool (sizeof *Device);\r
if (Device == NULL) {\r
Device->Signature = VIRTIO_1_0_SIGNATURE;\r
CopyMem (&Device->VirtIo, &mVirtIoTemplate, sizeof mVirtIoTemplate);\r
\r
- Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- (VOID **)&Device->PciIo, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER);\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&Device->PciIo,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto FreeDevice;\r
}\r
\r
- Status = Device->PciIo->Pci.Read (Device->PciIo, EfiPciIoWidthUint32, 0,\r
- sizeof Pci / sizeof (UINT32), &Pci);\r
+ Status = Device->PciIo->Pci.Read (\r
+ Device->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ 0,\r
+ sizeof Pci / sizeof (UINT32),\r
+ &Pci\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto ClosePciIo;\r
}\r
goto ClosePciIo;\r
}\r
\r
- Status = Device->PciIo->Attributes (Device->PciIo,\r
- EfiPciIoAttributeOperationGet, 0,\r
- &Device->OriginalPciAttributes);\r
+ Status = Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationGet,\r
+ 0,\r
+ &Device->OriginalPciAttributes\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto ClosePciIo;\r
}\r
UpdateAttributes (&Device->CommonConfig, &SetAttributes);\r
UpdateAttributes (&Device->NotifyConfig, &SetAttributes);\r
UpdateAttributes (&Device->SpecificConfig, &SetAttributes);\r
- Status = Device->PciIo->Attributes (Device->PciIo,\r
- EfiPciIoAttributeOperationEnable, SetAttributes,\r
- NULL);\r
+ Status = Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationEnable,\r
+ SetAttributes,\r
+ NULL\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto ClosePciIo;\r
}\r
\r
- Status = gBS->InstallProtocolInterface (&DeviceHandle,\r
- &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE,\r
- &Device->VirtIo);\r
+ Status = gBS->InstallProtocolInterface (\r
+ &DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &Device->VirtIo\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto RestorePciAttributes;\r
}\r
return EFI_SUCCESS;\r
\r
RestorePciAttributes:\r
- Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet,\r
- Device->OriginalPciAttributes, NULL);\r
+ Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Device->OriginalPciAttributes,\r
+ NULL\r
+ );\r
\r
ClosePciIo:\r
- gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
FreeDevice:\r
FreePool (Device);\r
return Status;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10BindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
- VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
- VIRTIO_1_0_DEV *Device;\r
-\r
- Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- (VOID **)&VirtIo, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ EFI_STATUS Status;\r
+ VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
+ VIRTIO_1_0_DEV *Device;\r
+\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ (VOID **)&VirtIo,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
Device = VIRTIO_1_0_FROM_VIRTIO_DEVICE (VirtIo);\r
\r
- Status = gBS->UninstallProtocolInterface (DeviceHandle,\r
- &gVirtioDeviceProtocolGuid, &Device->VirtIo);\r
+ Status = gBS->UninstallProtocolInterface (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ &Device->VirtIo\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet,\r
- Device->OriginalPciAttributes, NULL);\r
- gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ Device->PciIo->Attributes (\r
+ Device->PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Device->OriginalPciAttributes,\r
+ NULL\r
+ );\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
FreePool (Device);\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = {\r
+STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = {\r
&Virtio10BindingSupported,\r
&Virtio10BindingStart,\r
&Virtio10BindingStop,\r
NULL // DriverBindingHandle, to be overwritten\r
};\r
\r
-\r
//\r
// EFI_COMPONENT_NAME_PROTOCOL and EFI_COMPONENT_NAME2_PROTOCOL\r
// implementations\r
//\r
\r
STATIC\r
-EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {\r
+EFI_UNICODE_STRING_TABLE mDriverNameTable[] = {\r
{ "eng;en", L"Virtio 1.0 PCI Driver" },\r
{ NULL, NULL }\r
};\r
\r
STATIC\r
-EFI_COMPONENT_NAME_PROTOCOL mComponentName;\r
+EFI_COMPONENT_NAME_PROTOCOL mComponentName;\r
\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
Virtio10GetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
)\r
{\r
return LookupUnicodeString2 (\r
EFI_STATUS\r
EFIAPI\r
Virtio10GetDeviceName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_HANDLE ChildHandle,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_HANDLE ChildHandle,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
)\r
{\r
return EFI_UNSUPPORTED;\r
}\r
\r
STATIC\r
-EFI_COMPONENT_NAME_PROTOCOL mComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL mComponentName = {\r
&Virtio10GetDriverName,\r
&Virtio10GetDeviceName,\r
"eng"\r
};\r
\r
STATIC\r
-EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = {\r
- (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &Virtio10GetDriverName,\r
- (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &Virtio10GetDeviceName,\r
+EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&Virtio10GetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&Virtio10GetDeviceName,\r
"en"\r
};\r
\r
-\r
//\r
// Entry point of this driver\r
//\r
EFI_STATUS\r
EFIAPI\r
Virtio10EntryPoint (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
return EfiLibInstallDriverBindingComponentName2 (\r