]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c
OvmfPkg: PlatformBdsLib: connect all PCI root buses
[mirror_edk2.git] / OvmfPkg / Library / PlatformBdsLib / BdsPlatform.c
index 243db44de79e08f0fb9c624959a26680a5afb42b..de13c6b5c34a2ea7bb2af6eec6fbb744953ee008 100644 (file)
@@ -116,49 +116,27 @@ Returns:
 \r
 \r
 EFI_STATUS\r
+EFIAPI\r
 ConnectRootBridge (\r
-  VOID\r
+  IN EFI_HANDLE  RootBridgeHandle,\r
+  IN VOID        *Instance,\r
+  IN VOID        *Context\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Connect RootBridge\r
-\r
-Arguments:\r
-\r
-  None.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS             - Connect RootBridge successfully.\r
-  EFI_STATUS              - Connect RootBridge fail.\r
-\r
---*/\r
 {\r
-  EFI_STATUS                Status;\r
-  EFI_HANDLE                RootHandle;\r
+  EFI_STATUS Status;\r
 \r
   //\r
-  // Make all the PCI_IO protocols on PCI Seg 0 show up\r
+  // Make the PCI bus driver connect the root bridge, non-recursively. This\r
+  // will produce a number of child handles with PciIo on them.\r
   //\r
-  BdsLibConnectDevicePath (gPlatformRootBridges[0]);\r
-\r
-  Status = gBS->LocateDevicePath (\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  &gPlatformRootBridges[0],\r
-                  &RootHandle\r
+  Status = gBS->ConnectController (\r
+                  RootBridgeHandle, // ControllerHandle\r
+                  NULL,             // DriverImageHandle\r
+                  NULL,             // RemainingDevicePath -- produce all\r
+                                    //   children\r
+                  FALSE             // Recursive\r
                   );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
+  return Status;\r
 }\r
 \r
 \r
@@ -1222,7 +1200,8 @@ Returns:
 \r
   DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior\n"));\r
 \r
-  ConnectRootBridge ();\r
+  VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid,\r
+    ConnectRootBridge, NULL);\r
 \r
   if (PcdGetBool (PcdOvmfFlashVariablesEnable)) {\r
     DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars "\r