From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heinrich Schuchardt Date: Fri, 14 Sep 2018 07:48:24 +0200 Subject: [U-Boot] [PATCH 1/1] efi_loader: environment variables for terminal size In-Reply-To: <1eb03901-ca99-a17e-26ef-38ec589c0367@suse.de> References: <20180914044102.17885-1-xypron.glpk@gmx.de> <1eb03901-ca99-a17e-26ef-38ec589c0367@suse.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 09/14/2018 07:21 AM, Alexander Graf wrote: > > > On 14.09.18 06:41, Heinrich Schuchardt wrote: >> Correct scrolling in EFI applications like the EFI Shell requires correct >> setting of the terminal size. Detecting the terminal size over the serial >> interface is often not supported. The patch introduces the environment > > Can you give examples on when it's not supported? I think most cases > I've encountered in the last 10 years do support just reading them via > escape sequences. > I am using KDE. When running qemu-system-aarch64 in konsole or xterm U-Boot never receives a response to the request. Best regards Heinrich > > Alex > >> variables LINES and COLUMNS to set the terminal size manually. >> >> Signed-off-by: Heinrich Schuchardt >> --- >> doc/README.uefi | 14 ++++++++++++++ >> lib/efi_loader/efi_console.c | 15 ++++++++++++++- >> 2 files changed, 28 insertions(+), 1 deletion(-) >> >> diff --git a/doc/README.uefi b/doc/README.uefi >> index 6b9759cfed..df0cf5b7ce 100644 >> --- a/doc/README.uefi >> +++ b/doc/README.uefi >> @@ -299,6 +299,20 @@ This driver is only available if U-Boot is configured with >> CONFIG_BLK=y >> CONFIG_PARTITIONS=y >> >> +## Setting the terminal size >> + >> +For correct scrolling the terminal size has to be known. >> + >> +The default terminal size is 80x25. >> + >> +If the environment variable 'stdout' has the value 'vidconsole', the terminal >> +size is determined by querying the video console driver. Else it is tried to >> +determine the terminal size by sending ESC '[18t' to the console which may >> +reply with an escape sequence indicating the terminal size. >> + >> +It is possible to override the terminal size by setting the environment >> +variables 'LINES' and 'COLUMNS'. >> + >> ## TODOs as of U-Boot 2018.07 >> >> * unimplemented or incompletely implemented boot services >> diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c >> index 73f7ecf919..40e33f9fd3 100644 >> --- a/lib/efi_loader/efi_console.c >> +++ b/lib/efi_loader/efi_console.c >> @@ -224,6 +224,7 @@ static void query_console_size(void) >> { >> const char *stdout_name = env_get("stdout"); >> int rows = 25, cols = 80; >> + char *value; >> >> if (stdout_name && !strcmp(stdout_name, "vidconsole") && >> IS_ENABLED(CONFIG_DM_VIDEO)) { >> @@ -235,9 +236,21 @@ static void query_console_size(void) >> rows = priv->rows; >> cols = priv->cols; >> } else if (query_console_serial(&rows, &cols)) { >> - return; >> + rows = 25; >> + cols = 80; >> } >> >> + value = env_get("LINES"); >> + if (value) >> + rows = simple_strtoul(value, NULL, 10); >> + value = env_get("COLUMNS"); >> + if (value) >> + cols = simple_strtoul(value, NULL, 10); >> + if (rows <= 0) >> + rows = 25; >> + if (cols <= 0) >> + cols = 80; >> + >> /* Test if we can have Mode 1 */ >> if (cols >= 80 && rows >= 50) { >> efi_cout_modes[1].present = 1; >> >