[RFC 03/13] cmd: bootefi: carve out EFI boot manager interface

AKASHI Takahiro
2023-10-26T05:31:56Z

Carve EFI boot manager related code out of do_bootefi_image().

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
cmd/bootefi.c | 43 ++++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index ae00bba3b4f0..899ed90f6817 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -401,28 +401,40 @@ out:
}

/**
- * do_efibootmgr() - execute EFI boot manager
+ * efi_bootmgr_run() - execute EFI boot manager
+ * fdt: Flat device tree
+ *
+ * Invoke EFI boot manager and execute a binary depending on
+ * boot options. If @fdt is not NULL, it will be passed to
+ * the executed binary.
*
* Return: status code
*/
-static int do_efibootmgr(void)
+static efi_status_t efi_bootmgr_run(void *fdt)
{
efi_handle_t handle;
- efi_status_t ret;
void *load_options;
+ efi_status_t ret;

- ret = efi_bootmgr_load(&handle, &load_options);
+ /* Initialize EFI drivers */
+ ret = efi_init_obj_list();
if (ret != EFI_SUCCESS) {
- log_notice("EFI boot manager: Cannot load any image\n");
+ log_err("Error: Cannot initialize UEFI sub-system, r = %lu\n",
+ ret & ~EFI_ERROR_MASK);
return CMD_RET_FAILURE;
}

- ret = do_bootefi_exec(handle, load_options);
-
+ ret = efi_install_fdt(fdt);
if (ret != EFI_SUCCESS)
- return CMD_RET_FAILURE;
+ return ret;

- return CMD_RET_SUCCESS;
+ ret = efi_bootmgr_load(&handle, &load_options);
+ if (ret != EFI_SUCCESS) {
+ log_notice("EFI boot manager: Cannot load any image\n");
+ return ret;
+ }
+
+ return do_bootefi_exec(handle, load_options);
}

/**
@@ -612,21 +624,14 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,

if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) &&
!strcmp(argv[1], "bootmgr")) {
- /* 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_bootmgr_run(fdt);

- ret = efi_install_fdt(fdt);
if (ret == EFI_INVALID_PARAMETER)
return CMD_RET_USAGE;
- else if (ret != EFI_SUCCESS)
+ else if (ret)
return CMD_RET_FAILURE;

- return do_efibootmgr();
+ return CMD_RET_SUCCESS;
}

if (IS_ENABLED(CONFIG_CMD_BOOTEFI_SELFTEST) &&
--
2.34.1