From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mx.groups.io with SMTP id smtpd.web12.6136.1610534033004198989 for ; Wed, 13 Jan 2021 02:33:53 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: huawei.com, ip: 45.249.212.191, mailfrom: cenjiahui@huawei.com) Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DG3g60HSTzj6Q6; Wed, 13 Jan 2021 18:32:50 +0800 (CST) Received: from localhost (10.174.184.155) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.498.0; Wed, 13 Jan 2021 18:33:44 +0800 From: "Jiahui Cen" To: CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Rebecca Cran , Peter Grehan , Anthony Perard , Julien Grall , Leif Lindholm , Sami Mujawar , , , Jiahui Cen , Yubo Miao Subject: [PATCH v5 08/10] OvmfPkg/PciHostBridgeUtilityLib: Extend parameter list of GetRootBridges Date: Wed, 13 Jan 2021 18:33:29 +0800 Message-ID: <20210113103331.10375-9-cenjiahui@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210113103331.10375-1-cenjiahui@huawei.com> References: <20210113103331.10375-1-cenjiahui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.184.155] X-CFilter-Loop: Reflected Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Extend parameter list of PciHostBridgeUtilityGetRootBridges() with DmaAbove4G, NoExtendedConfigSpace, BusMin and BusMax to support for ArmVirtPkg. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3059 Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Jiahui Cen Signed-off-by: Yubo Miao --- OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf | 4= -- OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h | 30= ++++++++---- OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c | 7= +++ OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c | 48= ++++++++++++-------- 4 files changed, 57 insertions(+), 32 deletions(-) diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtility= Lib.inf b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib= .inf index fdae8cfe872e..83a734c1725e 100644 --- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf +++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf @@ -39,9 +39,5 @@ [LibraryClasses] DebugLib DevicePathLib MemoryAllocationLib - PcdLib 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. =20 - @param[out] Count The number of root bridge instances. + @param[out] Count The number of root bridge instances= . =20 - @param[in] Attributes Initial attributes. + @param[in] Attributes Initial attributes. =20 - @param[in] AllocAttributes Allocation attributes. + @param[in] AllocAttributes Allocation attributes. =20 - @param[in] Io IO aperture. + @param[in] DmaAbove4G DMA above 4GB memory. =20 - @param[in] Mem MMIO aperture. + @param[in] NoExtendedConfigSpace No Extended Config Space. =20 - @param[in] MemAbove4G MMIO aperture above 4G. + @param[in] BusMin Minimum Bus number =20 - @param[in] PMem Prefetchable MMIO aperture. + @param[in] BusMax Maximum Bus number =20 - @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. + @param[in] Io IO aperture. =20 - @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/OvmfPk= g/Library/PciHostBridgeLib/PciHostBridgeLib.c index 62e0a517a938..bd125834e5c4 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c +++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c @@ -9,6 +9,9 @@ **/ #include =20 +#include +#include + #include #include =20 @@ -82,6 +85,10 @@ PciHostBridgeGetRootBridges ( Count, Attributes, AllocationAttributes, + FALSE, + PcdGet16 (PcdOvmfHostBridgePciDevId) !=3D INTEL_Q35_MCH_DEVICE_ID, + 0, + PCI_MAX_BUS, &Io, &Mem, &MemAbove4G, diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtility= Lib.c b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c index 31a8c19d4f7f..fa090c428d13 100644 --- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c +++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c @@ -12,12 +12,10 @@ =20 #include #include -#include #include #include #include #include -#include #include #include #include @@ -190,23 +188,31 @@ PciHostBridgeUtilityUninitRootBridge ( /** Utility function to return all the root bridge instances in an array. =20 - @param[out] Count The number of root bridge instances. + @param[out] Count The number of root bridge instances= . =20 - @param[in] Attributes Initial attributes. + @param[in] Attributes Initial attributes. =20 - @param[in] AllocAttributes Allocation attributes. + @param[in] AllocAttributes Allocation attributes. =20 - @param[in] Io IO aperture. + @param[in] DmaAbove4G DMA above 4GB memory. =20 - @param[in] Mem MMIO aperture. + @param[in] NoExtendedConfigSpace No Extended Config Space. =20 - @param[in] MemAbove4G MMIO aperture above 4G. + @param[in] BusMin Minimum Bus number =20 - @param[in] PMem Prefetchable MMIO aperture. + @param[in] BusMax Maximum Bus number =20 - @param[in] PMemAbove4G Prefetchable MMIO aperture above 4G. + @param[in] Io IO aperture. =20 - @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 @@ -214,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, @@ -241,7 +251,7 @@ PciHostBridgeUtilityGetRootBridges ( QemuFwCfgSelectItem (FwCfgItem); QemuFwCfgReadBytes (FwCfgSize, &ExtraRootBridges); =20 - 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; @@ -263,15 +273,15 @@ PciHostBridgeUtilityGetRootBridges ( // // The "main" root bus is always there. // - LastRootBridgeNumber =3D 0; + LastRootBridgeNumber =3D BusMin; =20 // // Scan all other root buses. If function 0 of any device on a bus ret= urns a // VendorId register value different from all-bits-one, then that bus = is // alive. // - for (RootBridgeNumber =3D 1; - RootBridgeNumber <=3D PCI_MAX_BUS && Initialized < ExtraRootBridg= es; + for (RootBridgeNumber =3D BusMin + 1; + RootBridgeNumber <=3D BusMax && Initialized < ExtraRootBridges; ++RootBridgeNumber) { UINTN Device; =20 @@ -291,8 +301,8 @@ PciHostBridgeUtilityGetRootBridges ( Attributes, Attributes, AllocationAttributes, - FALSE, - PcdGet16 (PcdOvmfHostBridgePciDevId) !=3D INTEL_Q35_MCH_DEVICE_I= D, + DmaAbove4G, + NoExtendedConfigSpace, (UINT8) LastRootBridgeNumber, (UINT8) (RootBridgeNumber - 1), Io, @@ -318,8 +328,8 @@ PciHostBridgeUtilityGetRootBridges ( Attributes, Attributes, AllocationAttributes, - FALSE, - PcdGet16 (PcdOvmfHostBridgePciDevId) !=3D INTEL_Q35_MCH_DEVICE_ID, + DmaAbove4G, + NoExtendedConfigSpace, (UINT8) LastRootBridgeNumber, PCI_MAX_BUS, Io, --=20 2.29.2