[PATCH 21/25] edit: Improve behaviour on efi-stdio console

Sascha Hauer s.hauer at pengutronix.de
Mon Dec 13 13:09:01 PST 2021


Our console driver for the EFI simple text protocol does not support
the "\e[1S" escape sequence to scroll the window which means sedit
doesn't work properly. Disable smartscroll when the efi-stdio console
is active. While at it put the screen height reduction into the same
dynamic test.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 commands/edit.c | 46 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/commands/edit.c b/commands/edit.c
index 30448cbc04..592cf4aa3d 100644
--- a/commands/edit.c
+++ b/commands/edit.c
@@ -522,6 +522,25 @@ static int read_modal_key(bool is_modal)
 	return -EAGAIN;
 }
 
+static bool is_efi_console_active(void)
+{
+	struct console_device *cdev;
+
+	if (!IS_ENABLED(CONFIG_DRIVER_SERIAL_EFI_STDIO))
+		return false;
+
+	for_each_console(cdev) {
+		if (!(cdev->f_active & CONSOLE_STDIN))
+			continue;
+		if (!(cdev->f_active & CONSOLE_STDOUT))
+			continue;
+		if (!strcmp(dev_name(cdev->dev), "efi-stdio"))
+			return true;
+	}
+
+	return false;
+}
+
 static int do_edit(int argc, char *argv[])
 {
 	bool is_vi = false;
@@ -539,16 +558,7 @@ static int do_edit(int argc, char *argv[])
 		return 1;
 
 	screenwidth = 80;
-
-	/*
-	 * The EFI simple text output protocol wraps to the next line and scrolls
-	 * down when we write to the right bottom screen position. Reduce the number
-	 * of rows by one to work around this.
-	 */
-	if (IS_ENABLED(CONFIG_EFI_BOOTUP))
-		screenheight = 24;
-	else
-		screenheight = 25;
+	screenheight = 25;
 
 	/* check if we are not called as "edit" */
 	if (*argv[0] != 'e') {
@@ -560,6 +570,22 @@ static int do_edit(int argc, char *argv[])
 			is_vi = true;
 	}
 
+	if (is_efi_console_active()) {
+		/*
+		 * The EFI simple text output protocol wraps to the next line and
+		 * scrolls down when we write to the right bottom screen position.
+		 * Reduce the number of rows by one to work around this.
+		 */
+		screenheight--;
+
+		/*
+		 * Our console driver for the EFI simple text output protocol does
+		 * not implement the "\e[1S" sequence we use for scrolling the
+		 * screen.
+		 */
+		smartscroll = 0;
+	}
+
 	cursx  = 0;
 	cursy  = 0;
 	textx  = 0;
-- 
2.30.2




More information about the barebox mailing list