mirror of
https://xff.cz/git/u-boot/
synced 2025-10-26 16:13:55 +01:00
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>
This commit is contained in:
committed by
Heinrich Schuchardt
parent
c3530aec14
commit
5c129fe5f5
@@ -515,6 +515,36 @@ out:
|
|||||||
return (ret != EFI_SUCCESS) ? ret : ret2;
|
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,
|
static efi_status_t bootefi_run_prepare(const char *load_options_path,
|
||||||
struct efi_device_path *device_path,
|
struct efi_device_path *device_path,
|
||||||
struct efi_device_path *image_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_binary_run(image_buf, size, fdt);
|
||||||
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_install_fdt(fdt);
|
|
||||||
if (ret == EFI_INVALID_PARAMETER)
|
if (ret == EFI_INVALID_PARAMETER)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
else if (ret != EFI_SUCCESS)
|
else if (ret)
|
||||||
return CMD_RET_FAILURE;
|
|
||||||
|
|
||||||
ret = efi_run_image(image_buf, size);
|
|
||||||
|
|
||||||
if (ret != EFI_SUCCESS)
|
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user