From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by mx.groups.io with SMTP id smtpd.web12.6135.1610534032202109297 for ; Wed, 13 Jan 2021 02:33:52 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: huawei.com, ip: 45.249.212.32, mailfrom: cenjiahui@huawei.com) Received: from DGGEMS405-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4DG3gH5jFLzj5L4; Wed, 13 Jan 2021 18:32:59 +0800 (CST) Received: from localhost (10.174.184.155) by DGGEMS405-HUB.china.huawei.com (10.3.19.205) with Microsoft SMTP Server id 14.3.498.0; Wed, 13 Jan 2021 18:33:42 +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 04/10] OvmfPkg/PciHostBridgeLib: Extract Init/UninitRootBridge Date: Wed, 13 Jan 2021 18:33:25 +0800 Message-ID: <20210113103331.10375-5-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 Extract InitRootBridge()/UninitRootBridge() to PciHostBridgeUtilityLib as common utility functions. No change of functionality. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3059 Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Cc: Anthony Perard Cc: Julien Grall Signed-off-by: Jiahui Cen Signed-off-by: Yubo Miao --- OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf | = 2 - OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf | = 8 + OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h | 7= 5 ++++++++++ OvmfPkg/Library/PciHostBridgeLib/PciHostBridge.h | 5= 6 ------- OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c | 15= 8 +------------------- OvmfPkg/Library/PciHostBridgeLib/XenSupport.c | = 3 +- OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c | 15= 6 +++++++++++++++++++ 7 files changed, 245 insertions(+), 213 deletions(-) diff --git a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf b/Ovmf= Pkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf index cec3f1631a72..7944f94b7743 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf +++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf @@ -37,7 +37,6 @@ [Packages] [LibraryClasses] BaseMemoryLib DebugLib - DevicePathLib MemoryAllocationLib PcdLib PciHostBridgeUtilityLib @@ -51,5 +50,4 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size - gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtility= Lib.inf b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib= .inf index 1ba8ec3e03c7..e3d0a3740952 100644 --- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf +++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf @@ -30,8 +30,16 @@ [Sources] PciHostBridgeUtilityLib.c =20 [Packages] + MdeModulePkg/MdeModulePkg.dec MdePkg/MdePkg.dec OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] + BaseMemoryLib DebugLib + DevicePathLib + MemoryAllocationLib + PcdLib + +[Pcd] + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId diff --git a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h b/OvmfPkg/= Include/Library/PciHostBridgeUtilityLib.h index f932d412aa10..f02cec812a50 100644 --- a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h +++ b/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h @@ -14,6 +14,81 @@ #define __PCI_HOST_BRIDGE_UTILITY_LIB_H__ =20 =20 +#include + + +/** + Utility function to initialize a PCI_ROOT_BRIDGE structure. + + @param[in] Supports Supported attributes. + + @param[in] Attributes Initial attributes. + + @param[in] AllocAttributes Allocation attributes. + + @param[in] RootBusNumber The bus number to store in RootBus. + + @param[in] MaxSubBusNumber The inclusive maximum bus number that can= be + assigned to any subordinate bus found beh= ind any + PCI bridge hanging off this root bus. + + The caller is repsonsible for ensuring th= at + RootBusNumber <=3D MaxSubBusNumber. If + RootBusNumber equals MaxSubBusNumber, the= n the + root bus has no room for subordinate buse= s. + + @param[in] Io IO aperture. + + @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. + + @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 =3D RootBusNumber, has been allocate= d and + linked into RootBus. + + @retval EFI_OUT_OF_RESOURCES Memory allocation failed. +**/ +EFI_STATUS +PciHostBridgeUtilityInitRootBridge ( + IN UINT64 Supports, + IN UINT64 Attributes, + IN UINT64 AllocAttributes, + IN UINT8 RootBusNumber, + IN UINT8 MaxSubBusNumber, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, + OUT PCI_ROOT_BRIDGE *RootBus + ); + + +/** + Utility function to uninitialize a PCI_ROOT_BRIDGE structure set up wi= th + PciHostBridgeUtilityInitRootBridge(). + + param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the cal= ler and + initialized with PciHostBridgeUtilityInitRootBridge= (), + that should be uninitialized. This function doesn't= free + RootBus. +**/ +VOID +PciHostBridgeUtilityUninitRootBridge ( + IN PCI_ROOT_BRIDGE *RootBus + ); + + /** Utility function to inform the platform that the resource conflict hap= pens. =20 diff --git a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridge.h b/OvmfPkg/L= ibrary/PciHostBridgeLib/PciHostBridge.h index 134d7411214d..a2e4d8696281 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridge.h +++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridge.h @@ -11,59 +11,3 @@ PCI_ROOT_BRIDGE * ScanForRootBridges ( UINTN *NumberOfRootBridges ); - -/** - Initialize a PCI_ROOT_BRIDGE structure. - - @param[in] Supports Supported attributes. - - @param[in] Attributes Initial attributes. - - @param[in] AllocAttributes Allocation attributes. - - @param[in] RootBusNumber The bus number to store in RootBus. - - @param[in] MaxSubBusNumber The inclusive maximum bus number that can= be - assigned to any subordinate bus found beh= ind any - PCI bridge hanging off this root bus. - - The caller is repsonsible for ensuring th= at - RootBusNumber <=3D MaxSubBusNumber. If - RootBusNumber equals MaxSubBusNumber, the= n the - root bus has no room for subordinate buse= s. - - @param[in] Io IO aperture. - - @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. - - @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 =3D RootBusNumber, has been allocate= d and - linked into RootBus. - - @retval EFI_OUT_OF_RESOURCES Memory allocation failed. -**/ -EFI_STATUS -InitRootBridge ( - IN UINT64 Supports, - IN UINT64 Attributes, - IN UINT64 AllocAttributes, - IN UINT8 RootBusNumber, - IN UINT8 MaxSubBusNumber, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, - OUT PCI_ROOT_BRIDGE *RootBus - ); diff --git a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c b/OvmfPk= g/Library/PciHostBridgeLib/PciHostBridgeLib.c index bf32455b9f0d..07fa98110e98 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c +++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c @@ -10,14 +10,12 @@ #include =20 #include -#include =20 #include #include =20 #include #include -#include #include #include #include @@ -27,156 +25,8 @@ #include "PciHostBridge.h" =20 =20 -#pragma pack(1) -typedef struct { - ACPI_HID_DEVICE_PATH AcpiDevicePath; - EFI_DEVICE_PATH_PROTOCOL EndDevicePath; -} OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH; -#pragma pack () - - -STATIC -CONST -OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate =3D { - { - { - ACPI_DEVICE_PATH, - ACPI_DP, - { - (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)), - (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8) - } - }, - EISA_PNP_ID(0x0A03), // HID - 0 // UID - }, - - { - END_DEVICE_PATH_TYPE, - END_ENTIRE_DEVICE_PATH_SUBTYPE, - { - END_DEVICE_PATH_LENGTH, - 0 - } - } -}; - STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture =3D { MAX_UINT64, 0 }; =20 -/** - Initialize a PCI_ROOT_BRIDGE structure. - - @param[in] Supports Supported attributes. - - @param[in] Attributes Initial attributes. - - @param[in] AllocAttributes Allocation attributes. - - @param[in] RootBusNumber The bus number to store in RootBus. - - @param[in] MaxSubBusNumber The inclusive maximum bus number that can= be - assigned to any subordinate bus found beh= ind any - PCI bridge hanging off this root bus. - - The caller is repsonsible for ensuring th= at - RootBusNumber <=3D MaxSubBusNumber. If - RootBusNumber equals MaxSubBusNumber, the= n the - root bus has no room for subordinate buse= s. - - @param[in] Io IO aperture. - - @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. - - @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 =3D RootBusNumber, has been allocate= d and - linked into RootBus. - - @retval EFI_OUT_OF_RESOURCES Memory allocation failed. -**/ -EFI_STATUS -InitRootBridge ( - IN UINT64 Supports, - IN UINT64 Attributes, - IN UINT64 AllocAttributes, - IN UINT8 RootBusNumber, - IN UINT8 MaxSubBusNumber, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, - OUT PCI_ROOT_BRIDGE *RootBus - ) -{ - OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH *DevicePath; - - // - // Be safe if other fields are added to PCI_ROOT_BRIDGE later. - // - ZeroMem (RootBus, sizeof *RootBus); - - RootBus->Segment =3D 0; - - RootBus->Supports =3D Supports; - RootBus->Attributes =3D Attributes; - - RootBus->DmaAbove4G =3D FALSE; - - RootBus->AllocationAttributes =3D AllocAttributes; - RootBus->Bus.Base =3D RootBusNumber; - RootBus->Bus.Limit =3D MaxSubBusNumber; - CopyMem (&RootBus->Io, Io, sizeof (*Io)); - CopyMem (&RootBus->Mem, Mem, sizeof (*Mem)); - CopyMem (&RootBus->MemAbove4G, MemAbove4G, sizeof (*MemAbove4G)); - CopyMem (&RootBus->PMem, PMem, sizeof (*PMem)); - CopyMem (&RootBus->PMemAbove4G, PMemAbove4G, sizeof (*PMemAbove4G)); - - RootBus->NoExtendedConfigSpace =3D (PcdGet16 (PcdOvmfHostBridgePciDevI= d) !=3D - INTEL_Q35_MCH_DEVICE_ID); - - DevicePath =3D AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate, - &mRootBridgeDevicePathTemplate); - if (DevicePath =3D=3D NULL) { - DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES)= ); - return EFI_OUT_OF_RESOURCES; - } - DevicePath->AcpiDevicePath.UID =3D RootBusNumber; - RootBus->DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL *)DevicePath; - - DEBUG ((DEBUG_INFO, - "%a: populated root bus %d, with room for %d subordinate bus(es)\n", - __FUNCTION__, RootBusNumber, MaxSubBusNumber - RootBusNumber)); - return EFI_SUCCESS; -} - - -/** - Uninitialize a PCI_ROOT_BRIDGE structure set up with InitRootBridge(). - - param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the cal= ler and - initialized with InitRootBridge(), that should be - uninitialized. This function doesn't free RootBus. -**/ -STATIC -VOID -UninitRootBridge ( - IN PCI_ROOT_BRIDGE *RootBus - ) -{ - FreePool (RootBus->DevicePath); -} - =20 /** Return all the root bridge instances in an array. @@ -297,7 +147,7 @@ PciHostBridgeGetRootBridges ( // because now we know how big a bus number range *that* one has, = for any // subordinate buses that might exist behind PCI bridges hanging o= ff it. // - Status =3D InitRootBridge ( + Status =3D PciHostBridgeUtilityInitRootBridge ( Attributes, Attributes, AllocationAttributes, @@ -322,7 +172,7 @@ PciHostBridgeGetRootBridges ( // Install the last root bus (which might be the only, ie. main, root = bus, if // we've found no extra root buses). // - Status =3D InitRootBridge ( + Status =3D PciHostBridgeUtilityInitRootBridge ( Attributes, Attributes, AllocationAttributes, @@ -346,7 +196,7 @@ PciHostBridgeGetRootBridges ( FreeBridges: while (Initialized > 0) { --Initialized; - UninitRootBridge (&Bridges[Initialized]); + PciHostBridgeUtilityUninitRootBridge (&Bridges[Initialized]); } =20 FreePool (Bridges); @@ -375,7 +225,7 @@ PciHostBridgeFreeRootBridges ( =20 do { --Count; - UninitRootBridge (&Bridges[Count]); + PciHostBridgeUtilityUninitRootBridge (&Bridges[Count]); } while (Count > 0); =20 FreePool (Bridges); diff --git a/OvmfPkg/Library/PciHostBridgeLib/XenSupport.c b/OvmfPkg/Libr= ary/PciHostBridgeLib/XenSupport.c index 95ed0a280b9b..5dfeba0e6e23 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/XenSupport.c +++ b/OvmfPkg/Library/PciHostBridgeLib/XenSupport.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include "PciHostBridge.h" =20 @@ -453,7 +454,7 @@ ScanForRootBridges ( RootBridges ); ASSERT (RootBridges !=3D NULL); - InitRootBridge ( + PciHostBridgeUtilityInitRootBridge ( Attributes, Attributes, 0, (UINT8) PrimaryBus, (UINT8) SubBus, &Io, &Mem, &MemAbove4G, &mNonExistAperture, &mNonExistAperture, diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtility= Lib.c b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c index bbaa5f830c98..eed3d7f871ea 100644 --- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c +++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c @@ -11,16 +11,172 @@ **/ =20 #include +#include +#include #include +#include +#include +#include #include =20 =20 +#pragma pack(1) +typedef struct { + ACPI_HID_DEVICE_PATH AcpiDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH; +#pragma pack () + + GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr[] =3D { L"Mem", L"I/O", L"Bus" }; =20 =20 +STATIC +CONST +OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate =3D { + { + { + ACPI_DEVICE_PATH, + ACPI_DP, + { + (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)), + (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8) + } + }, + EISA_PNP_ID(0x0A03), // HID + 0 // UID + }, + + { + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + { + END_DEVICE_PATH_LENGTH, + 0 + } + } +}; + + +/** + Utility function to initialize a PCI_ROOT_BRIDGE structure. + + @param[in] Supports Supported attributes. + + @param[in] Attributes Initial attributes. + + @param[in] AllocAttributes Allocation attributes. + + @param[in] RootBusNumber The bus number to store in RootBus. + + @param[in] MaxSubBusNumber The inclusive maximum bus number that can= be + assigned to any subordinate bus found beh= ind any + PCI bridge hanging off this root bus. + + The caller is repsonsible for ensuring th= at + RootBusNumber <=3D MaxSubBusNumber. If + RootBusNumber equals MaxSubBusNumber, the= n the + root bus has no room for subordinate buse= s. + + @param[in] Io IO aperture. + + @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. + + @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 =3D RootBusNumber, has been allocate= d and + linked into RootBus. + + @retval EFI_OUT_OF_RESOURCES Memory allocation failed. +**/ +EFI_STATUS +PciHostBridgeUtilityInitRootBridge ( + IN UINT64 Supports, + IN UINT64 Attributes, + IN UINT64 AllocAttributes, + IN UINT8 RootBusNumber, + IN UINT8 MaxSubBusNumber, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, + OUT PCI_ROOT_BRIDGE *RootBus + ) +{ + OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH *DevicePath; + + // + // Be safe if other fields are added to PCI_ROOT_BRIDGE later. + // + ZeroMem (RootBus, sizeof *RootBus); + + RootBus->Segment =3D 0; + + RootBus->Supports =3D Supports; + RootBus->Attributes =3D Attributes; + + RootBus->DmaAbove4G =3D FALSE; + + RootBus->AllocationAttributes =3D AllocAttributes; + RootBus->Bus.Base =3D RootBusNumber; + RootBus->Bus.Limit =3D MaxSubBusNumber; + CopyMem (&RootBus->Io, Io, sizeof (*Io)); + CopyMem (&RootBus->Mem, Mem, sizeof (*Mem)); + CopyMem (&RootBus->MemAbove4G, MemAbove4G, sizeof (*MemAbove4G)); + CopyMem (&RootBus->PMem, PMem, sizeof (*PMem)); + CopyMem (&RootBus->PMemAbove4G, PMemAbove4G, sizeof (*PMemAbove4G)); + + RootBus->NoExtendedConfigSpace =3D (PcdGet16 (PcdOvmfHostBridgePciDevI= d) !=3D + INTEL_Q35_MCH_DEVICE_ID); + + DevicePath =3D AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate, + &mRootBridgeDevicePathTemplate); + if (DevicePath =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES)= ); + return EFI_OUT_OF_RESOURCES; + } + DevicePath->AcpiDevicePath.UID =3D RootBusNumber; + RootBus->DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL *)DevicePath; + + DEBUG ((DEBUG_INFO, + "%a: populated root bus %d, with room for %d subordinate bus(es)\n", + __FUNCTION__, RootBusNumber, MaxSubBusNumber - RootBusNumber)); + return EFI_SUCCESS; +} + + +/** + Utility function to uninitialize a PCI_ROOT_BRIDGE structure set up wi= th + PciHostBridgeUtilityInitRootBridge(). + + param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the cal= ler and + initialized with PciHostBridgeUtilityInitRootBridge= (), + that should be uninitialized. This function doesn't= free + RootBus. +**/ +VOID +PciHostBridgeUtilityUninitRootBridge ( + IN PCI_ROOT_BRIDGE *RootBus + ) +{ + FreePool (RootBus->DevicePath); +} + + /** Utility function to inform the platform that the resource conflict hap= pens. =20 --=20 2.29.2