summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2017-09-13 18:05:43 -0400
committerAlexander Graf <agraf@suse.de>2017-09-20 11:28:39 +0200
commita18c5a8382284037ea8fa4742736a65317476d23 (patch)
treea4b819db6d2fdc15b947daa13947d561e1b25751 /lib
parent71cc25c35c34945babbd94935a0e9c4f4ee942b2 (diff)
efi_loader: Correctly figure out size for vidconsole
If stdout is vidconsole, we cannot rely on ANSI escape sequences to query the size, as vidconsole cannot reply on stdin. Instead special- case this if stdout is vidconsole. Signed-off-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_console.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c
index 6502081706..d596c58241 100644
--- a/lib/efi_loader/efi_console.c
+++ b/lib/efi_loader/efi_console.c
@@ -8,7 +8,10 @@
#include <common.h>
#include <charset.h>
+#include <dm/device.h>
#include <efi_loader.h>
+#include <stdio_dev.h>
+#include <video_console.h>
static bool console_size_queried;
@@ -222,12 +225,23 @@ static efi_status_t EFIAPI efi_cout_query_mode(
EFI_ENTRY("%p, %ld, %p, %p", this, mode_number, columns, rows);
if (!console_size_queried) {
+ const char *stdout_name = env_get("stdout");
int rows, cols;
console_size_queried = true;
- if (query_console_serial(&rows, &cols))
+ if (stdout_name && !strcmp(stdout_name, "vidconsole") &&
+ IS_ENABLED(CONFIG_DM_VIDEO)) {
+ struct stdio_dev *stdout_dev =
+ stdio_get_by_name("vidconsole");
+ struct udevice *dev = stdout_dev->priv;
+ struct vidconsole_priv *priv =
+ dev_get_uclass_priv(dev);
+ rows = priv->rows;
+ cols = priv->cols;
+ } else if (query_console_serial(&rows, &cols)) {
goto out;
+ }
/* Test if we can have Mode 1 */
if (cols >= 80 && rows >= 50) {