mirror of https://github.com/acidanthera/audk.git
OvmfPkg: PciHostBridgeLib: initialize RootBus->DevicePath
We copy the code from InitRootBridge() [OvmfPkg/PciHostBridgeDxe/PciHostBridge.c], with a slight change: the device path is allocated separately now. This is the final field to initialize in PCI_ROOT_BRIDGE. The type EFI_PCI_ROOT_BRIDGE_DEVICE_PATH is renamed to OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH. The original is a misnomer (it is not a standard UEFI type) that dates back to PcAtChipsetPkg/PciHostBridgeDxe. Simply removing the EFI_ suffix would result in PCI_ROOT_BRIDGE_DEVICE_PATH, where PCI_ could incorrectly suggest a relation with the PCI standards or the PCI-related generic edk2 code. Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Marcel Apfelbaum <marcel@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
cb81595b5d
commit
1f4e2299e7
|
@ -22,18 +22,54 @@
|
||||||
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/PciHostBridgeLib.h>
|
#include <Library/PciHostBridgeLib.h>
|
||||||
#include <Library/PciLib.h>
|
#include <Library/PciLib.h>
|
||||||
#include <Library/QemuFwCfgLib.h>
|
#include <Library/QemuFwCfgLib.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
|
GLOBAL_REMOVE_IF_UNREFERENCED
|
||||||
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
|
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
|
||||||
L"Mem", L"I/O", L"Bus"
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize a PCI_ROOT_BRIDGE structure.
|
Initialize a PCI_ROOT_BRIDGE structure.
|
||||||
|
|
||||||
|
@ -67,6 +103,8 @@ InitRootBridge (
|
||||||
OUT PCI_ROOT_BRIDGE *RootBus
|
OUT PCI_ROOT_BRIDGE *RootBus
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH *DevicePath;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Be safe if other fields are added to PCI_ROOT_BRIDGE later.
|
// Be safe if other fields are added to PCI_ROOT_BRIDGE later.
|
||||||
//
|
//
|
||||||
|
@ -103,7 +141,19 @@ InitRootBridge (
|
||||||
|
|
||||||
RootBus->NoExtendedConfigSpace = TRUE;
|
RootBus->NoExtendedConfigSpace = TRUE;
|
||||||
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate,
|
||||||
|
&mRootBridgeDevicePathTemplate);
|
||||||
|
if (DevicePath == NULL) {
|
||||||
|
DEBUG ((EFI_D_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 ((EFI_D_INFO,
|
||||||
|
"%a: populated root bus %d, with room for %d subordinate bus(es)\n",
|
||||||
|
__FUNCTION__, RootBusNumber, MaxSubBusNumber - RootBusNumber));
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,6 +170,7 @@ UninitRootBridge (
|
||||||
IN PCI_ROOT_BRIDGE *RootBus
|
IN PCI_ROOT_BRIDGE *RootBus
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
FreePool (RootBus->DevicePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
|
DevicePathLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
PciLib
|
PciLib
|
||||||
QemuFwCfgLib
|
QemuFwCfgLib
|
||||||
|
|
Loading…
Reference in New Issue