mirror of https://github.com/acidanthera/audk.git
OvmfPkg/PciHostBridgeLib: Extract InitRootBridge() / UninitRootBridge()
Extract InitRootBridge() / UninitRootBridge() to PciHostBridgeUtilityLib as common utility functions. No change of functionality. 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-5-cenjiahui@huawei.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
517055d298
commit
7ac1f28d4d
|
@ -14,6 +14,83 @@
|
|||
#define __PCI_HOST_BRIDGE_UTILITY_LIB_H__
|
||||
|
||||
|
||||
#include <Library/PciHostBridgeLib.h>
|
||||
|
||||
|
||||
/**
|
||||
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 behind any
|
||||
PCI bridge hanging off this root bus.
|
||||
|
||||
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] 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 = RootBusNumber, has been allocated and
|
||||
linked into RootBus.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
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 with
|
||||
PciHostBridgeUtilityInitRootBridge().
|
||||
|
||||
@param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the caller and
|
||||
initialized with PciHostBridgeUtilityInitRootBridge(),
|
||||
that should be uninitialized. This function doesn't free
|
||||
RootBus.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
PciHostBridgeUtilityUninitRootBridge (
|
||||
IN PCI_ROOT_BRIDGE *RootBus
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Utility function to inform the platform that the resource conflict happens.
|
||||
|
||||
|
|
|
@ -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 behind any
|
||||
PCI bridge hanging off this root bus.
|
||||
|
||||
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] 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 = RootBusNumber, has been allocated 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
|
||||
);
|
||||
|
|
|
@ -10,14 +10,12 @@
|
|||
#include <PiDxe.h>
|
||||
|
||||
#include <IndustryStandard/Pci.h>
|
||||
#include <IndustryStandard/Q35MchIch9.h>
|
||||
|
||||
#include <Protocol/PciHostBridgeResourceAllocation.h>
|
||||
#include <Protocol/PciRootBridgeIo.h>
|
||||
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/PciHostBridgeLib.h>
|
||||
|
@ -27,156 +25,8 @@
|
|||
#include "PciHostBridge.h"
|
||||
|
||||
|
||||
#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 = {
|
||||
{
|
||||
{
|
||||
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 = { MAX_UINT64, 0 };
|
||||
|
||||
/**
|
||||
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 behind any
|
||||
PCI bridge hanging off this root bus.
|
||||
|
||||
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] 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 = RootBusNumber, has been allocated 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 = 0;
|
||||
|
||||
RootBus->Supports = Supports;
|
||||
RootBus->Attributes = Attributes;
|
||||
|
||||
RootBus->DmaAbove4G = FALSE;
|
||||
|
||||
RootBus->AllocationAttributes = AllocAttributes;
|
||||
RootBus->Bus.Base = RootBusNumber;
|
||||
RootBus->Bus.Limit = 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 = (PcdGet16 (PcdOvmfHostBridgePciDevId) !=
|
||||
INTEL_Q35_MCH_DEVICE_ID);
|
||||
|
||||
DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate,
|
||||
&mRootBridgeDevicePathTemplate);
|
||||
if (DevicePath == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES));
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
DevicePath->AcpiDevicePath.UID = RootBusNumber;
|
||||
RootBus->DevicePath = (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 caller 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);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
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 off it.
|
||||
//
|
||||
Status = InitRootBridge (
|
||||
Status = 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 = InitRootBridge (
|
||||
Status = PciHostBridgeUtilityInitRootBridge (
|
||||
Attributes,
|
||||
Attributes,
|
||||
AllocationAttributes,
|
||||
|
@ -346,7 +196,7 @@ PciHostBridgeGetRootBridges (
|
|||
FreeBridges:
|
||||
while (Initialized > 0) {
|
||||
--Initialized;
|
||||
UninitRootBridge (&Bridges[Initialized]);
|
||||
PciHostBridgeUtilityUninitRootBridge (&Bridges[Initialized]);
|
||||
}
|
||||
|
||||
FreePool (Bridges);
|
||||
|
@ -375,7 +225,7 @@ PciHostBridgeFreeRootBridges (
|
|||
|
||||
do {
|
||||
--Count;
|
||||
UninitRootBridge (&Bridges[Count]);
|
||||
PciHostBridgeUtilityUninitRootBridge (&Bridges[Count]);
|
||||
} while (Count > 0);
|
||||
|
||||
FreePool (Bridges);
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
DevicePathLib
|
||||
MemoryAllocationLib
|
||||
PcdLib
|
||||
PciHostBridgeUtilityLib
|
||||
|
@ -51,5 +50,4 @@
|
|||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/PciHostBridgeLib.h>
|
||||
#include <Library/PciHostBridgeUtilityLib.h>
|
||||
#include <Library/PciLib.h>
|
||||
#include "PciHostBridge.h"
|
||||
|
||||
|
@ -453,7 +454,7 @@ ScanForRootBridges (
|
|||
RootBridges
|
||||
);
|
||||
ASSERT (RootBridges != NULL);
|
||||
InitRootBridge (
|
||||
PciHostBridgeUtilityInitRootBridge (
|
||||
Attributes, Attributes, 0,
|
||||
(UINT8) PrimaryBus, (UINT8) SubBus,
|
||||
&Io, &Mem, &MemAbove4G, &mNonExistAperture, &mNonExistAperture,
|
||||
|
|
|
@ -11,16 +11,174 @@
|
|||
**/
|
||||
|
||||
#include <IndustryStandard/Acpi10.h>
|
||||
#include <IndustryStandard/Q35MchIch9.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/PciHostBridgeUtilityLib.h>
|
||||
|
||||
|
||||
#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[] = {
|
||||
L"Mem", L"I/O", L"Bus"
|
||||
};
|
||||
|
||||
|
||||
STATIC
|
||||
CONST
|
||||
OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = {
|
||||
{
|
||||
{
|
||||
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 behind any
|
||||
PCI bridge hanging off this root bus.
|
||||
|
||||
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] 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 = RootBusNumber, has been allocated and
|
||||
linked into RootBus.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
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 = 0;
|
||||
|
||||
RootBus->Supports = Supports;
|
||||
RootBus->Attributes = Attributes;
|
||||
|
||||
RootBus->DmaAbove4G = FALSE;
|
||||
|
||||
RootBus->AllocationAttributes = AllocAttributes;
|
||||
RootBus->Bus.Base = RootBusNumber;
|
||||
RootBus->Bus.Limit = 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 = (PcdGet16 (PcdOvmfHostBridgePciDevId) !=
|
||||
INTEL_Q35_MCH_DEVICE_ID);
|
||||
|
||||
DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate,
|
||||
&mRootBridgeDevicePathTemplate);
|
||||
if (DevicePath == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES));
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
DevicePath->AcpiDevicePath.UID = RootBusNumber;
|
||||
RootBus->DevicePath = (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 with
|
||||
PciHostBridgeUtilityInitRootBridge().
|
||||
|
||||
@param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the caller and
|
||||
initialized with PciHostBridgeUtilityInitRootBridge(),
|
||||
that should be uninitialized. This function doesn't free
|
||||
RootBus.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
PciHostBridgeUtilityUninitRootBridge (
|
||||
IN PCI_ROOT_BRIDGE *RootBus
|
||||
)
|
||||
{
|
||||
FreePool (RootBus->DevicePath);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Utility function to inform the platform that the resource conflict happens.
|
||||
|
||||
|
|
|
@ -30,8 +30,16 @@
|
|||
PciHostBridgeUtilityLib.c
|
||||
|
||||
[Packages]
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
MdePkg/MdePkg.dec
|
||||
OvmfPkg/OvmfPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
DevicePathLib
|
||||
MemoryAllocationLib
|
||||
PcdLib
|
||||
|
||||
[Pcd]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
||||
|
|
Loading…
Reference in New Issue