aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAKASHI Takahiro <takahiro.akashi@linaro.org>2023-11-21 10:29:42 +0900
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-12-17 13:04:54 +0100
commit5c129fe5f53d40f6fb2223b5a02784ed4c81e5e7 (patch)
tree22fc75f28694ed6f240c32bc801a37607cc01613
parentc3530aec141cc0621be7cdd2a3b54d7394655d16 (diff)
downloadu-boot-5c129fe5f53d40f6fb2223b5a02784ed4c81e5e7.zip
u-boot-5c129fe5f53d40f6fb2223b5a02784ed4c81e5e7.tar.gz
u-boot-5c129fe5f53d40f6fb2223b5a02784ed4c81e5e7.tar.bz2
cmd: bootefi: carve out binary execution interface
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>
-rw-r--r--cmd/bootefi.c46
1 files changed, 32 insertions, 14 deletions
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 785ef23..83f28e0 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -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;