From 25b3ed1d18b620ae2d687a0dc923be98ad2c6ade Mon Sep 17 00:00:00 2001 From: vit9696 Date: Sat, 25 Jan 2020 11:16:17 +0300 Subject: [PATCH] OcConsoleLib: Add GOP installation function --- Include/Library/OcConsoleLib.h | 8 ++++++++ Library/OcConsoleLib/OcConsoleLib.c | 31 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/Include/Library/OcConsoleLib.h b/Include/Library/OcConsoleLib.h index e159708d..a5823016 100644 --- a/Include/Library/OcConsoleLib.h +++ b/Include/Library/OcConsoleLib.h @@ -154,4 +154,12 @@ SetConsoleMode ( IN UINT32 Height ); +/** + Ensure installed GOP protocol on ConOut handle. +**/ +VOID +OcProvideConsoleGop ( + VOID + ); + #endif // OC_CONSOLE_LIB_H diff --git a/Library/OcConsoleLib/OcConsoleLib.c b/Library/OcConsoleLib/OcConsoleLib.c index aa12525f..20ca3bd5 100644 --- a/Library/OcConsoleLib/OcConsoleLib.c +++ b/Library/OcConsoleLib/OcConsoleLib.c @@ -895,3 +895,34 @@ SetConsoleMode ( return EFI_SUCCESS; } + +VOID +OcProvideConsoleGop ( + VOID + ) +{ + EFI_STATUS Status; + VOID *Gop; + + Gop = NULL; + Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, &Gop); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "OCC: Installing GOP (%r) on ConsoleOutHandle...\n", Status)); + Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, &Gop); + + if (!EFI_ERROR (Status)) { + Status = gBS->InstallMultipleProtocolInterfaces ( + &gST->ConsoleOutHandle, + &gEfiGraphicsOutputProtocolGuid, + Gop, + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_WARN, "OCC: Failed to install GOP on ConsoleOutHandle - %r\n", Status)); + } + } else { + DEBUG ((DEBUG_WARN, "OCC: Missing GOP entirely - %r\n", Status)); + } + } +}