[PATCH v2 15/22] cmd: log: Add commands to list categories and drivers

Simon Glass sjg at chromium.org
Mon Oct 12 05:35:20 CEST 2020


On Sat, 10 Oct 2020 at 13:44, Sean Anderson <seanga2 at gmail.com> wrote:
>
> This allows users to query which categories and drivers are available on
> their system. This allows them to construct filter-add commands without
> (e.g.) adjusting the log format to show categories and drivers.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
>
> Changes in v2:
> - New
>
>  cmd/log.c | 36 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)

Reviewed-by: Simon Glass <sjg at chromium.org>

>
> diff --git a/cmd/log.c b/cmd/log.c
> index 9076e220f0..ea458f36f4 100644
> --- a/cmd/log.c
> +++ b/cmd/log.c
> @@ -47,6 +47,38 @@ static int do_log_level(struct cmd_tbl *cmdtp, int flag, int argc,
>         return CMD_RET_SUCCESS;
>  }
>
> +static int do_log_categories(struct cmd_tbl *cmdtp, int flag, int argc,
> +                            char *const argv[])
> +{
> +       enum log_category_t cat;
> +       const char *name;
> +
> +       for (cat = LOGC_FIRST; cat < LOGC_COUNT; cat++) {
> +               name = log_get_cat_name(cat);
> +               /*
> +                * Invalid category names (e.g. <invalid> or <missing>) begin
> +                * with '<'. TODO: perhaps change the interface of
> +                * log_get_cat_name to return an error code?
> +                */

I think that might be cleaner, but this is OK so long as you document
the function return value accordingly.


> +               if (name[0] == '<')
> +                       continue;
> +               printf("%s\n", name);
> +       }
> +
> +       return CMD_RET_SUCCESS;
> +}
> +
> +static int do_log_drivers(struct cmd_tbl *cmdtp, int flag, int argc,
> +                         char *const argv[])
> +{
> +       struct log_device *ldev;
> +
> +       list_for_each_entry(ldev, &gd->log_head, sibling_node)
> +               printf("%s\n", ldev->drv->name);
> +
> +       return CMD_RET_SUCCESS;
> +}
> +
>  static int do_log_format(struct cmd_tbl *cmdtp, int flag, int argc,
>                          char *const argv[])
>  {
> @@ -123,6 +155,8 @@ static int do_log_rec(struct cmd_tbl *cmdtp, int flag, int argc,
>  #ifdef CONFIG_SYS_LONGHELP
>  static char log_help_text[] =
>         "level - get/set log level\n"
> +       "categories - list log categories\n"
> +       "drivers - list log drivers\n"
>         "log format <fmt> - set log output format. <fmt> is a string where\n"
>         "\teach letter indicates something that should be displayed:\n"
>         "\tc=category, l=level, F=file, L=line number, f=function, m=msg\n"
> @@ -137,6 +171,8 @@ static char log_help_text[] =
>
>  U_BOOT_CMD_WITH_SUBCMDS(log, "log system", log_help_text,
>         U_BOOT_SUBCMD_MKENT(level, 2, 1, do_log_level),
> +       U_BOOT_SUBCMD_MKENT(categories, 1, 1, do_log_categories),
> +       U_BOOT_SUBCMD_MKENT(drivers, 1, 1, do_log_drivers),
>         U_BOOT_SUBCMD_MKENT(format, 2, 1, do_log_format),
>         U_BOOT_SUBCMD_MKENT(rec, 7, 1, do_log_rec),
>  #if CONFIG_IS_ENABLED(LOG_TEST)
> --
> 2.28.0
>


More information about the U-Boot mailing list