]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: bootefi: carve out EFI boot manager interface
authorAKASHI Takahiro <takahiro.akashi@linaro.org>
Tue, 21 Nov 2023 01:29:41 +0000 (10:29 +0900)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 17 Dec 2023 12:04:54 +0000 (13:04 +0100)
Carve EFI boot manager related code out of do_bootefi_image() in order
to move boot manager specific code into library directory in the later
commit.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
cmd/bootefi.c

index 49cddfbcef12e8ca4fe2d4d82090a7f416421a3a..785ef23e9225302ec5056cea2522d81d2688fe03 100644 (file)
@@ -413,28 +413,40 @@ out:
 }
 
 /**
- * do_efibootmgr() - execute EFI boot manager
+ * efi_bootmgr_run() - execute EFI boot manager
+ * fdt:        Flat device tree
+ *
+ * Invoke EFI boot manager and execute a binary depending on
+ * boot options. If @fdt is not NULL, it will be passed to
+ * the executed binary.
  *
  * Return:     status code
  */
-static int do_efibootmgr(void)
+static efi_status_t efi_bootmgr_run(void *fdt)
 {
        efi_handle_t handle;
-       efi_status_t ret;
        void *load_options;
+       efi_status_t ret;
 
-       ret = efi_bootmgr_load(&handle, &load_options);
+       /* Initialize EFI drivers */
+       ret = efi_init_obj_list();
        if (ret != EFI_SUCCESS) {
-               log_notice("EFI boot manager: Cannot load any image\n");
+               log_err("Error: Cannot initialize UEFI sub-system, r = %lu\n",
+                       ret & ~EFI_ERROR_MASK);
                return CMD_RET_FAILURE;
        }
 
-       ret = do_bootefi_exec(handle, load_options);
-
+       ret = efi_install_fdt(fdt);
        if (ret != EFI_SUCCESS)
-               return CMD_RET_FAILURE;
+               return ret;
 
-       return CMD_RET_SUCCESS;
+       ret = efi_bootmgr_load(&handle, &load_options);
+       if (ret != EFI_SUCCESS) {
+               log_notice("EFI boot manager: Cannot load any image\n");
+               return ret;
+       }
+
+       return do_bootefi_exec(handle, load_options);
 }
 
 /**
@@ -624,21 +636,14 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
 
        if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) &&
            !strcmp(argv[1], "bootmgr")) {
-               /* Initialize EFI drivers */
-               ret = efi_init_obj_list();
-               if (ret != EFI_SUCCESS) {
-                       log_err("Error: Cannot initialize UEFI sub-system, r = %lu\n",
-                               ret & ~EFI_ERROR_MASK);
-                       return CMD_RET_FAILURE;
-               }
+               ret = efi_bootmgr_run(fdt);
 
-               ret = efi_install_fdt(fdt);
                if (ret == EFI_INVALID_PARAMETER)
                        return CMD_RET_USAGE;
-               else if (ret != EFI_SUCCESS)
+               else if (ret)
                        return CMD_RET_FAILURE;
 
-               return do_efibootmgr();
+               return CMD_RET_SUCCESS;
        }
 
        if (IS_ENABLED(CONFIG_CMD_BOOTEFI_SELFTEST) &&