
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@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
+{
- 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@linaro.org