**/
#include <PiDxe.h>
-#include <Library/BdsLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PerformanceLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/PcdLib.h>
+#include <Library/BdsUnixLib.h>
#include <Protocol/Bds.h>
#include <Protocol/DevicePathToText.h>
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.
// 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];
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];
ASSERT_EFI_ERROR (Status);
FreePool (Buffer);
+ } else {
+ return Status;
}
+
+ return EFI_SUCCESS;
}
EFI_STATUS
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