19#include <Library/BaseMemoryLib.h>
20#include <Library/BaseLib.h>
21#include <Library/DebugLib.h>
22#include <Library/MemoryAllocationLib.h>
25#include <Library/UefiBootServicesTableLib.h>
26#include <Library/UefiRuntimeServicesTableLib.h>
38 &
gST->ConsoleOutHandle,
40 (VOID *)&ConsoleControl
46 if (EFI_ERROR (Status)) {
50 Status = ConsoleControl->
GetMode (
61 if (EFI_ERROR (Status) || (OldMode == Mode)) {
83 &
gST->ConsoleOutHandle,
85 (VOID *)&ConsoleControl
88 if (EFI_ERROR (Status)) {
92 Status = ConsoleControl->
GetMode (
99 if (EFI_ERROR (Status)) {
117 &
gST->ConsoleOutHandle,
119 (VOID *)&ConsoleControl
124 "OCC: Install console control (%p/%p/%p), current - %r\n",
134 if (!EFI_ERROR (Status)) {
138 if (OldMode != NULL) {
139 ConsoleControl->
GetMode (ConsoleControl, OldMode, NULL, NULL);
142 if (OldProtocol != NULL) {
146 sizeof (*OldProtocol)
153 sizeof (*ConsoleControl)
159 if (OldProtocol != NULL) {
162 sizeof (*OldProtocol)
166 Status =
gBS->InstallMultipleProtocolInterfaces (
167 &
gST->ConsoleOutHandle,
173 DEBUG ((DEBUG_INFO,
"OCC: Install console control, new - %r\n", Status));
186 Status =
gBS->HandleProtocol (
187 &
gST->ConsoleOutHandle,
189 (VOID *)&ConsoleControl
192 if (OldProtocol->GetMode == NULL) {
193 Status =
gBS->UninstallMultipleProtocolInterfaces (
194 &
gST->ConsoleOutHandle,
206 sizeof (*ConsoleControl)
EFI_CONSOLE_CONTROL_SCREEN_MODE OcConsoleControlSetMode(IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode)
EFI_STATUS OcConsoleControlInstallProtocol(IN EFI_CONSOLE_CONTROL_PROTOCOL *NewProtocol, OUT EFI_CONSOLE_CONTROL_PROTOCOL *OldProtocol OPTIONAL, IN OUT EFI_CONSOLE_CONTROL_SCREEN_MODE *OldMode OPTIONAL)
EFI_CONSOLE_CONTROL_SCREEN_MODE OcConsoleControlGetMode(VOID)
EFI_STATUS OcConsoleControlRestoreProtocol(IN EFI_CONSOLE_CONTROL_PROTOCOL *OldProtocol)
EFI_CONSOLE_CONTROL_SCREEN_MODE
@ EfiConsoleControlScreenText
EFI_GUID gEfiConsoleControlProtocolGuid
EFI_STATUS OcHandleProtocolFallback(IN EFI_HANDLE Handle, IN EFI_GUID *Protocol, OUT VOID **Interface)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE GetMode
EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE SetMode