diff options
author | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-03-31 12:28:01 +0000 |
---|---|---|
committer | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-03-31 12:28:01 +0000 |
commit | 09eb2dc3e88317266b4f037799d6856638224db3 (patch) | |
tree | 18f89f02a1e1d458f87e226e127f72a520b36004 /ArmPlatformPkg/Bds | |
parent | 643ec0e7c1633c1970a154fa6bdada6eb1d3daa2 (diff) | |
download | edk2-platforms-09eb2dc3e88317266b4f037799d6856638224db3.tar.xz |
ArmPlatformPkg/Bds: Connect all drivers if the SimpleTextIO is not available
If none of the Simple Text Input/Output Protocol implementations were started
before starting BDS then an exception error occured.
This fix forces to connect all the drivers if no SimpleText IO protocols are
found.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11487 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg/Bds')
-rw-r--r-- | ArmPlatformPkg/Bds/BdsEntry.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/ArmPlatformPkg/Bds/BdsEntry.c b/ArmPlatformPkg/Bds/BdsEntry.c index 8a7a357b0f..62e8236e84 100644 --- a/ArmPlatformPkg/Bds/BdsEntry.c +++ b/ArmPlatformPkg/Bds/BdsEntry.c @@ -83,13 +83,17 @@ EFI_STATUS GetEnvironmentVariable ( return EFI_SUCCESS; } -VOID InitializeConsole ( +EFI_STATUS +InitializeConsole ( VOID ) { EFI_STATUS Status; UINTN NoHandles; EFI_HANDLE *Buffer; + BOOLEAN AllDriversConnected; + + AllDriversConnected = FALSE; // // Now we need to setup the EFI System Table with information about the console devices. @@ -97,6 +101,12 @@ VOID InitializeConsole ( // consoles at the same time // Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextOutProtocolGuid, NULL, &NoHandles, &Buffer); + if (EFI_ERROR (Status)) { + BdsConnectAllDrivers(); + AllDriversConnected = TRUE; + Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextOutProtocolGuid, NULL, &NoHandles, &Buffer); + } + if (!EFI_ERROR (Status)) { // Use the first SimpleTextOut we find and update the EFI System Table gST->ConsoleOutHandle = Buffer[0]; @@ -107,9 +117,16 @@ VOID InitializeConsole ( gST->StdErr = gST->ConOut; FreePool (Buffer); - } + } else { + return Status; + } Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextInProtocolGuid, NULL, &NoHandles, &Buffer); + if (EFI_ERROR (Status) && !AllDriversConnected) { + BdsConnectAllDrivers(); + Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextInProtocolGuid, NULL, &NoHandles, &Buffer); + } + if (!EFI_ERROR (Status)) { // Use the first SimpleTextIn we find and update the EFI System Table gST->ConsoleInHandle = Buffer[0]; @@ -117,7 +134,11 @@ VOID InitializeConsole ( ASSERT_EFI_ERROR (Status); FreePool (Buffer); + } else { + return Status; } + + return EFI_SUCCESS; } EFI_STATUS @@ -238,7 +259,8 @@ BdsEntry ( PERF_END (NULL, "DXE", NULL, 0); PERF_START (NULL, "BDS", NULL, 0); - InitializeConsole(); + Status = InitializeConsole(); + ASSERT_EFI_ERROR(Status); while (1) { // Get the Linux Kernel Device Path from Environment Variable |