Message ID | 20171217154342.15469-2-xypron.glpk@gmx.de |
---|---|
State | Superseded, archived |
Delegated to: | Alexander Graf |
Headers | show |
Series | efi_loader: implement driver management | expand |
Hi Heinrich, On 17 December 2017 at 08:43, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote: > Add color coding to output: > test section blue > success green > errors red > todo yellow > summary white > others light gray > > Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> > --- > include/efi_selftest.h | 27 +++++++++++++++++---------- > lib/efi_selftest/efi_selftest.c | 25 ++++++++++++++----------- > lib/efi_selftest/efi_selftest_console.c | 13 +++++++++---- > 3 files changed, 40 insertions(+), 25 deletions(-) Reviewed-by: Simon Glass <sjg@chromium.org> comments below > > diff --git a/include/efi_selftest.h b/include/efi_selftest.h > index be5ba4bfa9..344f28ed36 100644 > --- a/include/efi_selftest.h > +++ b/include/efi_selftest.h > @@ -18,14 +18,20 @@ > #define EFI_ST_SUCCESS 0 > #define EFI_ST_FAILURE 1 > > +/* > + * Prints a message. > + */ > +#define efi_st_printf(...) \ > + (efi_st_printc(-1, __VA_ARGS__)) > + > /* > * Prints an error message. > * > * @... format string followed by fields to print > */ > #define efi_st_error(...) \ > - (efi_st_printf("%s(%u):\nERROR: ", __FILE__, __LINE__), \ > - efi_st_printf(__VA_ARGS__)) \ > + (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \ > + efi_st_printc(EFI_LIGHTRED, __VA_ARGS__)) > > /* > * Prints a TODO message. > @@ -33,8 +39,8 @@ > * @... format string followed by fields to print > */ > #define efi_st_todo(...) \ > - (efi_st_printf("%s(%u):\nTODO: ", __FILE__, __LINE__), \ > - efi_st_printf(__VA_ARGS__)) \ > + (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \ > + efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \ > > /* > * A test may be setup and executed at boottime, > @@ -61,14 +67,15 @@ extern struct efi_simple_input_interface *con_in; > void efi_st_exit_boot_services(void); > > /* > - * Print a pointer to an u16 string > + * Print a colored message > * > - * @pointer: pointer > - * @buf: pointer to buffer address > - * on return position of terminating zero word > + * @color color Can you please point to the enum to use? Also it seems like -1 means no colour? That should bementioned also > + * @fmt printf format > + * @... arguments to be printed > + * on return position of terminating zero word > */ > -void efi_st_printf(const char *fmt, ...) > - __attribute__ ((format (__printf__, 1, 2))); > +void efi_st_printc(int color, const char *fmt, ...) > + __attribute__ ((format (__printf__, 2, 3))); > > /* > * Compare memory. > diff --git a/lib/efi_selftest/efi_selftest.c b/lib/efi_selftest/efi_selftest.c > index 4e5a12c47c..fc5ef254a1 100644 > --- a/lib/efi_selftest/efi_selftest.c > +++ b/lib/efi_selftest/efi_selftest.c > @@ -65,7 +65,7 @@ void efi_st_exit_boot_services(void) > efi_st_error("ExitBootServices did not return EFI_SUCCESS\n"); > return; > } > - efi_st_printf("\nBoot services terminated\n"); > + efi_st_printc(EFI_WHITE, "\nBoot services terminated\n"); > } > > /* > @@ -81,13 +81,14 @@ static int setup(struct efi_unit_test *test, unsigned int *failures) > > if (!test->setup) > return EFI_ST_SUCCESS; > - efi_st_printf("\nSetting up '%s'\n", test->name); > + efi_st_printc(EFI_LIGHTBLUE, "\nSetting up '%s'\n", test->name); > ret = test->setup(handle, systable); > if (ret != EFI_ST_SUCCESS) { > efi_st_error("Setting up '%s' failed\n", test->name); > ++*failures; > } else { > - efi_st_printf("Setting up '%s' succeeded\n", test->name); > + efi_st_printc(EFI_LIGHTGREEN, > + "Setting up '%s' succeeded\n", test->name); > } > return ret; > } > @@ -105,13 +106,14 @@ static int execute(struct efi_unit_test *test, unsigned int *failures) > > if (!test->execute) > return EFI_ST_SUCCESS; > - efi_st_printf("\nExecuting '%s'\n", test->name); > + efi_st_printc(EFI_LIGHTBLUE, "\nExecuting '%s'\n", test->name); > ret = test->execute(); > if (ret != EFI_ST_SUCCESS) { > efi_st_error("Executing '%s' failed\n", test->name); > ++*failures; > } else { > - efi_st_printf("Executing '%s' succeeded\n", test->name); > + efi_st_printc(EFI_LIGHTGREEN, > + "Executing '%s' succeeded\n", test->name); > } > return ret; > } > @@ -129,13 +131,14 @@ static int teardown(struct efi_unit_test *test, unsigned int *failures) > > if (!test->teardown) > return EFI_ST_SUCCESS; > - efi_st_printf("\nTearing down '%s'\n", test->name); > + efi_st_printc(EFI_LIGHTBLUE, "\nTearing down '%s'\n", test->name); > ret = test->teardown(); > if (ret != EFI_ST_SUCCESS) { > efi_st_error("Tearing down '%s' failed\n", test->name); > ++*failures; > } else { > - efi_st_printf("Tearing down '%s' succeeded\n", test->name); > + efi_st_printc(EFI_LIGHTGREEN, > + "Tearing down '%s' succeeded\n", test->name); > } > return ret; > } > @@ -262,12 +265,12 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, > } > } > > - efi_st_printf("\nTesting EFI API implementation\n"); > + efi_st_printc(EFI_WHITE, "\nTesting EFI API implementation\n"); > > if (testname) > - efi_st_printf("\nSelected test: '%ps'\n", testname); > + efi_st_printc(EFI_WHITE, "\nSelected test: '%ps'\n", testname); > else > - efi_st_printf("\nNumber of tests to execute: %u\n", > + efi_st_printc(EFI_WHITE, "\nNumber of tests to execute: %u\n", > ll_entry_count(struct efi_unit_test, > efi_unit_test)); > > @@ -291,7 +294,7 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, > &failures); > > /* Give feedback */ > - efi_st_printf("\nSummary: %u failures\n\n", failures); > + efi_st_printc(EFI_WHITE, "\nSummary: %u failures\n\n", failures); > > /* Reset system */ > efi_st_printf("Preparing for reset. Press any key.\n"); > diff --git a/lib/efi_selftest/efi_selftest_console.c b/lib/efi_selftest/efi_selftest_console.c > index 6a7fd20da5..7920c961ba 100644 > --- a/lib/efi_selftest/efi_selftest_console.c > +++ b/lib/efi_selftest/efi_selftest_console.c > @@ -130,12 +130,13 @@ static void int2dec(s32 value, u16 **buf) > } > > /* > - * Print a formatted string to the EFI console > + * Print a colored formatted string to the EFI console > * > - * @fmt: format string > - * @...: optional arguments > + * @color color same here > + * @fmt format string > + * @... optional arguments > */ > -void efi_st_printf(const char *fmt, ...) > +void efi_st_printc(int color, const char *fmt, ...) > { > va_list args; > u16 buf[160]; > @@ -215,7 +216,11 @@ void efi_st_printf(const char *fmt, ...) > } > va_end(args); > *pos = 0; > + if (color >= 0) > + con_out->set_attribute(con_out, (unsigned long)color); > con_out->output_string(con_out, buf); > + if (color >= 0) > + con_out->set_attribute(con_out, EFI_LIGHTGRAY); > } > > /* > -- > 2.14.2 > Regards, Simon
diff --git a/include/efi_selftest.h b/include/efi_selftest.h index be5ba4bfa9..344f28ed36 100644 --- a/include/efi_selftest.h +++ b/include/efi_selftest.h @@ -18,14 +18,20 @@ #define EFI_ST_SUCCESS 0 #define EFI_ST_FAILURE 1 +/* + * Prints a message. + */ +#define efi_st_printf(...) \ + (efi_st_printc(-1, __VA_ARGS__)) + /* * Prints an error message. * * @... format string followed by fields to print */ #define efi_st_error(...) \ - (efi_st_printf("%s(%u):\nERROR: ", __FILE__, __LINE__), \ - efi_st_printf(__VA_ARGS__)) \ + (efi_st_printc(EFI_LIGHTRED, "%s(%u):\nERROR: ", __FILE__, __LINE__), \ + efi_st_printc(EFI_LIGHTRED, __VA_ARGS__)) /* * Prints a TODO message. @@ -33,8 +39,8 @@ * @... format string followed by fields to print */ #define efi_st_todo(...) \ - (efi_st_printf("%s(%u):\nTODO: ", __FILE__, __LINE__), \ - efi_st_printf(__VA_ARGS__)) \ + (efi_st_printc(EFI_YELLOW, "%s(%u):\nTODO: ", __FILE__, __LINE__), \ + efi_st_printc(EFI_YELLOW, __VA_ARGS__)) \ /* * A test may be setup and executed at boottime, @@ -61,14 +67,15 @@ extern struct efi_simple_input_interface *con_in; void efi_st_exit_boot_services(void); /* - * Print a pointer to an u16 string + * Print a colored message * - * @pointer: pointer - * @buf: pointer to buffer address - * on return position of terminating zero word + * @color color + * @fmt printf format + * @... arguments to be printed + * on return position of terminating zero word */ -void efi_st_printf(const char *fmt, ...) - __attribute__ ((format (__printf__, 1, 2))); +void efi_st_printc(int color, const char *fmt, ...) + __attribute__ ((format (__printf__, 2, 3))); /* * Compare memory. diff --git a/lib/efi_selftest/efi_selftest.c b/lib/efi_selftest/efi_selftest.c index 4e5a12c47c..fc5ef254a1 100644 --- a/lib/efi_selftest/efi_selftest.c +++ b/lib/efi_selftest/efi_selftest.c @@ -65,7 +65,7 @@ void efi_st_exit_boot_services(void) efi_st_error("ExitBootServices did not return EFI_SUCCESS\n"); return; } - efi_st_printf("\nBoot services terminated\n"); + efi_st_printc(EFI_WHITE, "\nBoot services terminated\n"); } /* @@ -81,13 +81,14 @@ static int setup(struct efi_unit_test *test, unsigned int *failures) if (!test->setup) return EFI_ST_SUCCESS; - efi_st_printf("\nSetting up '%s'\n", test->name); + efi_st_printc(EFI_LIGHTBLUE, "\nSetting up '%s'\n", test->name); ret = test->setup(handle, systable); if (ret != EFI_ST_SUCCESS) { efi_st_error("Setting up '%s' failed\n", test->name); ++*failures; } else { - efi_st_printf("Setting up '%s' succeeded\n", test->name); + efi_st_printc(EFI_LIGHTGREEN, + "Setting up '%s' succeeded\n", test->name); } return ret; } @@ -105,13 +106,14 @@ static int execute(struct efi_unit_test *test, unsigned int *failures) if (!test->execute) return EFI_ST_SUCCESS; - efi_st_printf("\nExecuting '%s'\n", test->name); + efi_st_printc(EFI_LIGHTBLUE, "\nExecuting '%s'\n", test->name); ret = test->execute(); if (ret != EFI_ST_SUCCESS) { efi_st_error("Executing '%s' failed\n", test->name); ++*failures; } else { - efi_st_printf("Executing '%s' succeeded\n", test->name); + efi_st_printc(EFI_LIGHTGREEN, + "Executing '%s' succeeded\n", test->name); } return ret; } @@ -129,13 +131,14 @@ static int teardown(struct efi_unit_test *test, unsigned int *failures) if (!test->teardown) return EFI_ST_SUCCESS; - efi_st_printf("\nTearing down '%s'\n", test->name); + efi_st_printc(EFI_LIGHTBLUE, "\nTearing down '%s'\n", test->name); ret = test->teardown(); if (ret != EFI_ST_SUCCESS) { efi_st_error("Tearing down '%s' failed\n", test->name); ++*failures; } else { - efi_st_printf("Tearing down '%s' succeeded\n", test->name); + efi_st_printc(EFI_LIGHTGREEN, + "Tearing down '%s' succeeded\n", test->name); } return ret; } @@ -262,12 +265,12 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, } } - efi_st_printf("\nTesting EFI API implementation\n"); + efi_st_printc(EFI_WHITE, "\nTesting EFI API implementation\n"); if (testname) - efi_st_printf("\nSelected test: '%ps'\n", testname); + efi_st_printc(EFI_WHITE, "\nSelected test: '%ps'\n", testname); else - efi_st_printf("\nNumber of tests to execute: %u\n", + efi_st_printc(EFI_WHITE, "\nNumber of tests to execute: %u\n", ll_entry_count(struct efi_unit_test, efi_unit_test)); @@ -291,7 +294,7 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, &failures); /* Give feedback */ - efi_st_printf("\nSummary: %u failures\n\n", failures); + efi_st_printc(EFI_WHITE, "\nSummary: %u failures\n\n", failures); /* Reset system */ efi_st_printf("Preparing for reset. Press any key.\n"); diff --git a/lib/efi_selftest/efi_selftest_console.c b/lib/efi_selftest/efi_selftest_console.c index 6a7fd20da5..7920c961ba 100644 --- a/lib/efi_selftest/efi_selftest_console.c +++ b/lib/efi_selftest/efi_selftest_console.c @@ -130,12 +130,13 @@ static void int2dec(s32 value, u16 **buf) } /* - * Print a formatted string to the EFI console + * Print a colored formatted string to the EFI console * - * @fmt: format string - * @...: optional arguments + * @color color + * @fmt format string + * @... optional arguments */ -void efi_st_printf(const char *fmt, ...) +void efi_st_printc(int color, const char *fmt, ...) { va_list args; u16 buf[160]; @@ -215,7 +216,11 @@ void efi_st_printf(const char *fmt, ...) } va_end(args); *pos = 0; + if (color >= 0) + con_out->set_attribute(con_out, (unsigned long)color); con_out->output_string(con_out, buf); + if (color >= 0) + con_out->set_attribute(con_out, EFI_LIGHTGRAY); } /*
Add color coding to output: test section blue success green errors red todo yellow summary white others light gray Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> --- include/efi_selftest.h | 27 +++++++++++++++++---------- lib/efi_selftest/efi_selftest.c | 25 ++++++++++++++----------- lib/efi_selftest/efi_selftest_console.c | 13 +++++++++---- 3 files changed, 40 insertions(+), 25 deletions(-)