aboutsummaryrefslogtreecommitdiff
path: root/cmd/bootmenu.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-09-14 12:31:44 -0400
committerTom Rini <trini@konsulko.com>2022-09-14 12:31:44 -0400
commit1520af3f8450bb58168fe1cc827a56d435e9f74c (patch)
treec68826240a27e03c9edbbffdfc255d0ee6d51086 /cmd/bootmenu.c
parent6541726ee92108935b97449ed28d8dd28c0ef001 (diff)
parentda4fb707ca095c223b67637e2525df4866e51c62 (diff)
Merge tag 'efi-next-2022-09-14' of https://source.denx.de/u-boot/custodians/u-boot-efi into next
Pull request for efi next UEFI: Implement a command eficonfig to maintain Load Options and boot order via menus.
Diffstat (limited to 'cmd/bootmenu.c')
-rw-r--r--cmd/bootmenu.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c
index 704d36debe..3340be1632 100644
--- a/cmd/bootmenu.c
+++ b/cmd/bootmenu.c
@@ -7,7 +7,7 @@
#include <common.h>
#include <command.h>
#include <ansi.h>
-#include <efi_loader.h>
+#include <efi_config.h>
#include <efi_variable.h>
#include <env.h>
#include <log.h>
@@ -220,7 +220,7 @@ static int prepare_bootmenu_entry(struct bootmenu_data *menu,
return 1;
}
-#if (CONFIG_IS_ENABLED(CMD_BOOTEFI_BOOTMGR))
+#if (CONFIG_IS_ENABLED(CMD_BOOTEFI_BOOTMGR)) && (CONFIG_IS_ENABLED(CMD_EFICONFIG))
/**
* prepare_uefi_bootorder_entry() - generate the uefi bootmenu entries
*
@@ -340,11 +340,21 @@ static struct bootmenu_data *bootmenu_create(int delay)
if (ret < 0)
goto cleanup;
-#if (CONFIG_IS_ENABLED(CMD_BOOTEFI_BOOTMGR))
+#if (CONFIG_IS_ENABLED(CMD_BOOTEFI_BOOTMGR)) && (CONFIG_IS_ENABLED(CMD_EFICONFIG))
if (i < MAX_COUNT - 1) {
- ret = prepare_uefi_bootorder_entry(menu, &iter, &i);
- if (ret < 0 && ret != -ENOENT)
- goto cleanup;
+ efi_status_t efi_ret;
+
+ /*
+ * UEFI specification requires booting from removal media using
+ * a architecture-specific default image name such as BOOTAA64.EFI.
+ */
+ efi_ret = eficonfig_generate_media_device_boot_option();
+ if (efi_ret != EFI_SUCCESS && efi_ret != EFI_NOT_FOUND)
+ goto cleanup;
+
+ ret = prepare_uefi_bootorder_entry(menu, &iter, &i);
+ if (ret < 0 && ret != -ENOENT)
+ goto cleanup;
}
#endif