svn commit: r359372 - head/stand/efi/libefi
Toomas Soome
tsoome at FreeBSD.org
Fri Mar 27 18:40:34 UTC 2020
Author: tsoome
Date: Fri Mar 27 18:01:01 2020
New Revision: 359372
URL: https://svnweb.freebsd.org/changeset/base/359372
Log:
loader.efi: conout->QueryMode() can fail to return screen dimensions
Some systems are reported to fail to report screen dimensions unless the
screen mode is set first.
Modified:
head/stand/efi/libefi/efi_console.c
Modified: head/stand/efi/libefi/efi_console.c
==============================================================================
--- head/stand/efi/libefi/efi_console.c Fri Mar 27 17:37:31 2020 (r359371)
+++ head/stand/efi/libefi/efi_console.c Fri Mar 27 18:01:01 2020 (r359372)
@@ -388,11 +388,19 @@ efi_cons_probe(struct console *cp)
conout = ST->ConOut;
conin = ST->ConIn;
- status = BS->OpenProtocol(ST->ConsoleInHandle, &simple_input_ex_guid,
- (void **)&coninex, IH, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
- if (status != EFI_SUCCESS)
- coninex = NULL;
+ /*
+ * Call SetMode to work around buggy firmware.
+ */
+ status = conout->SetMode(conout, conout->Mode->Mode);
+ if (coninex == NULL) {
+ status = BS->OpenProtocol(ST->ConsoleInHandle,
+ &simple_input_ex_guid, (void **)&coninex,
+ IH, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+ if (status != EFI_SUCCESS)
+ coninex = NULL;
+ }
+
cp->c_flags |= C_PRESENTIN | C_PRESENTOUT;
}
@@ -824,7 +832,7 @@ efi_cons_update_mode(void)
char env[8];
status = conout->QueryMode(conout, conout->Mode->Mode, &cols, &rows);
- if (EFI_ERROR(status)) {
+ if (EFI_ERROR(status) || cols * rows == 0) {
cols = 80;
rows = 24;
}
More information about the svn-src-head
mailing list