summaryrefslogtreecommitdiff
path: root/firmware/lib/vboot_ui_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/vboot_ui_menu.c')
-rw-r--r--firmware/lib/vboot_ui_menu.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index 4bc0cffc..3bda0c01 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -167,6 +167,7 @@ typedef enum _VB_MENU {
VB_MENU_RECOVERY,
VB_MENU_TO_DEV,
VB_MENU_LANGUAGES,
+ VB_MENU_RECOVERY_INSERT,
VB_MENU_COUNT,
} VB_MENU;
@@ -368,6 +369,7 @@ static const uint32_t VB_MENU_TO_SCREEN_MAP[] = {
VB_SCREEN_RECOVERY_MENU,
VB_SCREEN_RECOVERY_TO_DEV_MENU,
VB_SCREEN_LANGUAGES_MENU,
+ VB_SCREEN_RECOVERY_INSERT,
};
VbError_t vb2_draw_current_screen(struct vb2_context *ctx,
@@ -520,6 +522,10 @@ VbError_t vb2_update_menu(struct vb2_context *ctx)
break;
}
break;
+ case VB_MENU_RECOVERY_INSERT:
+ vb2_set_menu_items(VB_MENU_RECOVERY,
+ VB_RECOVERY_POWER_OFF);
+ break;
case VB_MENU_RECOVERY:
switch(current_menu_idx) {
case VB_RECOVERY_TO_DEV:
@@ -1058,9 +1064,9 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
VB2_DEBUG("waiting for a recovery image\n");
/* Initialize menu to recovery menu. */
- current_menu = VB_MENU_RECOVERY;
- prev_menu = VB_MENU_RECOVERY;
- current_menu_idx = VB_RECOVERY_POWER_OFF;
+ current_menu = VB_MENU_RECOVERY_INSERT;
+ prev_menu = VB_MENU_RECOVERY_INSERT;
+ current_menu_idx = 0;
while (1) {
VB2_DEBUG("attempting to load kernel2\n");
@@ -1101,13 +1107,15 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
/* nothing pressed */
break;
case VB_BUTTON_VOL_UP:
- case VB_KEY_UP:
- vb2_update_selection(cparams, key);
- vb2_draw_current_screen(ctx, cparams);
- break;
case VB_BUTTON_VOL_DOWN:
+ case VB_KEY_UP:
case VB_KEY_DOWN:
- vb2_update_selection(cparams, key);
+ if (current_menu == VB_MENU_RECOVERY_INSERT) {
+ ret = vb2_update_menu(ctx);
+ vb2_set_disabled_idx_mask(shared->flags);
+ } else {
+ vb2_update_selection(cparams, key);
+ }
vb2_draw_current_screen(ctx, cparams);
break;
case VB_BUTTON_POWER:
@@ -1124,6 +1132,18 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
vb2_set_disabled_idx_mask(shared->flags);
+ /*
+ * If user hits power button in
+ * initial recovery screen (ie:
+ * because didn't really want to go
+ * there), power button will turn off
+ * device.
+ */
+ if (current_menu == VB_MENU_RECOVERY_INSERT) {
+ ret = VBERROR_SHUTDOWN_REQUESTED;
+ }
+
+
if (current_menu != VB_MENU_RECOVERY ||
current_menu_idx != VB_RECOVERY_DBG_INFO) {
/*