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.


Alex

> variables LINES and COLUMNS to set the terminal size manually.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
> ---
>  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;
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to