mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 10:39:08 +00:00
efi_loader: utility function to check the variable name is "Boot####"
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 efi_varname_is_load_option() function to check whether the UEFI variable name is "Boot####". Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
78b1ccc430
commit
3ac026ae46
3 changed files with 35 additions and 22 deletions
|
@ -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
|
* 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;
|
u16 *var_name16, *p;
|
||||||
efi_uintn_t buf_size, size;
|
efi_uintn_t buf_size, size;
|
||||||
efi_guid_t guid;
|
efi_guid_t guid;
|
||||||
int id, i, digit;
|
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
|
@ -1074,16 +1062,7 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memcmp(var_name16, u"Boot", 8))
|
if (efi_varname_is_load_option(var_name16, NULL))
|
||||||
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])
|
|
||||||
show_efi_boot_opt(var_name16);
|
show_efi_boot_opt(var_name16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -707,6 +707,7 @@ int algo_to_len(const char *algo);
|
||||||
|
|
||||||
int efi_link_dev(efi_handle_t handle, struct udevice *dev);
|
int efi_link_dev(efi_handle_t handle, struct udevice *dev);
|
||||||
int efi_unlink_dev(efi_handle_t handle);
|
int efi_unlink_dev(efi_handle_t handle);
|
||||||
|
bool efi_varname_is_load_option(u16 *var_name16, int *index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_size_in_pages() - convert size in bytes to size in pages
|
* efi_size_in_pages() - convert size in bytes to size in pages
|
||||||
|
|
|
@ -190,3 +190,36 @@ int efi_unlink_dev(efi_handle_t handle)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue