[PATCH v2 3/5] efi_loader: utility function to check the variable name is "Boot####"
Masahisa Kojima
masahisa.kojima at linaro.org
Tue Nov 29 10:57:17 CET 2022
Hi Ilias,
On Tue, 29 Nov 2022 at 16:33, Ilias Apalodimas
<ilias.apalodimas at linaro.org> wrote:
>
> On Mon, Nov 28, 2022 at 09:45:07PM +0900, Masahisa Kojima wrote:
> > Some commands need to enumerate the existing UEFI load
> > option variable("Boot####"). This commit transfers some code
> > from cmd/efidebug.c to lib/efi_loder/, then exposes u16_tohex() and
> > efi_varname_is_load_option() function to check whether the
> > UEFI variable name is "Boot####".
> >
> > Signed-off-by: Masahisa Kojima <masahisa.kojima at linaro.org>
> > ---
> > Newly created in v2
> >
> > cmd/efidebug.c | 23 +----------------------
> > include/efi_loader.h | 2 ++
> > lib/efi_loader/efi_helper.c | 33 +++++++++++++++++++++++++++++++++
> > 3 files changed, 36 insertions(+), 22 deletions(-)
> >
> > diff --git a/cmd/efidebug.c b/cmd/efidebug.c
> > index ef239bb34b..ceb3aa5cee 100644
> > --- a/cmd/efidebug.c
> > +++ b/cmd/efidebug.c
> > @@ -1010,17 +1010,6 @@ static void show_efi_boot_opt(u16 *varname16)
> > }
> > }
> >
> > -static int u16_tohex(u16 c)
> > -{
> > - if (c >= '0' && c <= '9')
> > - return c - '0';
> > - if (c >= 'A' && c <= 'F')
> > - return c - 'A' + 10;
> > -
> > - /* not hexadecimal */
> > - return -1;
> > -}
> > -
> > /**
> > * show_efi_boot_dump() - dump all UEFI load options
> > *
> > @@ -1041,7 +1030,6 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
> > u16 *var_name16, *p;
> > efi_uintn_t buf_size, size;
> > efi_guid_t guid;
> > - int id, i, digit;
> > efi_status_t ret;
> >
> > if (argc > 1)
> > @@ -1074,16 +1062,7 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
> > return CMD_RET_FAILURE;
> > }
> >
> > - if (memcmp(var_name16, u"Boot", 8))
> > - continue;
> > -
> > - for (id = 0, i = 0; i < 4; i++) {
> > - digit = u16_tohex(var_name16[4 + i]);
> > - if (digit < 0)
> > - break;
> > - id = (id << 4) + digit;
> > - }
> > - if (i == 4 && !var_name16[8])
> > + if (efi_varname_is_load_option(var_name16, NULL))
> > show_efi_boot_opt(var_name16);
> > }
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index 0c6c95ba46..b1ded811e7 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -707,6 +707,8 @@ int algo_to_len(const char *algo);
> >
> > int efi_link_dev(efi_handle_t handle, struct udevice *dev);
> > int efi_unlink_dev(efi_handle_t handle);
> > +int u16_tohex(u16 c);
> > +bool efi_varname_is_load_option(u16 *var_name16, int *index);
> >
> > /**
> > * efi_size_in_pages() - convert size in bytes to size in pages
> > diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
> > index c71e87d118..8a7afcc381 100644
> > --- a/lib/efi_loader/efi_helper.c
> > +++ b/lib/efi_loader/efi_helper.c
> > @@ -190,3 +190,36 @@ int efi_unlink_dev(efi_handle_t handle)
> >
> > return 0;
> > }
> > +
> > +int u16_tohex(u16 c)
>
> This needs static
OK, I will fix it.
>
> > +{
> > + if (c >= '0' && c <= '9')
> > + return c - '0';
> > + if (c >= 'A' && c <= 'F')
> > + return c - 'A' + 10;
> > +
> > + /* not hexadecimal */
> > + return -1;
> > +}
> > +
> > +bool efi_varname_is_load_option(u16 *var_name16, int *index)
> > +{
> > + int id, i, digit;
> > +
> > + if (memcmp(var_name16, u"Boot", 8))
> > + return false;
> > +
> > + for (id = 0, i = 0; i < 4; i++) {
> > + digit = u16_tohex(var_name16[4 + i]);
> > + if (digit < 0)
> > + break;
> > + id = (id << 4) + digit;
> > + }
> > + if (i == 4 && !var_name16[8]) {
> > + if (index)
> > + *index = id;
> > + return true;
> > + }
> > +
> > + return false;
> > +}
> > --
> > 2.17.1
> >
>
> With that
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Thank you for the review.
Regards,
Masahisa Kojima
>
More information about the U-Boot
mailing list