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

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

index 785ef23e9225302ec5056cea2522d81d2688fe03..83f28e0bc71018e4ef0ae5d5cfa5c0521b37c06e 100644 (file)
@@ -515,6 +515,36 @@ out:
        return (ret != EFI_SUCCESS) ? ret : ret2;
 }
 
+/**
+ * efi_binary_run() - run loaded UEFI image
+ *
+ * @image:     memory address of the UEFI image
+ * @size:      size of the UEFI image
+ *
+ * Execute an EFI binary image loaded at @image.
+ * @size may be zero if the binary is loaded with U-Boot load command.
+ *
+ * Return:     status code
+ */
+static efi_status_t efi_binary_run(void *image, size_t size, void *fdt)
+{
+       efi_status_t ret;
+
+       /* 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 ret;
+       }
+
+       ret = efi_install_fdt(fdt);
+       if (ret != EFI_SUCCESS)
+               return ret;
+
+       return efi_run_image(image, size);
+}
+
 static efi_status_t bootefi_run_prepare(const char *load_options_path,
                struct efi_device_path *device_path,
                struct efi_device_path *image_path,
@@ -696,23 +726,11 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
                }
        }
 
-       /* 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_binary_run(image_buf, size, fdt);
 
-       ret = efi_install_fdt(fdt);
        if (ret == EFI_INVALID_PARAMETER)
                return CMD_RET_USAGE;
-       else if (ret != EFI_SUCCESS)
-               return CMD_RET_FAILURE;
-
-       ret = efi_run_image(image_buf, size);
-
-       if (ret != EFI_SUCCESS)
+       else if (ret)
                return CMD_RET_FAILURE;
 
        return CMD_RET_SUCCESS;