Some ConIn or ConOut device may not in the first root bridge, so connect all
root bridge before detect ConIn and ConOut device.
Reviewed-by: Guo Dong <guo.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
gEfiSmmAccess2ProtocolGuid\r
gUniversalPayloadPlatformBootManagerOverrideProtocolGuid\r
gEfiSerialIoProtocolGuid\r
gEfiSmmAccess2ProtocolGuid\r
gUniversalPayloadPlatformBootManagerOverrideProtocolGuid\r
gEfiSerialIoProtocolGuid\r
+ gEfiPciRootBridgeIoProtocolGuid\r
\r
[Pcd]\r
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut\r
\r
[Pcd]\r
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut\r
-#define gPciRootBridge \\r
- PNPID_DEVICE_PATH_NODE(0x0A03)\r
-\r
#define gPnp16550ComPort \\r
PNPID_DEVICE_PATH_NODE(0x0501)\r
\r
#define gPnp16550ComPort \\r
PNPID_DEVICE_PATH_NODE(0x0501)\r
\r
ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort;\r
VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal;\r
\r
ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort;\r
VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal;\r
\r
-//\r
-// Predefined platform root bridge\r
-//\r
-PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0 = {\r
- gPciRootBridge,\r
- gEndEntire\r
-};\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges[] = {\r
- (EFI_DEVICE_PATH_PROTOCOL *)&gPlatformRootBridge0,\r
- NULL\r
-};\r
-\r
BOOLEAN mDetectDisplayOnly;\r
\r
/**\r
BOOLEAN mDetectDisplayOnly;\r
\r
/**\r
- The function will connect root bridge\r
+ The function will connect one root bridge\r
- @return EFI_SUCCESS Connect RootBridge successfully.\r
+ @param[in] Handle - The root bridge handle\r
+ @param[in] Instance - The instance of the root bridge\r
+\r
+ @return EFI_SUCCESS Connect RootBridge successfully.\r
-ConnectRootBridge (\r
- VOID\r
+EFIAPI\r
+ConnectOneRootBridge (\r
+ IN EFI_HANDLE Handle,\r
+ IN VOID *Instance\r
)\r
{\r
EFI_STATUS Status;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HANDLE RootHandle;\r
- //\r
- // Make all the PCI_IO protocols on PCI Seg 0 show up\r
- //\r
- Status = gBS->LocateDevicePath (\r
- &gEfiDevicePathProtocolGuid,\r
- &gPlatformRootBridges[0],\r
- &RootHandle\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE);\r
+ Status = gBS->ConnectController (Handle, NULL, NULL, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- ConnectRootBridge ();\r
+ VisitAllInstancesOfProtocol (\r
+ &gEfiPciRootBridgeIoProtocolGuid,\r
+ ConnectOneRootBridge\r
+ );\r
\r
//\r
// Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut\r
\r
//\r
// Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut\r