> From: Simon Glass <s...@chromium.org> > Date: Sat, 10 May 2025 13:36:24 +0200
Hi Simon, > We don't want ANSI characters written in tests since it is a pain to > check the output with ut_assert_nextline() et al. You probably shouldn't use the term "ANSI characters" here when you really mean "ANSI escape sequences". > Provide a way to tests to request that ANSI characters not be sent. > > Add a proper function comment while we are here, to encourage others. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > include/efi_loader.h | 21 ++++++++++++++++++++- > lib/efi_loader/efi_console.c | 26 +++++++++++++++++--------- > 2 files changed, 37 insertions(+), 10 deletions(-) > > diff --git a/include/efi_loader.h b/include/efi_loader.h > index 25a809c3d53..b699479f346 100644 > --- a/include/efi_loader.h > +++ b/include/efi_loader.h > @@ -532,8 +532,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 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 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); > diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c > index 9d9f786a6db..28687d678c3 100644 > --- a/lib/efi_loader/efi_console.c > +++ b/lib/efi_loader/efi_console.c > @@ -30,6 +30,17 @@ struct cout_mode { > > __maybe_unused static struct efi_object uart_obj; > > +/* > + * suppress emission of ANSI codes 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; > > -- > 2.43.0 > > base-commit: c5a631df96de7421d10ee03dceed1b79db213026 > branch: ansi >