OvmfPkg/PciHostBridgeUtilityLib: Extend parameters of InitRootBridge()

Extend parameter list of PciHostBridgeUtilityInitRootBridge() with
DmaAbove4G and NoExtendedConfigSpace to prepare for sharing with
ArmVirtPkg.

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3059

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Julien Grall <julien@xen.org>
Signed-off-by: Jiahui Cen <cenjiahui@huawei.com>
Signed-off-by: Yubo Miao <miaoyubo@huawei.com>
Message-Id: <20210119011302.10908-6-cenjiahui@huawei.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
Jiahui Cen via groups.io 2021-01-19 09:12:56 +08:00 committed by mergify[bot]
parent 7ac1f28d4d
commit e1b259da42
6 changed files with 73 additions and 57 deletions

View File

@ -26,16 +26,22 @@
@param[in] AllocAttributes Allocation attributes. @param[in] AllocAttributes Allocation attributes.
@param[in] DmaAbove4G DMA above 4GB memory.
@param[in] NoExtendedConfigSpace No Extended Config Space.
@param[in] RootBusNumber The bus number to store in RootBus. @param[in] RootBusNumber The bus number to store in RootBus.
@param[in] MaxSubBusNumber The inclusive maximum bus number that can be @param[in] MaxSubBusNumber The inclusive maximum bus number that can
assigned to any subordinate bus found behind any be assigned to any subordinate bus found
PCI bridge hanging off this root bus. behind any PCI bridge hanging off this
root bus.
The caller is repsonsible for ensuring that The caller is repsonsible for ensuring
RootBusNumber <= MaxSubBusNumber. If that RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then the RootBusNumber equals MaxSubBusNumber, then
root bus has no room for subordinate buses. the root bus has no room for subordinate
buses.
@param[in] Io IO aperture. @param[in] Io IO aperture.
@ -47,14 +53,14 @@
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
@param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated by the @param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated
caller) that should be filled in by this by the caller) that should be filled in by
function. this function.
@retval EFI_SUCCESS Initialization successful. A device path @retval EFI_SUCCESS Initialization successful. A device path
consisting of an ACPI device path node, with consisting of an ACPI device path node,
UID = RootBusNumber, has been allocated and with UID = RootBusNumber, has been
linked into RootBus. allocated and linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed. @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/ **/
@ -64,6 +70,8 @@ PciHostBridgeUtilityInitRootBridge (
IN UINT64 Supports, IN UINT64 Supports,
IN UINT64 Attributes, IN UINT64 Attributes,
IN UINT64 AllocAttributes, IN UINT64 AllocAttributes,
IN BOOLEAN DmaAbove4G,
IN BOOLEAN NoExtendedConfigSpace,
IN UINT8 RootBusNumber, IN UINT8 RootBusNumber,
IN UINT8 MaxSubBusNumber, IN UINT8 MaxSubBusNumber,
IN PCI_ROOT_BRIDGE_APERTURE *Io, IN PCI_ROOT_BRIDGE_APERTURE *Io,

View File

@ -10,6 +10,7 @@
#include <PiDxe.h> #include <PiDxe.h>
#include <IndustryStandard/Pci.h> #include <IndustryStandard/Pci.h>
#include <IndustryStandard/Q35MchIch9.h>
#include <Protocol/PciHostBridgeResourceAllocation.h> #include <Protocol/PciHostBridgeResourceAllocation.h>
#include <Protocol/PciRootBridgeIo.h> #include <Protocol/PciRootBridgeIo.h>
@ -151,6 +152,8 @@ PciHostBridgeGetRootBridges (
Attributes, Attributes,
Attributes, Attributes,
AllocationAttributes, AllocationAttributes,
FALSE,
PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
(UINT8) LastRootBridgeNumber, (UINT8) LastRootBridgeNumber,
(UINT8) (RootBridgeNumber - 1), (UINT8) (RootBridgeNumber - 1),
&Io, &Io,
@ -176,6 +179,8 @@ PciHostBridgeGetRootBridges (
Attributes, Attributes,
Attributes, Attributes,
AllocationAttributes, AllocationAttributes,
FALSE,
PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
(UINT8) LastRootBridgeNumber, (UINT8) LastRootBridgeNumber,
PCI_MAX_BUS, PCI_MAX_BUS,
&Io, &Io,

View File

@ -50,4 +50,5 @@
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration

View File

@ -456,6 +456,7 @@ ScanForRootBridges (
ASSERT (RootBridges != NULL); ASSERT (RootBridges != NULL);
PciHostBridgeUtilityInitRootBridge ( PciHostBridgeUtilityInitRootBridge (
Attributes, Attributes, 0, Attributes, Attributes, 0,
FALSE, PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
(UINT8) PrimaryBus, (UINT8) SubBus, (UINT8) PrimaryBus, (UINT8) SubBus,
&Io, &Mem, &MemAbove4G, &mNonExistAperture, &mNonExistAperture, &Io, &Mem, &MemAbove4G, &mNonExistAperture, &mNonExistAperture,
&RootBridges[*NumberOfRootBridges] &RootBridges[*NumberOfRootBridges]

View File

@ -11,12 +11,10 @@
**/ **/
#include <IndustryStandard/Acpi10.h> #include <IndustryStandard/Acpi10.h>
#include <IndustryStandard/Q35MchIch9.h>
#include <Library/BaseMemoryLib.h> #include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/DevicePathLib.h> #include <Library/DevicePathLib.h>
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/PciHostBridgeUtilityLib.h> #include <Library/PciHostBridgeUtilityLib.h>
@ -70,16 +68,22 @@ OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = {
@param[in] AllocAttributes Allocation attributes. @param[in] AllocAttributes Allocation attributes.
@param[in] DmaAbove4G DMA above 4GB memory.
@param[in] NoExtendedConfigSpace No Extended Config Space.
@param[in] RootBusNumber The bus number to store in RootBus. @param[in] RootBusNumber The bus number to store in RootBus.
@param[in] MaxSubBusNumber The inclusive maximum bus number that can be @param[in] MaxSubBusNumber The inclusive maximum bus number that can
assigned to any subordinate bus found behind any be assigned to any subordinate bus found
PCI bridge hanging off this root bus. behind any PCI bridge hanging off this
root bus.
The caller is repsonsible for ensuring that The caller is repsonsible for ensuring
RootBusNumber <= MaxSubBusNumber. If that RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then the RootBusNumber equals MaxSubBusNumber, then
root bus has no room for subordinate buses. the root bus has no room for subordinate
buses.
@param[in] Io IO aperture. @param[in] Io IO aperture.
@ -91,14 +95,14 @@ OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = {
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
@param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated by the @param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated
caller) that should be filled in by this by the caller) that should be filled in by
function. this function.
@retval EFI_SUCCESS Initialization successful. A device path @retval EFI_SUCCESS Initialization successful. A device path
consisting of an ACPI device path node, with consisting of an ACPI device path node,
UID = RootBusNumber, has been allocated and with UID = RootBusNumber, has been
linked into RootBus. allocated and linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed. @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/ **/
@ -108,6 +112,8 @@ PciHostBridgeUtilityInitRootBridge (
IN UINT64 Supports, IN UINT64 Supports,
IN UINT64 Attributes, IN UINT64 Attributes,
IN UINT64 AllocAttributes, IN UINT64 AllocAttributes,
IN BOOLEAN DmaAbove4G,
IN BOOLEAN NoExtendedConfigSpace,
IN UINT8 RootBusNumber, IN UINT8 RootBusNumber,
IN UINT8 MaxSubBusNumber, IN UINT8 MaxSubBusNumber,
IN PCI_ROOT_BRIDGE_APERTURE *Io, IN PCI_ROOT_BRIDGE_APERTURE *Io,
@ -130,7 +136,7 @@ PciHostBridgeUtilityInitRootBridge (
RootBus->Supports = Supports; RootBus->Supports = Supports;
RootBus->Attributes = Attributes; RootBus->Attributes = Attributes;
RootBus->DmaAbove4G = FALSE; RootBus->DmaAbove4G = DmaAbove4G;
RootBus->AllocationAttributes = AllocAttributes; RootBus->AllocationAttributes = AllocAttributes;
RootBus->Bus.Base = RootBusNumber; RootBus->Bus.Base = RootBusNumber;
@ -141,8 +147,7 @@ PciHostBridgeUtilityInitRootBridge (
CopyMem (&RootBus->PMem, PMem, sizeof (*PMem)); CopyMem (&RootBus->PMem, PMem, sizeof (*PMem));
CopyMem (&RootBus->PMemAbove4G, PMemAbove4G, sizeof (*PMemAbove4G)); CopyMem (&RootBus->PMemAbove4G, PMemAbove4G, sizeof (*PMemAbove4G));
RootBus->NoExtendedConfigSpace = (PcdGet16 (PcdOvmfHostBridgePciDevId) != RootBus->NoExtendedConfigSpace = NoExtendedConfigSpace;
INTEL_Q35_MCH_DEVICE_ID);
DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate, DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate,
&mRootBridgeDevicePathTemplate); &mRootBridgeDevicePathTemplate);

View File

@ -39,7 +39,3 @@
DebugLib DebugLib
DevicePathLib DevicePathLib
MemoryAllocationLib MemoryAllocationLib
PcdLib
[Pcd]
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId