diff --git a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c index 243db44de7..de13c6b5c3 100644 --- a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c @@ -116,49 +116,27 @@ Returns: EFI_STATUS +EFIAPI ConnectRootBridge ( - VOID + IN EFI_HANDLE RootBridgeHandle, + IN VOID *Instance, + IN VOID *Context ) -/*++ - -Routine Description: - - Connect RootBridge - -Arguments: - - None. - -Returns: - - EFI_SUCCESS - Connect RootBridge successfully. - EFI_STATUS - Connect RootBridge fail. - ---*/ { - EFI_STATUS Status; - EFI_HANDLE RootHandle; + EFI_STATUS Status; // - // Make all the PCI_IO protocols on PCI Seg 0 show up + // Make the PCI bus driver connect the root bridge, non-recursively. This + // will produce a number of child handles with PciIo on them. // - BdsLibConnectDevicePath (gPlatformRootBridges[0]); - - Status = gBS->LocateDevicePath ( - &gEfiDevicePathProtocolGuid, - &gPlatformRootBridges[0], - &RootHandle + Status = gBS->ConnectController ( + RootBridgeHandle, // ControllerHandle + NULL, // DriverImageHandle + NULL, // RemainingDevicePath -- produce all + // children + FALSE // Recursive ); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE); - if (EFI_ERROR (Status)) { - return Status; - } - - return EFI_SUCCESS; + return Status; } @@ -1222,7 +1200,8 @@ Returns: DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior\n")); - ConnectRootBridge (); + VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, + ConnectRootBridge, NULL); if (PcdGetBool (PcdOvmfFlashVariablesEnable)) { DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars " diff --git a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h index 7006fb3795..e3e950e4ae 100644 --- a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h +++ b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.h @@ -52,6 +52,7 @@ Abstract: #include #include #include +#include #include #include @@ -64,7 +65,6 @@ Abstract: extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; extern EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption[]; -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges[]; extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; extern UART_DEVICE_PATH gUartDeviceNode; @@ -107,9 +107,6 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; 0 \ } -#define gPciRootBridge \ - PNPID_DEVICE_PATH_NODE(0x0A03) - #define gPciIsaBridge \ PCI_DEVICE_PATH_NODE(0, 0x1f) @@ -152,16 +149,6 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; DEVICE_PATH_MESSAGING_PC_ANSI \ } -#define gEndEntire \ - { \ - END_DEVICE_PATH_TYPE, \ - END_ENTIRE_DEVICE_PATH_SUBTYPE, \ - { \ - END_DEVICE_PATH_LENGTH, \ - 0 \ - } \ - } - #define PCI_CLASS_SCC 0x07 #define PCI_SUBCLASS_SERIAL 0x00 #define PCI_IF_16550 0x02 @@ -172,14 +159,6 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; #define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) -// -// Platform Root Bridge -// -typedef struct { - ACPI_HID_DEVICE_PATH PciRootBridge; - EFI_DEVICE_PATH_PROTOCOL End; -} PLATFORM_ROOT_BRIDGE_DEVICE_PATH; - typedef struct { ACPI_HID_DEVICE_PATH PciRootBridge; PCI_DEVICE_PATH IsaBridge; @@ -223,8 +202,6 @@ typedef struct { EFI_DEVICE_PATH_PROTOCOL End; } USB_CLASS_FORMAT_DEVICE_PATH; -extern PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0; - // // Platform BDS Functions // diff --git a/OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf b/OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf index 5a28d782e2..ce2972013d 100644 --- a/OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf +++ b/OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf @@ -64,4 +64,4 @@ [Protocols] gEfiDecompressProtocolGuid - + gEfiPciRootBridgeIoProtocolGuid diff --git a/OvmfPkg/Library/PlatformBdsLib/PlatformData.c b/OvmfPkg/Library/PlatformBdsLib/PlatformData.c index 1a30531270..f69c1a8714 100644 --- a/OvmfPkg/Library/PlatformBdsLib/PlatformData.c +++ b/OvmfPkg/Library/PlatformBdsLib/PlatformData.c @@ -25,19 +25,6 @@ ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; UART_DEVICE_PATH gUartDeviceNode = gUart; VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; -// -// Predefined platform root bridge -// -PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0 = { - gPciRootBridge, - gEndEntire -}; - -EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges[] = { - (EFI_DEVICE_PATH_PROTOCOL *) &gPlatformRootBridge0, - NULL -}; - // // Platform specific keyboard device path //