18#include <Protocol/GraphicsOutput.h>
19#include <Protocol/SimpleTextOut.h>
21#include <Library/BaseMemoryLib.h>
22#include <Library/BaseLib.h>
23#include <Library/DebugLib.h>
24#include <Library/MemoryAllocationLib.h>
27#include <Library/BaseOverflowLib.h>
28#include <Library/UefiBootServicesTableLib.h>
86 { 0x00, 0x00, 0x00, 0x00 },
87 { 0x98, 0x00, 0x00, 0x00 },
88 { 0x00, 0x98, 0x00, 0x00 },
89 { 0x98, 0x98, 0x00, 0x00 },
90 { 0x00, 0x00, 0x98, 0x00 },
91 { 0x98, 0x00, 0x98, 0x00 },
92 { 0x00, 0x98, 0x98, 0x00 },
93 { 0x98, 0x98, 0x98, 0x00 },
100 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
111 Size = StrSize (String);
113 StringCopy = AllocatePool (
Size);
114 if (StringCopy == NULL) {
118 Size /=
sizeof (CHAR16);
119 for (Index = 0; Index <
Size; Index++) {
120 if (String[Index] == L
'\t') {
121 StringCopy[Index] = L
' ';
123 StringCopy[Index] = String[Index];
128 FreePool (StringCopy);
135 return EFI_UNSUPPORTED;
142 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This
146 EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
150 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
153 gST->ConsoleOutHandle,
155 (VOID **)&GraphicsOutput
158 if (!EFI_ERROR (Status)) {
159 Status = GraphicsOutput->QueryMode (
161 GraphicsOutput->Mode->Mode,
165 if (!EFI_ERROR (Status)) {
166 Width = Info->HorizontalResolution;
167 Height = Info->VerticalResolution;
170 GraphicsOutput = NULL;
173 GraphicsOutput = NULL;
183 if (GraphicsOutput != NULL) {
184 Status = GraphicsOutput->Blt (
197 This->SetCursorPosition (This, 0, 0);
211 OUT BOOLEAN *GopUgaExists OPTIONAL,
212 OUT BOOLEAN *StdInLocked OPTIONAL
225 if (!EFI_ERROR (Status)) {
234 if (GopUgaExists != NULL) {
235 *GopUgaExists = TRUE;
238 if (StdInLocked != NULL) {
239 *StdInLocked = FALSE;
254 EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
256 DEBUG ((DEBUG_INFO,
"OCC: Setting cc mode %d -> %d\n",
mConsoleMode, Mode));
262 gST->ConsoleOutHandle,
264 (VOID **)&GraphicsOutput
267 if (!EFI_ERROR (Status)) {
268 GraphicsOutput->Blt (
276 GraphicsOutput->Mode->Info->HorizontalResolution,
277 GraphicsOutput->Mode->Info->VerticalResolution,
295 gST->ConOut->EnableCursor (
gST->ConOut, FALSE);
296 gST->ConOut->SetCursorPosition (
gST->ConOut, 0, 0);
317 return EFI_DEVICE_ERROR;
332 IN BOOLEAN IgnoreTextOutput,
333 IN BOOLEAN SanitiseClearScreen,
334 IN BOOLEAN ClearScreenOnModeSwitch,
335 IN BOOLEAN ReplaceTabWithSpace
340 "OCC: Configuring system console ignore %d san clear %d clear switch %d replace tab %d\n",
343 ClearScreenOnModeSwitch,
365 if (IgnoreTextOutput || ReplaceTabWithSpace) {
370 if (SanitiseClearScreen) {
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
@ EfiConsoleControlScreenGraphics
@ EfiConsoleControlScreenText
DMG_SIZE_DEVICE_PATH Size
EFI_CONSOLE_CONTROL_SCREEN_MODE OcConsoleControlSetMode(IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode)
@ OcConsoleRendererSystemGraphics
@ OcConsoleRendererSystemGeneric
@ OcConsoleRendererSystemText
EFI_STATUS OcHandleProtocolFallback(IN EFI_HANDLE Handle, IN EFI_GUID *Protocol, OUT VOID **Interface)
EFI_STATUS OcUseSystemTextOutput(IN EFI_CONSOLE_CONTROL_SCREEN_MODE InitialMode, IN OC_CONSOLE_RENDERER Renderer, IN BOOLEAN IgnoreTextOutput, IN BOOLEAN SanitiseClearScreen, IN BOOLEAN ClearScreenOnModeSwitch, IN BOOLEAN ReplaceTabWithSpace)
STATIC EFI_STATUS EFIAPI ConsoleControlSetMode(IN EFI_CONSOLE_CONTROL_PROTOCOL *This, IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode)
STATIC EFI_STATUS EFIAPI ControlledOutputString(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *String)
STATIC EFI_TEXT_STRING mOriginalOutputString
STATIC EFI_CONSOLE_CONTROL_SCREEN_MODE mConsoleMode
STATIC BOOLEAN mIgnoreTextInGraphics
STATIC BOOLEAN mReplaceTabWithSpace
STATIC EFI_STATUS EFIAPI ControlledClearScreen(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI ConsoleControlLockStdIn(IN EFI_CONSOLE_CONTROL_PROTOCOL *This, IN CHAR16 *Password)
STATIC EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiBackgroundColors[8]
STATIC BOOLEAN mClearScreenOnModeSwitch
STATIC EFI_CONSOLE_CONTROL_PROTOCOL mOriginalConsoleControlProtocol
STATIC EFI_CONSOLE_CONTROL_PROTOCOL mConsoleControlProtocol
STATIC EFI_TEXT_CLEAR_SCREEN mOriginalClearScreen
STATIC EFI_STATUS EFIAPI ConsoleControlGetMode(IN EFI_CONSOLE_CONTROL_PROTOCOL *This, OUT EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode, OUT BOOLEAN *GopUgaExists OPTIONAL, OUT BOOLEAN *StdInLocked OPTIONAL)
EFI_GUID gEfiGraphicsOutputProtocolGuid
EFI_CONSOLE_CONTROL_PROTOCOL_LOCK_STD_IN LockStdIn
EFI_CONSOLE_CONTROL_PROTOCOL_GET_MODE GetMode
EFI_CONSOLE_CONTROL_PROTOCOL_SET_MODE SetMode