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

@ -20,43 +20,49 @@
/** /**
Utility function to initialize a PCI_ROOT_BRIDGE structure. Utility function to initialize a PCI_ROOT_BRIDGE structure.
@param[in] Supports Supported attributes. @param[in] Supports Supported attributes.
@param[in] Attributes Initial attributes. @param[in] Attributes Initial attributes.
@param[in] AllocAttributes Allocation attributes. @param[in] AllocAttributes Allocation attributes.
@param[in] RootBusNumber The bus number to store in RootBus. @param[in] DmaAbove4G DMA above 4GB memory.
@param[in] MaxSubBusNumber The inclusive maximum bus number that can be @param[in] NoExtendedConfigSpace No Extended Config Space.
assigned to any subordinate bus found behind any
PCI bridge hanging off this root bus.
The caller is repsonsible for ensuring that @param[in] RootBusNumber The bus number to store in RootBus.
RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then the
root bus has no room for subordinate buses.
@param[in] Io IO aperture. @param[in] MaxSubBusNumber The inclusive maximum bus number that can
be assigned to any subordinate bus found
behind any PCI bridge hanging off this
root bus.
@param[in] Mem MMIO aperture. The caller is repsonsible for ensuring
that RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then
the root bus has no room for subordinate
buses.
@param[in] MemAbove4G MMIO aperture above 4G. @param[in] Io IO aperture.
@param[in] PMem Prefetchable MMIO aperture. @param[in] Mem MMIO aperture.
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. @param[in] MemAbove4G MMIO aperture above 4G.
@param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated by the @param[in] PMem Prefetchable MMIO aperture.
caller) that should be filled in by this
function.
@retval EFI_SUCCESS Initialization successful. A device path @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
consisting of an ACPI device path node, with
UID = RootBusNumber, has been allocated and
linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed. @param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated
by the caller) that should be filled in by
this function.
@retval EFI_SUCCESS Initialization successful. A device path
consisting of an ACPI device path node,
with UID = RootBusNumber, has been
allocated and linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
@ -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>
@ -64,43 +62,49 @@ OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = {
/** /**
Utility function to initialize a PCI_ROOT_BRIDGE structure. Utility function to initialize a PCI_ROOT_BRIDGE structure.
@param[in] Supports Supported attributes. @param[in] Supports Supported attributes.
@param[in] Attributes Initial attributes. @param[in] Attributes Initial attributes.
@param[in] AllocAttributes Allocation attributes. @param[in] AllocAttributes Allocation attributes.
@param[in] RootBusNumber The bus number to store in RootBus. @param[in] DmaAbove4G DMA above 4GB memory.
@param[in] MaxSubBusNumber The inclusive maximum bus number that can be @param[in] NoExtendedConfigSpace No Extended Config Space.
assigned to any subordinate bus found behind any
PCI bridge hanging off this root bus.
The caller is repsonsible for ensuring that @param[in] RootBusNumber The bus number to store in RootBus.
RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then the
root bus has no room for subordinate buses.
@param[in] Io IO aperture. @param[in] MaxSubBusNumber The inclusive maximum bus number that can
be assigned to any subordinate bus found
behind any PCI bridge hanging off this
root bus.
@param[in] Mem MMIO aperture. The caller is repsonsible for ensuring
that RootBusNumber <= MaxSubBusNumber. If
RootBusNumber equals MaxSubBusNumber, then
the root bus has no room for subordinate
buses.
@param[in] MemAbove4G MMIO aperture above 4G. @param[in] Io IO aperture.
@param[in] PMem Prefetchable MMIO aperture. @param[in] Mem MMIO aperture.
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. @param[in] MemAbove4G MMIO aperture above 4G.
@param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated by the @param[in] PMem Prefetchable MMIO aperture.
caller) that should be filled in by this
function.
@retval EFI_SUCCESS Initialization successful. A device path @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
consisting of an ACPI device path node, with
UID = RootBusNumber, has been allocated and
linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed. @param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated
by the caller) that should be filled in by
this function.
@retval EFI_SUCCESS Initialization successful. A device path
consisting of an ACPI device path node,
with UID = RootBusNumber, has been
allocated and linked into RootBus.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
@ -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