//\r
// TRUE if the PCI platform supports extended config space, FALSE otherwise.\r
//\r
-STATIC BOOLEAN mPciExtConfSpaceSupported;\r
-\r
+STATIC BOOLEAN mPciExtConfSpaceSupported;\r
\r
//\r
// The protocol interface this driver produces.\r
// Refer to 12.6 "PCI Hot Plug PCI Initialization Protocol" in the Platform\r
// Init 1.4a Spec, Volume 5.\r
//\r
-STATIC EFI_PCI_HOT_PLUG_INIT_PROTOCOL mPciHotPlugInit;\r
-\r
+STATIC EFI_PCI_HOT_PLUG_INIT_PROTOCOL mPciHotPlugInit;\r
\r
//\r
// Resource padding template for the GetResourcePadding() protocol member\r
//\r
#pragma pack (1)\r
typedef struct {\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Padding[4];\r
- EFI_ACPI_END_TAG_DESCRIPTOR EndDesc;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Padding[4];\r
+ EFI_ACPI_END_TAG_DESCRIPTOR EndDesc;\r
} RESOURCE_PADDING;\r
#pragma pack ()\r
\r
-\r
/**\r
Initialize a RESOURCE_PADDING object.\r
\r
STATIC\r
VOID\r
InitializeResourcePadding (\r
- OUT RESOURCE_PADDING *ResourcePadding\r
+ OUT RESOURCE_PADDING *ResourcePadding\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
ZeroMem (ResourcePadding, sizeof *ResourcePadding);\r
\r
// Fill in the Padding fields that don't vary across resource types.\r
//\r
for (Index = 0; Index < ARRAY_SIZE (ResourcePadding->Padding); ++Index) {\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
\r
Descriptor = ResourcePadding->Padding + Index;\r
Descriptor->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;\r
Descriptor->Len = (UINT16)(\r
- sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) -\r
- OFFSET_OF (\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR,\r
- ResType\r
- )\r
- );\r
+ sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) -\r
+ OFFSET_OF (\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR,\r
+ ResType\r
+ )\r
+ );\r
}\r
\r
//\r
ResourcePadding->EndDesc.Desc = ACPI_END_TAG_DESCRIPTOR;\r
}\r
\r
-\r
/**\r
Set up a descriptor entry for reserving IO space.\r
\r
STATIC\r
VOID\r
SetIoPadding (\r
- IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor,\r
- IN UINTN SizeExponent\r
+ IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor,\r
+ IN UINTN SizeExponent\r
)\r
{\r
- Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;\r
- Descriptor->AddrLen = LShiftU64 (1, SizeExponent);\r
+ Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;\r
+ Descriptor->AddrLen = LShiftU64 (1, SizeExponent);\r
Descriptor->AddrRangeMax = Descriptor->AddrLen - 1;\r
}\r
\r
-\r
/**\r
Set up a descriptor entry for reserving MMIO space.\r
\r
STATIC\r
VOID\r
SetMmioPadding (\r
- IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor,\r
- IN BOOLEAN Prefetchable,\r
- IN BOOLEAN ThirtyTwoBitOnly,\r
- IN UINTN SizeExponent\r
+ IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor,\r
+ IN BOOLEAN Prefetchable,\r
+ IN BOOLEAN ThirtyTwoBitOnly,\r
+ IN UINTN SizeExponent\r
)\r
{\r
Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;\r
EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_NON_CACHEABLE;\r
Descriptor->AddrSpaceGranularity = 32;\r
}\r
- Descriptor->AddrLen = LShiftU64 (1, SizeExponent);\r
+\r
+ Descriptor->AddrLen = LShiftU64 (1, SizeExponent);\r
Descriptor->AddrRangeMax = Descriptor->AddrLen - 1;\r
}\r
\r
-\r
/**\r
Round up a positive 32-bit value to the next whole power of two, and return\r
the bit position of the highest bit set in the result. Equivalent to\r
STATIC\r
INTN\r
HighBitSetRoundUp32 (\r
- IN UINT32 Operand\r
+ IN UINT32 Operand\r
)\r
{\r
- INTN HighBit;\r
+ INTN HighBit;\r
\r
HighBit = HighBitSet32 (Operand);\r
if (HighBit == -1) {\r
//\r
return HighBit;\r
}\r
+\r
if ((Operand & (Operand - 1)) != 0) {\r
//\r
// Operand is not a whole power of two.\r
//\r
++HighBit;\r
}\r
+\r
return (HighBit < 32) ? HighBit : -1;\r
}\r
\r
-\r
/**\r
Round up a positive 64-bit value to the next whole power of two, and return\r
the bit position of the highest bit set in the result. Equivalent to\r
STATIC\r
INTN\r
HighBitSetRoundUp64 (\r
- IN UINT64 Operand\r
+ IN UINT64 Operand\r
)\r
{\r
- INTN HighBit;\r
+ INTN HighBit;\r
\r
HighBit = HighBitSet64 (Operand);\r
if (HighBit == -1) {\r
//\r
return HighBit;\r
}\r
+\r
if ((Operand & (Operand - 1)) != 0) {\r
//\r
// Operand is not a whole power of two.\r
//\r
++HighBit;\r
}\r
+\r
return (HighBit < 64) ? HighBit : -1;\r
}\r
\r
-\r
/**\r
Look up the QEMU-specific Resource Reservation capability in the conventional\r
config space of a Hotplug Controller (that is, PCI Bridge).\r
STATIC\r
EFI_STATUS\r
QueryReservationHint (\r
- IN CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *HpcPciAddress,\r
- OUT QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION *ReservationHint\r
-)\r
+ IN CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *HpcPciAddress,\r
+ OUT QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION *ReservationHint\r
+ )\r
{\r
- UINT16 PciVendorId;\r
- EFI_STATUS Status;\r
- PCI_CAP_DEV *PciDevice;\r
- PCI_CAP_LIST *CapList;\r
- UINT16 VendorInstance;\r
- PCI_CAP *VendorCap;\r
+ UINT16 PciVendorId;\r
+ EFI_STATUS Status;\r
+ PCI_CAP_DEV *PciDevice;\r
+ PCI_CAP_LIST *CapList;\r
+ UINT16 VendorInstance;\r
+ PCI_CAP *VendorCap;\r
\r
//\r
// Check the vendor identifier.\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
Status = PciCapListInit (PciDevice, &CapList);\r
if (EFI_ERROR (Status)) {\r
goto UninitPciDevice;\r
// capability.\r
//\r
VendorInstance = 0;\r
- for (;;) {\r
- UINT8 VendorLength;\r
- UINT8 BridgeCapType;\r
+ for ( ; ;) {\r
+ UINT8 VendorLength;\r
+ UINT8 BridgeCapType;\r
\r
Status = PciCapListFindCap (\r
CapList,\r
if (EFI_ERROR (Status)) {\r
goto UninitCapList;\r
}\r
+\r
if (VendorLength != sizeof *ReservationHint) {\r
continue;\r
}\r
if (EFI_ERROR (Status)) {\r
goto UninitCapList;\r
}\r
+\r
if (BridgeCapType ==\r
- QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION) {\r
+ QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION)\r
+ {\r
//\r
// We have a match.\r
//\r
return Status;\r
}\r
\r
-\r
/**\r
Returns a list of root Hot Plug Controllers (HPCs) that require\r
initialization during the boot process.\r
EFI_STATUS\r
EFIAPI\r
GetRootHpcList (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- OUT UINTN *HpcCount,\r
- OUT EFI_HPC_LOCATION **HpcList\r
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
+ OUT UINTN *HpcCount,\r
+ OUT EFI_HPC_LOCATION **HpcList\r
)\r
{\r
- if (HpcCount == NULL || HpcList == NULL) {\r
+ if ((HpcCount == NULL) || (HpcList == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// that would require special initialization.\r
//\r
*HpcCount = 0;\r
- *HpcList = NULL;\r
+ *HpcList = NULL;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Initializes one root Hot Plug Controller (HPC). This process may causes\r
initialization of its subordinate buses.\r
EFI_STATUS\r
EFIAPI\r
InitializeRootHpc (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
- IN UINT64 HpcPciAddress,\r
- IN EFI_EVENT Event, OPTIONAL\r
- OUT EFI_HPC_STATE *HpcState\r
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
+ IN UINT64 HpcPciAddress,\r
+ IN EFI_EVENT Event OPTIONAL,\r
+ OUT EFI_HPC_STATE *HpcState\r
)\r
{\r
//\r
if (HpcState == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
return EFI_UNSUPPORTED;\r
}\r
\r
-\r
/**\r
Returns the resource padding that is required by the PCI bus that is\r
controlled by the specified Hot Plug Controller (HPC).\r
EFI_STATUS\r
EFIAPI\r
GetResourcePadding (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
- IN UINT64 HpcPciAddress,\r
- OUT EFI_HPC_STATE *HpcState,\r
- OUT VOID **Padding,\r
- OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes\r
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
+ IN UINT64 HpcPciAddress,\r
+ OUT EFI_HPC_STATE *HpcState,\r
+ OUT VOID **Padding,\r
+ OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes\r
)\r
{\r
- EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *Address;\r
- BOOLEAN DefaultIo;\r
- BOOLEAN DefaultMmio;\r
- RESOURCE_PADDING ReservationRequest;\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FirstResource;\r
- EFI_STATUS ReservationHintStatus;\r
- QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION ReservationHint;\r
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *Address;\r
+ BOOLEAN DefaultIo;\r
+ BOOLEAN DefaultMmio;\r
+ RESOURCE_PADDING ReservationRequest;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FirstResource;\r
+ EFI_STATUS ReservationHintStatus;\r
+ QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION ReservationHint;\r
\r
Address = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&HpcPciAddress;\r
\r
- DEBUG_CODE (\r
- CHAR16 *DevicePathString;\r
+ DEBUG_CODE_BEGIN ();\r
+ CHAR16 *DevicePathString;\r
\r
- DevicePathString = ConvertDevicePathToText (HpcDevicePath, FALSE, FALSE);\r
+ DevicePathString = ConvertDevicePathToText (HpcDevicePath, FALSE, FALSE);\r
\r
- DEBUG ((EFI_D_VERBOSE, "%a: Address=%02x:%02x.%x DevicePath=%s\n",\r
- __FUNCTION__, Address->Bus, Address->Device, Address->Function,\r
- (DevicePathString == NULL) ? L"<unavailable>" : DevicePathString));\r
+ DEBUG ((\r
+ DEBUG_VERBOSE,\r
+ "%a: Address=%02x:%02x.%x DevicePath=%s\n",\r
+ __FUNCTION__,\r
+ Address->Bus,\r
+ Address->Device,\r
+ Address->Function,\r
+ (DevicePathString == NULL) ? L"<unavailable>" : DevicePathString\r
+ ));\r
\r
- if (DevicePathString != NULL) {\r
- FreePool (DevicePathString);\r
- }\r
- );\r
+ if (DevicePathString != NULL) {\r
+ FreePool (DevicePathString);\r
+ }\r
\r
- if (HpcState == NULL || Padding == NULL || Attributes == NULL) {\r
+ DEBUG_CODE_END ();\r
+\r
+ if ((HpcState == NULL) || (Padding == NULL) || (Attributes == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- DefaultIo = TRUE;\r
+ DefaultIo = TRUE;\r
DefaultMmio = TRUE;\r
\r
//\r
//\r
ReservationHintStatus = QueryReservationHint (Address, &ReservationHint);\r
if (!EFI_ERROR (ReservationHintStatus)) {\r
- INTN HighBit;\r
+ INTN HighBit;\r
\r
DEBUG ((\r
DEBUG_VERBOSE,\r
// (a) Reserve bus numbers.\r
//\r
switch (ReservationHint.BusNumbers) {\r
- case 0:\r
- //\r
- // No reservation needed.\r
- //\r
- break;\r
- case MAX_UINT32:\r
- //\r
- // Firmware default (unspecified). Treat it as "no reservation needed".\r
- //\r
- break;\r
- default:\r
- //\r
- // Request the specified amount.\r
- //\r
- --FirstResource;\r
- FirstResource->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;\r
- FirstResource->AddrLen = ReservationHint.BusNumbers;\r
- break;\r
+ case 0:\r
+ //\r
+ // No reservation needed.\r
+ //\r
+ break;\r
+ case MAX_UINT32:\r
+ //\r
+ // Firmware default (unspecified). Treat it as "no reservation needed".\r
+ //\r
+ break;\r
+ default:\r
+ //\r
+ // Request the specified amount.\r
+ //\r
+ --FirstResource;\r
+ FirstResource->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;\r
+ FirstResource->AddrLen = ReservationHint.BusNumbers;\r
+ break;\r
}\r
\r
//\r
// (b) Reserve IO space.\r
//\r
switch (ReservationHint.Io) {\r
- case 0:\r
- //\r
- // No reservation needed, disable our built-in.\r
- //\r
- DefaultIo = FALSE;\r
- break;\r
- case MAX_UINT64:\r
- //\r
- // Firmware default (unspecified). Stick with our built-in.\r
- //\r
- break;\r
- default:\r
- //\r
- // Round the specified amount up to the next power of two. If rounding is\r
- // successful, reserve the rounded value. Fall back to the default\r
- // otherwise.\r
- //\r
- HighBit = HighBitSetRoundUp64 (ReservationHint.Io);\r
- if (HighBit != -1) {\r
- SetIoPadding (--FirstResource, (UINTN)HighBit);\r
+ case 0:\r
+ //\r
+ // No reservation needed, disable our built-in.\r
+ //\r
DefaultIo = FALSE;\r
- }\r
- break;\r
+ break;\r
+ case MAX_UINT64:\r
+ //\r
+ // Firmware default (unspecified). Stick with our built-in.\r
+ //\r
+ break;\r
+ default:\r
+ //\r
+ // Round the specified amount up to the next power of two. If rounding is\r
+ // successful, reserve the rounded value. Fall back to the default\r
+ // otherwise.\r
+ //\r
+ HighBit = HighBitSetRoundUp64 (ReservationHint.Io);\r
+ if (HighBit != -1) {\r
+ SetIoPadding (--FirstResource, (UINTN)HighBit);\r
+ DefaultIo = FALSE;\r
+ }\r
+\r
+ break;\r
}\r
\r
//\r
// (c) Reserve non-prefetchable MMIO space (32-bit only).\r
//\r
switch (ReservationHint.NonPrefetchable32BitMmio) {\r
- case 0:\r
- //\r
- // No reservation needed, disable our built-in.\r
- //\r
- DefaultMmio = FALSE;\r
- break;\r
- case MAX_UINT32:\r
- //\r
- // Firmware default (unspecified). Stick with our built-in.\r
- //\r
- break;\r
- default:\r
- //\r
- // Round the specified amount up to the next power of two. If rounding is\r
- // successful, reserve the rounded value. Fall back to the default\r
- // otherwise.\r
- //\r
- HighBit = HighBitSetRoundUp32 (ReservationHint.NonPrefetchable32BitMmio);\r
- if (HighBit != -1) {\r
- SetMmioPadding (--FirstResource, FALSE, TRUE, (UINTN)HighBit);\r
+ case 0:\r
+ //\r
+ // No reservation needed, disable our built-in.\r
+ //\r
DefaultMmio = FALSE;\r
- }\r
- break;\r
+ break;\r
+ case MAX_UINT32:\r
+ //\r
+ // Firmware default (unspecified). Stick with our built-in.\r
+ //\r
+ break;\r
+ default:\r
+ //\r
+ // Round the specified amount up to the next power of two. If rounding is\r
+ // successful, reserve the rounded value. Fall back to the default\r
+ // otherwise.\r
+ //\r
+ HighBit = HighBitSetRoundUp32 (ReservationHint.NonPrefetchable32BitMmio);\r
+ if (HighBit != -1) {\r
+ SetMmioPadding (--FirstResource, FALSE, TRUE, (UINTN)HighBit);\r
+ DefaultMmio = FALSE;\r
+ }\r
+\r
+ break;\r
}\r
\r
//\r
// rounding is successful, reserve the rounded value. Do not reserve\r
// prefetchable MMIO space otherwise.\r
//\r
- if (ReservationHint.Prefetchable32BitMmio > 0 &&\r
- ReservationHint.Prefetchable32BitMmio < MAX_UINT32) {\r
+ if ((ReservationHint.Prefetchable32BitMmio > 0) &&\r
+ (ReservationHint.Prefetchable32BitMmio < MAX_UINT32))\r
+ {\r
HighBit = HighBitSetRoundUp32 (ReservationHint.Prefetchable32BitMmio);\r
if (HighBit != -1) {\r
SetMmioPadding (--FirstResource, TRUE, TRUE, (UINTN)HighBit);\r
}\r
- } else if (ReservationHint.Prefetchable64BitMmio > 0 &&\r
- ReservationHint.Prefetchable64BitMmio < MAX_UINT64) {\r
+ } else if ((ReservationHint.Prefetchable64BitMmio > 0) &&\r
+ (ReservationHint.Prefetchable64BitMmio < MAX_UINT64))\r
+ {\r
HighBit = HighBitSetRoundUp64 (ReservationHint.Prefetchable64BitMmio);\r
if (HighBit != -1) {\r
SetMmioPadding (--FirstResource, TRUE, FALSE, (UINTN)HighBit);\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Entry point for this driver.\r
\r
EFI_STATUS\r
EFIAPI\r
DriverInitialize (\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
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
mPciExtConfSpaceSupported = (PcdGet16 (PcdOvmfHostBridgePciDevId) ==\r
INTEL_Q35_MCH_DEVICE_ID);\r
- mPciHotPlugInit.GetRootHpcList = GetRootHpcList;\r
- mPciHotPlugInit.InitializeRootHpc = InitializeRootHpc;\r
+ mPciHotPlugInit.GetRootHpcList = GetRootHpcList;\r
+ mPciHotPlugInit.InitializeRootHpc = InitializeRootHpc;\r
mPciHotPlugInit.GetResourcePadding = GetResourcePadding;\r
- Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle,\r
- &gEfiPciHotPlugInitProtocolGuid, &mPciHotPlugInit, NULL);\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &ImageHandle,\r
+ &gEfiPciHotPlugInitProtocolGuid,\r
+ &mPciHotPlugInit,\r
+ NULL\r
+ );\r
return Status;\r
}\r