mirror of https://github.com/acidanthera/audk.git
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
This commit is contained in:
parent
643ec0e7c1
commit
09eb2dc3e8
|
@ -83,13 +83,17 @@ EFI_STATUS GetEnvironmentVariable (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID InitializeConsole (
|
EFI_STATUS
|
||||||
|
InitializeConsole (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN NoHandles;
|
UINTN NoHandles;
|
||||||
EFI_HANDLE *Buffer;
|
EFI_HANDLE *Buffer;
|
||||||
|
BOOLEAN AllDriversConnected;
|
||||||
|
|
||||||
|
AllDriversConnected = FALSE;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Now we need to setup the EFI System Table with information about the console devices.
|
// 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
|
// consoles at the same time
|
||||||
//
|
//
|
||||||
Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextOutProtocolGuid, NULL, &NoHandles, &Buffer);
|
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)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
// Use the first SimpleTextOut we find and update the EFI System Table
|
// Use the first SimpleTextOut we find and update the EFI System Table
|
||||||
gST->ConsoleOutHandle = Buffer[0];
|
gST->ConsoleOutHandle = Buffer[0];
|
||||||
|
@ -107,9 +117,16 @@ VOID InitializeConsole (
|
||||||
gST->StdErr = gST->ConOut;
|
gST->StdErr = gST->ConOut;
|
||||||
|
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
}
|
} else {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSimpleTextInProtocolGuid, NULL, &NoHandles, &Buffer);
|
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)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
// Use the first SimpleTextIn we find and update the EFI System Table
|
// Use the first SimpleTextIn we find and update the EFI System Table
|
||||||
gST->ConsoleInHandle = Buffer[0];
|
gST->ConsoleInHandle = Buffer[0];
|
||||||
|
@ -117,7 +134,11 @@ VOID InitializeConsole (
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
|
} else {
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -238,7 +259,8 @@ BdsEntry (
|
||||||
PERF_END (NULL, "DXE", NULL, 0);
|
PERF_END (NULL, "DXE", NULL, 0);
|
||||||
PERF_START (NULL, "BDS", NULL, 0);
|
PERF_START (NULL, "BDS", NULL, 0);
|
||||||
|
|
||||||
InitializeConsole();
|
Status = InitializeConsole();
|
||||||
|
ASSERT_EFI_ERROR(Status);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// Get the Linux Kernel Device Path from Environment Variable
|
// Get the Linux Kernel Device Path from Environment Variable
|
||||||
|
|
Loading…
Reference in New Issue