mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00: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:
parent
cd94821033
commit
05e2cade01
1 changed files with 38 additions and 65 deletions
103
cmd/bootefi.c
103
cmd/bootefi.c
|
@ -437,58 +437,6 @@ static int do_efibootmgr(void)
|
|||
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
|
||||
*
|
||||
|
@ -660,8 +608,9 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
|
|||
char *const argv[])
|
||||
{
|
||||
efi_status_t ret;
|
||||
char *img_addr, *img_size, *str_copy, *pos;
|
||||
void *fdt;
|
||||
char *p;
|
||||
void *fdt, *image_buf;
|
||||
unsigned long addr, size;
|
||||
|
||||
if (argc < 2)
|
||||
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"))
|
||||
return do_efi_selftest();
|
||||
#endif
|
||||
str_copy = strdup(argv[1]);
|
||||
if (!str_copy) {
|
||||
log_err("Out of memory\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
pos = str_copy;
|
||||
img_addr = strsep(&pos, ":");
|
||||
img_size = strsep(&pos, ":");
|
||||
ret = do_bootefi_image(img_addr, img_size);
|
||||
free(str_copy);
|
||||
|
||||
return ret;
|
||||
#ifdef CONFIG_CMD_BOOTEFI_HELLO
|
||||
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;
|
||||
}
|
||||
size = image_size;
|
||||
}
|
||||
}
|
||||
ret = efi_run_image(image_buf, size);
|
||||
|
||||
if (ret != EFI_SUCCESS)
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
U_BOOT_LONGHELP(bootefi,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue