1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-27 05:21:16 +02:00

cmd: bootefi: unfold do_bootefi_image()

Unfold do_bootefi_image() into do_bootefi() in order to make it easier
to re-organize do_bootefi() in the next commit.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
This commit is contained in:
AKASHI Takahiro
2023-11-21 10:29:39 +09:00
committed by Heinrich Schuchardt
parent cd94821033
commit 05e2cade01

View File

@@ -437,58 +437,6 @@ static int do_efibootmgr(void)
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
} }
/**
* do_bootefi_image() - execute EFI binary
*
* Set up memory image for the binary to be loaded, prepare device path, and
* then call do_bootefi_exec() to execute it.
*
* @image_opt: string with image start address
* @size_opt: string with image size or NULL
* Return: status code
*/
static int do_bootefi_image(const char *image_opt, const char *size_opt)
{
void *image_buf;
unsigned long addr, size;
efi_status_t ret;
#ifdef CONFIG_CMD_BOOTEFI_HELLO
if (!strcmp(image_opt, "hello")) {
image_buf = __efi_helloworld_begin;
size = __efi_helloworld_end - __efi_helloworld_begin;
efi_clear_bootdev();
} else
#endif
{
addr = strtoul(image_opt, NULL, 16);
/* Check that a numeric value was passed */
if (!addr)
return CMD_RET_USAGE;
image_buf = map_sysmem(addr, 0);
if (size_opt) {
size = strtoul(size_opt, NULL, 16);
if (!size)
return CMD_RET_USAGE;
efi_clear_bootdev();
} else {
if (image_buf != image_addr) {
log_err("No UEFI binary known at %s\n",
image_opt);
return CMD_RET_FAILURE;
}
size = image_size;
}
}
ret = efi_run_image(image_buf, size);
if (ret != EFI_SUCCESS)
return CMD_RET_FAILURE;
return CMD_RET_SUCCESS;
}
/** /**
* efi_run_image() - run loaded UEFI image * efi_run_image() - run loaded UEFI image
* *
@@ -660,8 +608,9 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[]) char *const argv[])
{ {
efi_status_t ret; efi_status_t ret;
char *img_addr, *img_size, *str_copy, *pos; char *p;
void *fdt; void *fdt, *image_buf;
unsigned long addr, size;
if (argc < 2) if (argc < 2)
return CMD_RET_USAGE; return CMD_RET_USAGE;
@@ -696,18 +645,42 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
if (!strcmp(argv[1], "selftest")) if (!strcmp(argv[1], "selftest"))
return do_efi_selftest(); return do_efi_selftest();
#endif #endif
str_copy = strdup(argv[1]);
if (!str_copy) { #ifdef CONFIG_CMD_BOOTEFI_HELLO
log_err("Out of memory\n"); if (!strcmp(argv[1], "hello")) {
image_buf = __efi_helloworld_begin;
size = __efi_helloworld_end - __efi_helloworld_begin;
efi_clear_bootdev();
} else
#endif
{
addr = strtoul(argv[1], NULL, 16);
/* Check that a numeric value was passed */
if (!addr)
return CMD_RET_USAGE;
image_buf = map_sysmem(addr, 0);
p = strchr(argv[1], ':');
if (p) {
size = strtoul(++p, NULL, 16);
if (!size)
return CMD_RET_USAGE;
efi_clear_bootdev();
} else {
if (image_buf != image_addr) {
log_err("No UEFI binary known at %s\n",
argv[1]);
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
} }
pos = str_copy; size = image_size;
img_addr = strsep(&pos, ":"); }
img_size = strsep(&pos, ":"); }
ret = do_bootefi_image(img_addr, img_size); ret = efi_run_image(image_buf, size);
free(str_copy);
return ret; if (ret != EFI_SUCCESS)
return CMD_RET_FAILURE;
return CMD_RET_SUCCESS;
} }
U_BOOT_LONGHELP(bootefi, U_BOOT_LONGHELP(bootefi,