summaryrefslogtreecommitdiff
path: root/lib/console.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/console.c')
-rw-r--r--lib/console.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/lib/console.c b/lib/console.c
index c310d213..7be5d543 100644
--- a/lib/console.c
+++ b/lib/console.c
@@ -34,8 +34,11 @@ console_get_keystroke(EFI_INPUT_KEY *key)
UINTN EventIndex;
EFI_STATUS efi_status;
+ if (!ci)
+ return EFI_UNSUPPORTED;
+
do {
- gBS->WaitForEvent(1, &ci->WaitForKey, &EventIndex);
+ BS->WaitForEvent(1, &ci->WaitForKey, &EventIndex);
efi_status = ci->ReadKeyStroke(ci, key);
} while (efi_status == EFI_NOT_READY);
@@ -109,7 +112,8 @@ console_print_at(UINTN col, UINTN row, const CHAR16 *fmt, ...)
if (!console_text_mode)
setup_console(1);
- co->SetCursorPosition(co, col, row);
+ if (co)
+ co->SetCursorPosition(co, col, row);
ms_va_start(args, fmt);
ret = VPrint(fmt, args);
@@ -136,6 +140,9 @@ console_print_box_at(CHAR16 *str_arr[], int highlight,
if (!console_text_mode)
setup_console(1);
+ if (!co)
+ return;
+
co->QueryMode(co, co->Mode->Mode, &cols, &rows);
/* last row on screen is unusable without scrolling, so ignore it */
@@ -241,6 +248,9 @@ console_print_box(CHAR16 *str_arr[], int highlight)
if (!console_text_mode)
setup_console(1);
+ if (!co)
+ return;
+
CopyMem(&SavedConsoleMode, co->Mode, sizeof(SavedConsoleMode));
co->EnableCursor(co, FALSE);
co->SetAttribute(co, EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE);
@@ -274,6 +284,9 @@ console_select(CHAR16 *title[], CHAR16* selectors[], unsigned int start)
if (!console_text_mode)
setup_console(1);
+ if (!co)
+ return -1;
+
co->QueryMode(co, co->Mode->Mode, &cols, &rows);
for (i = 0; i < selector_lines; i++) {
@@ -413,6 +426,9 @@ console_save_and_set_mode(SIMPLE_TEXT_OUTPUT_MODE * SavedMode)
return;
}
+ if (!co)
+ return;
+
CopyMem(SavedMode, co->Mode, sizeof(SIMPLE_TEXT_OUTPUT_MODE));
co->EnableCursor(co, FALSE);
co->SetAttribute(co, EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE);
@@ -423,6 +439,9 @@ console_restore_mode(SIMPLE_TEXT_OUTPUT_MODE * SavedMode)
{
SIMPLE_TEXT_OUTPUT_INTERFACE *co = ST->ConOut;
+ if (!co)
+ return;
+
co->EnableCursor(co, SavedMode->CursorVisible);
co->SetCursorPosition(co, SavedMode->CursorColumn,
SavedMode->CursorRow);
@@ -441,6 +460,9 @@ console_countdown(CHAR16* title, const CHAR16* message, int timeout)
CHAR16 *titles[2];
int wait = 10000000;
+ if (!co || !ci)
+ return -1;
+
console_save_and_set_mode(&SavedMode);
titles[0] = title;
@@ -495,7 +517,10 @@ console_mode_handle(VOID)
UINTN rows = 0, columns = 0;
EFI_STATUS efi_status = EFI_SUCCESS;
- efi_status = gBS->LocateProtocol(&gop_guid, NULL, (void **)&gop);
+ if (!co)
+ return;
+
+ efi_status = BS->LocateProtocol(&gop_guid, NULL, (void **)&gop);
if (EFI_ERROR(efi_status)) {
console_error(L"Locate graphic output protocol fail", efi_status);
return;
@@ -555,7 +580,7 @@ console_mode_handle(VOID)
efi_status = co->SetMode(co, mode_set);
}
- co->ClearScreen(co);
+ clear_screen();
if (EFI_ERROR(efi_status)) {
console_error(L"Console set mode fail", efi_status);
@@ -649,13 +674,25 @@ console_reset(void)
if (!console_text_mode)
setup_console(1);
+ if (!co)
+ return;
+
co->Reset(co, TRUE);
/* set mode 0 - required to be 80x25 */
co->SetMode(co, 0);
co->ClearScreen(co);
}
-UINT32 verbose = 0;
+void
+clear_screen(void)
+{
+ SIMPLE_TEXT_OUTPUT_INTERFACE *co = ST->ConOut;
+
+ if (!co)
+ return;
+
+ co->ClearScreen(co);
+}
VOID
setup_verbosity(VOID)
@@ -679,7 +716,7 @@ setup_verbosity(VOID)
VOID
msleep(unsigned long msecs)
{
- gBS->Stall(msecs);
+ BS->Stall(msecs);
}
/* This is used in various things to determine if we should print to the