]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: utility function to check the variable name is "Boot####"
authorMasahisa Kojima <masahisa.kojima@linaro.org>
Fri, 2 Dec 2022 04:59:35 +0000 (13:59 +0900)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 2 Dec 2022 18:17:25 +0000 (19:17 +0100)
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>
cmd/efidebug.c
include/efi_loader.h
lib/efi_loader/efi_helper.c

index 64104da130c9d96331878d1e4862efb290da4271..569003ae2efcde79c5dd8f8f0909decc3376b29b 100644 (file)
@@ -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);
        }
 
index 0c6c95ba4641bce58d9e30e6e48b9f1ff24bb685..0899e293e51b51a7940d27f2d49493d7f4522f8a 100644 (file)
@@ -707,6 +707,7 @@ 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);
+bool efi_varname_is_load_option(u16 *var_name16, int *index);
 
 /**
  * efi_size_in_pages() - convert size in bytes to size in pages
index c71e87d118030af05d32b7619c0497f6c1b0b592..788cb9faec504cf38a5c115a6d7fda6e23e709b2 100644 (file)
@@ -190,3 +190,36 @@ int efi_unlink_dev(efi_handle_t handle)
 
        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;
+}