summaryrefslogtreecommitdiff
path: root/firmware/2lib/2ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/2lib/2ui.c')
-rw-r--r--firmware/2lib/2ui.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c
index b6892cb9..25037c94 100644
--- a/firmware/2lib/2ui.c
+++ b/firmware/2lib/2ui.c
@@ -7,19 +7,42 @@
#include "2api.h"
#include "2common.h"
+#include "2misc.h"
+#include "2nvstorage.h"
+#include "2return_codes.h"
+#include "2secdata.h"
#include "2ui.h"
+#include "vboot_kernel.h"
/*****************************************************************************/
/* Entry points */
vb2_error_t vb2_developer_menu(struct vb2_context *ctx)
{
+ enum vb2_dev_default_boot default_boot;
+
/* TODO(roccochen): Init, wait for user, and boot. */
vb2ex_display_ui(VB2_SCREEN_BLANK, 0);
- while (1);
+ /* If dev mode was disabled, loop forever. */
+ if (!vb2_dev_boot_allowed(ctx))
+ while (1);
- return VB2_SUCCESS;
+ /* Boot from the default option. */
+ default_boot = vb2_get_dev_boot_target(ctx);
+
+ /* Boot legacy does not return on success */
+ if (default_boot == VB2_DEV_DEFAULT_BOOT_LEGACY &&
+ vb2_dev_boot_legacy_allowed(ctx) &&
+ VbExLegacy(VB_ALTFW_DEFAULT) == VB2_SUCCESS)
+ return VB2_SUCCESS;
+
+ if (default_boot == VB2_DEV_DEFAULT_BOOT_USB &&
+ vb2_dev_boot_usb_allowed(ctx) &&
+ VbTryLoadKernel(ctx, VB_DISK_FLAG_REMOVABLE) == VB2_SUCCESS)
+ return VB2_SUCCESS;
+
+ return VbTryLoadKernel(ctx, VB_DISK_FLAG_FIXED);
}
vb2_error_t vb2_broken_recovery_menu(struct vb2_context *ctx)