]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
efi_loader: Disable ANSI output for tests
authorSimon Glass <sjg@chromium.org>
Sat, 10 May 2025 12:54:38 +0000 (14:54 +0200)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 18 May 2025 06:47:58 +0000 (08:47 +0200)
We don't want ANSI escape-sequences written in tests since it is a pain
to check the output with ut_assert_nextline() et al.

Provide a way to tests to request that these characters not be sent.

Add a proper function comment while we are here, to encourage others.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
include/efi_loader.h
lib/efi_loader/efi_console.c

index 84e8cfe320e2b83932f177d1f0e3b7481120cec7..8f9f2bcf1cb4077bc21bdd26daab19fc6987cf86 100644 (file)
@@ -588,8 +588,27 @@ efi_status_t efi_bootmgr_delete_boot_option(u16 boot_index);
 efi_status_t efi_bootmgr_run(void *fdt);
 /* search the boot option index in BootOrder */
 bool efi_search_bootorder(u16 *bootorder, efi_uintn_t num, u32 target, u32 *index);
-/* Set up console modes */
+
+/**
+ * efi_setup_console_size() - update the mode table.
+ *
+ * By default the only mode available is 80x25. If the console has at least 50
+ * lines, enable mode 80x50. If we can query the console size and it is neither
+ * 80x25 nor 80x50, set it as an additional mode.
+ */
 void efi_setup_console_size(void);
+
+/**
+ * efi_console_set_ansi() - Set whether ANSI escape-characters should be emitted
+ *
+ * These characters mess up tests which use ut_assert_nextline(). Call this
+ * function to tell efi_loader not to emit these characters when starting up the
+ * terminal
+ *
+ * @allow_ansi: Allow emitting ANSI escape-characters
+ */
+void efi_console_set_ansi(bool allow_ansi);
+
 /* Set up load options from environment variable */
 efi_status_t efi_env_set_load_options(efi_handle_t handle, const char *env_var,
                                      u16 **load_options);
index 9d9f786a6db7d52a94857d587e3a8cca53f3699d..e310f2f53ae1cd4bf6f558d3128956677ec8075e 100644 (file)
@@ -30,6 +30,17 @@ struct cout_mode {
 
 __maybe_unused static struct efi_object uart_obj;
 
+/*
+ * suppress emission of ANSI escape-characters for use by unit tests. Leave it
+ * as 0 for the default behaviour
+ */
+static bool no_ansi;
+
+void efi_console_set_ansi(bool allow_ansi)
+{
+       no_ansi = !allow_ansi;
+}
+
 static struct cout_mode efi_cout_modes[] = {
        /* EFI Mode 0 is 80x25 and always present */
        {
@@ -348,13 +359,6 @@ static int __maybe_unused query_vidconsole(int *rows, int *cols)
        return 0;
 }
 
-/**
- * efi_setup_console_size() - update the mode table.
- *
- * By default the only mode available is 80x25. If the console has at least 50
- * lines, enable mode 80x50. If we can query the console size and it is neither
- * 80x25 nor 80x50, set it as an additional mode.
- */
 void efi_setup_console_size(void)
 {
        int rows = 25, cols = 80;
@@ -362,8 +366,12 @@ void efi_setup_console_size(void)
 
        if (IS_ENABLED(CONFIG_VIDEO))
                ret = query_vidconsole(&rows, &cols);
-       if (ret)
-               ret = query_console_serial(&rows, &cols);
+       if (ret) {
+               if (no_ansi)
+                       ret = 0;
+               else
+                       ret = query_console_serial(&rows, &cols);
+       }
        if (ret)
                return;