[edk2-devel] [PATCH v4 7/9] OvmfPkg/PciHostBridgeUtilityLib: Extend parameter list of GetRootBridges
Jiahui Cen via groups.io
cenjiahui=huawei.com at groups.io
Tue Jan 12 09:45:47 UTC 2021
Extend parameter list of PciHostBridgeUtilityGetRootBridges() with
DmaAbove4G, NoExtendedConfigSpace, BusMin and BusMax to support for
ArmVirtPkg.
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3059
Cc: Jordan Justen <jordan.l.justen at intel.com>
Cc: Laszlo Ersek <lersek at redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel at arm.com>
Signed-off-by: Jiahui Cen <cenjiahui at huawei.com>
Signed-off-by: Yubo Miao <miaoyubo at huawei.com>
---
OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf | 3 --
OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h | 30 +++++++++----
OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c | 7 +++
OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c | 47 ++++++++++++--------
4 files changed, 57 insertions(+), 30 deletions(-)
diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf
index 4cdf367ffee2..83a734c1725e 100644
--- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf
+++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf
@@ -41,6 +41,3 @@ [LibraryClasses]
MemoryAllocationLib
PciLib
QemuFwCfgLib
-
-[Pcd]
- gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
diff --git a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h b/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h
index 29ea19f2d7e5..ed2b386001e1 100644
--- a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h
+++ b/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h
@@ -100,23 +100,31 @@ PciHostBridgeUtilityUninitRootBridge (
/**
Utility function to return all the root bridge instances in an array.
- @param[out] Count The number of root bridge instances.
+ @param[out] Count The number of root bridge instances.
- @param[in] Attributes Initial attributes.
+ @param[in] Attributes Initial attributes.
- @param[in] AllocAttributes Allocation attributes.
+ @param[in] AllocAttributes Allocation attributes.
- @param[in] Io IO aperture.
+ @param[in] DmaAbove4G DMA above 4GB memory.
- @param[in] Mem MMIO aperture.
+ @param[in] NoExtendedConfigSpace No Extended Config Space.
- @param[in] MemAbove4G MMIO aperture above 4G.
+ @param[in] BusMin Minimum Bus number
- @param[in] PMem Prefetchable MMIO aperture.
+ @param[in] BusMax Maximum Bus number
- @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
+ @param[in] Io IO aperture.
- @return All the root bridge instances in an array.
+ @param[in] Mem MMIO aperture.
+
+ @param[in] MemAbove4G MMIO aperture above 4G.
+
+ @param[in] PMem Prefetchable MMIO aperture.
+
+ @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
+
+ @return All the root bridge instances in an array.
**/
PCI_ROOT_BRIDGE *
EFIAPI
@@ -124,6 +132,10 @@ PciHostBridgeUtilityGetRootBridges (
UINTN *Count,
UINT64 Attributes,
UINT64 AllocationAttributes,
+ BOOLEAN DmaAbove4G,
+ BOOLEAN NoExtendedConfigSpace,
+ UINT32 BusMin,
+ UINT32 BusMax,
PCI_ROOT_BRIDGE_APERTURE *Io,
PCI_ROOT_BRIDGE_APERTURE *Mem,
PCI_ROOT_BRIDGE_APERTURE *MemAbove4G,
diff --git a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c
index 0a1d94a29bf3..28ad32752cab 100644
--- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c
+++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c
@@ -9,6 +9,9 @@
**/
#include <PiDxe.h>
+#include <IndustryStandard/Pci.h>
+#include <IndustryStandard/Q35MchIch9.h>
+
#include <Protocol/PciHostBridgeResourceAllocation.h>
#include <Protocol/PciRootBridgeIo.h>
@@ -81,6 +84,10 @@ PciHostBridgeGetRootBridges (
Count,
Attributes,
AllocationAttributes,
+ FALSE,
+ PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
+ 0,
+ PCI_MAX_BUS,
&Io,
&Mem,
&MemAbove4G,
diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c
index 629ebcd7a5be..fd2f54a139e2 100644
--- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c
+++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c
@@ -12,7 +12,6 @@
#include <IndustryStandard/Acpi10.h>
#include <IndustryStandard/Pci.h>
-#include <IndustryStandard/Q35MchIch9.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/DevicePathLib.h>
@@ -189,23 +188,31 @@ PciHostBridgeUtilityUninitRootBridge (
/**
Utility function to return all the root bridge instances in an array.
- @param[out] Count The number of root bridge instances.
+ @param[out] Count The number of root bridge instances.
- @param[in] Attributes Initial attributes.
+ @param[in] Attributes Initial attributes.
- @param[in] AllocAttributes Allocation attributes.
+ @param[in] AllocAttributes Allocation attributes.
- @param[in] Io IO aperture.
+ @param[in] DmaAbove4G DMA above 4GB memory.
- @param[in] Mem MMIO aperture.
+ @param[in] NoExtendedConfigSpace No Extended Config Space.
- @param[in] MemAbove4G MMIO aperture above 4G.
+ @param[in] BusMin Minimum Bus number
- @param[in] PMem Prefetchable MMIO aperture.
+ @param[in] BusMax Maximum Bus number
- @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
+ @param[in] Io IO aperture.
- @return All the root bridge instances in an array.
+ @param[in] Mem MMIO aperture.
+
+ @param[in] MemAbove4G MMIO aperture above 4G.
+
+ @param[in] PMem Prefetchable MMIO aperture.
+
+ @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
+
+ @return All the root bridge instances in an array.
**/
PCI_ROOT_BRIDGE *
EFIAPI
@@ -213,6 +220,10 @@ PciHostBridgeUtilityGetRootBridges (
UINTN *Count,
UINT64 Attributes,
UINT64 AllocationAttributes,
+ BOOLEAN DmaAbove4G,
+ BOOLEAN NoExtendedConfigSpace,
+ UINT32 BusMin,
+ UINT32 BusMax,
PCI_ROOT_BRIDGE_APERTURE *Io,
PCI_ROOT_BRIDGE_APERTURE *Mem,
PCI_ROOT_BRIDGE_APERTURE *MemAbove4G,
@@ -240,7 +251,7 @@ PciHostBridgeUtilityGetRootBridges (
QemuFwCfgSelectItem (FwCfgItem);
QemuFwCfgReadBytes (FwCfgSize, &ExtraRootBridges);
- if (ExtraRootBridges > PCI_MAX_BUS) {
+ if (ExtraRootBridges > BusMax - BusMin) {
DEBUG ((DEBUG_ERROR, "%a: invalid count of extra root buses (%Lu) "
"reported by QEMU\n", __FUNCTION__, ExtraRootBridges));
return NULL;
@@ -262,15 +273,15 @@ PciHostBridgeUtilityGetRootBridges (
//
// The "main" root bus is always there.
//
- LastRootBridgeNumber = 0;
+ LastRootBridgeNumber = BusMin;
//
// Scan all other root buses. If function 0 of any device on a bus returns a
// VendorId register value different from all-bits-one, then that bus is
// alive.
//
- for (RootBridgeNumber = 1;
- RootBridgeNumber <= PCI_MAX_BUS && Initialized < ExtraRootBridges;
+ for (RootBridgeNumber = BusMin + 1;
+ RootBridgeNumber <= BusMax && Initialized < ExtraRootBridges;
++RootBridgeNumber) {
UINTN Device;
@@ -290,8 +301,8 @@ PciHostBridgeUtilityGetRootBridges (
Attributes,
Attributes,
AllocationAttributes,
- FALSE,
- PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
+ DmaAbove4G,
+ NoExtendedConfigSpace,
(UINT8) LastRootBridgeNumber,
(UINT8) (RootBridgeNumber - 1),
Io,
@@ -317,8 +328,8 @@ PciHostBridgeUtilityGetRootBridges (
Attributes,
Attributes,
AllocationAttributes,
- FALSE,
- PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID,
+ DmaAbove4G,
+ NoExtendedConfigSpace,
(UINT8) LastRootBridgeNumber,
PCI_MAX_BUS,
Io,
--
2.29.2
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70154): https://edk2.groups.io/g/devel/message/70154
Mute This Topic: https://groups.io/mt/79619797/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list