summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2018-01-24 19:47:33 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-01-31 18:00:54 -0800
commit6ab5fce30c09ce08d2aec113b91362bee34476ca (patch)
tree1734fc0fdca54f1ed3bb021881868215adf25c6c
parent7097e55a8d932d43f6bee6a3c538d21b9370dad5 (diff)
downloadvboot-6ab5fce30c09ce08d2aec113b91362bee34476ca.tar.gz
detachables: Combine set_menu_items and set_disabled_idx_mask
The disabled_idx_mask always needs to be set according to the current menu, so it makes sense to combine this task with the function that changes menus. Call the new function vb2_change_menu() to indicate its broader set of responsibilities. BRANCH=None BUG=None TEST=make runtest Change-Id: I122783cbc0b35d0d9e866f614646865c5c8a0ed0 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/888081 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Furquan Shaikh <furquan@chromium.org> Reviewed-by: Shelley Chen <shchen@chromium.org>
-rw-r--r--firmware/lib/vboot_ui_menu.c93
1 files changed, 35 insertions, 58 deletions
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index 5f3ae3d0..0bc6733e 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -269,22 +269,30 @@ static VbError_t vb2_draw_current_screen(struct vb2_context *ctx) {
}
/**
- * Set current_menu to new_current_menu
+ * Switch to a new menu (but don't draw it yet).
*
* @param new_current_menu: new menu to set current_menu to
* @param new_current_menu_idx: new idx to set current_menu_idx to
- * @return VBERROR_SUCCESS, or non-zero error code if error.
*/
-static VbError_t vb2_set_menu_items(VB_MENU new_current_menu,
- int new_current_menu_idx)
+static void vb2_change_menu(VB_MENU new_current_menu,
+ int new_current_menu_idx)
{
prev_menu = current_menu;
current_menu = new_current_menu;
current_menu_idx = new_current_menu_idx;
+
/* Changing menus, so reset selected */
selected = 0;
- return VBERROR_SUCCESS;
+ /* Reconfigure disabled_idx_mask for the new menu */
+ disabled_idx_mask = 0;
+ /* Disable Network Boot Option */
+ if (current_menu == VB_MENU_DEV)
+ disabled_idx_mask |= 1 << VB_DEV_NETWORK;
+ /* Disable cancel option if enterprise disabled dev mode */
+ if (current_menu == VB_MENU_TO_NORM &&
+ disable_dev_boot == 1)
+ disabled_idx_mask |= 1 << VB_TO_NORM_CANCEL;
}
/**
@@ -293,9 +301,9 @@ static VbError_t vb2_set_menu_items(VB_MENU new_current_menu,
static void vb2_recovery_base_menu(int nogood)
{
if (nogood)
- vb2_set_menu_items(VB_MENU_RECOVERY_NO_GOOD, 0);
+ vb2_change_menu(VB_MENU_RECOVERY_NO_GOOD, 0);
else
- vb2_set_menu_items(VB_MENU_RECOVERY_INSERT, 0);
+ vb2_change_menu(VB_MENU_RECOVERY_INSERT, 0);
}
/**
@@ -328,7 +336,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
* 1. Select dev menu
* 2. Default to dev boot device
*/
- vb2_set_menu_items(VB_MENU_DEV, next_menu_idx);
+ vb2_change_menu(VB_MENU_DEV, next_menu_idx);
break;
case VB_WARN_DBG_INFO:
/* Show debug info */
@@ -338,8 +346,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
* 1. Enable boot verification
* 2. Default to the confirm option
*/
- vb2_set_menu_items(VB_MENU_TO_NORM,
- VB_TO_NORM_CONFIRM);
+ vb2_change_menu(VB_MENU_TO_NORM, VB_TO_NORM_CONFIRM);
break;
case VB_WARN_POWER_OFF:
/* Power off machine */
@@ -347,7 +354,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
break;
case VB_WARN_LANGUAGE:
/* Languages */
- vb2_set_menu_items(VB_MENU_LANGUAGES, loc);
+ vb2_change_menu(VB_MENU_LANGUAGES, loc);
break;
default:
/* Invalid menu item. Don't update anything. */
@@ -373,8 +380,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
* 1. Cancel (go back to developer warning menu)
* 2. Default to power off option.
*/
- vb2_set_menu_items(VB_MENU_DEV_WARNING,
- VB_WARN_POWER_OFF);
+ vb2_change_menu(VB_MENU_DEV_WARNING, VB_WARN_POWER_OFF);
break;
case VB_DEV_POWER_OFF:
/* Power off */
@@ -382,7 +388,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
break;
case VB_DEV_LANGUAGE:
/* Language */
- vb2_set_menu_items(VB_MENU_LANGUAGES, loc);
+ vb2_change_menu(VB_MENU_LANGUAGES, loc);
break;
default:
/* Invalid menu item. Don't update anything. */
@@ -399,8 +405,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
* 1. Cancel (go back to developer warning menu)
* 2. Default to power off
*/
- vb2_set_menu_items(VB_MENU_DEV_WARNING,
- VB_WARN_POWER_OFF);
+ vb2_change_menu(VB_MENU_DEV_WARNING, VB_WARN_POWER_OFF);
break;
case VB_TO_NORM_POWER_OFF:
/* Power off */
@@ -408,7 +413,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
break;
case VB_TO_NORM_LANGUAGE:
/* Language */
- vb2_set_menu_items(VB_MENU_LANGUAGES, loc);
+ vb2_change_menu(VB_MENU_LANGUAGES, loc);
break;
default:
/* Invalid menu item. Don't update anything */
@@ -418,8 +423,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
case VB_MENU_RECOVERY_INSERT:
case VB_MENU_RECOVERY_NO_GOOD:
case VB_MENU_RECOVERY_BROKEN:
- vb2_set_menu_items(VB_MENU_OPTIONS,
- VB_OPTIONS_CANCEL);
+ vb2_change_menu(VB_MENU_OPTIONS, VB_OPTIONS_CANCEL);
break;
case VB_MENU_TO_DEV:
switch(current_menu_idx) {
@@ -433,7 +437,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_TO_DEV_LANGUAGE:
- vb2_set_menu_items(VB_MENU_LANGUAGES, loc);
+ vb2_change_menu(VB_MENU_LANGUAGES, loc);
break;
default:
/* Invalid menu item. Don't update anything. */
@@ -451,7 +455,7 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_OPTIONS_LANGUAGE:
- vb2_set_menu_items(VB_MENU_LANGUAGES, loc);
+ vb2_change_menu(VB_MENU_LANGUAGES, loc);
break;
default:
/* Invalid menu item. Don't update anything. */
@@ -465,22 +469,22 @@ static VbError_t vb2_update_menu(struct vb2_context *ctx)
*/
switch (prev_menu) {
case VB_MENU_DEV_WARNING:
- vb2_set_menu_items(prev_menu, VB_WARN_POWER_OFF);
+ vb2_change_menu(prev_menu, VB_WARN_POWER_OFF);
break;
case VB_MENU_DEV:
- vb2_set_menu_items(prev_menu, VB_DEV_POWER_OFF);
+ vb2_change_menu(prev_menu, VB_DEV_POWER_OFF);
break;
case VB_MENU_TO_NORM:
- vb2_set_menu_items(prev_menu, VB_TO_NORM_CONFIRM);
+ vb2_change_menu(prev_menu, VB_TO_NORM_CONFIRM);
break;
case VB_MENU_TO_DEV:
- vb2_set_menu_items(prev_menu, VB_TO_DEV_CANCEL);
+ vb2_change_menu(prev_menu, VB_TO_DEV_CANCEL);
break;
case VB_MENU_OPTIONS:
- vb2_set_menu_items(prev_menu, VB_OPTIONS_CANCEL);
+ vb2_change_menu(prev_menu, VB_OPTIONS_CANCEL);
break;
default:
- vb2_set_menu_items(prev_menu, 0);
+ vb2_change_menu(prev_menu, 0);
break;
}
break;
@@ -512,24 +516,6 @@ static VbError_t vb2_update_locale(struct vb2_context *ctx) {
}
/**
- * Adjust the disabled_idx_mask based on current menu and settings.
- *
- * @param flags flag to check for dev/normal mode.
- * @return VBERROR_SUCCESS
- */
-static VbError_t vb2_set_disabled_idx_mask(uint32_t flags) {
- disabled_idx_mask = 0;
- /* Disable Network Boot Option */
- if (current_menu == VB_MENU_DEV)
- disabled_idx_mask |= 1 << VB_DEV_NETWORK;
- /* Disable cancel option if enterprise disabled dev mode */
- if (current_menu == VB_MENU_TO_NORM &&
- disable_dev_boot == 1)
- disabled_idx_mask |= 1 << VB_TO_NORM_CANCEL;
- return VBERROR_SUCCESS;
-}
-
-/**
* Updates current_menu_idx upon an up/down key press, taking into
* account disabled indices (from disabled_idx_mask). The cursor
* will not wrap, meaning that we block on the 0 or max index when
@@ -596,7 +582,7 @@ static VbError_t vb2_developer_menu(struct vb2_context *ctx)
VB2_DEBUG("Entering\n");
- vb2_set_menu_items(VB_MENU_DEV_WARNING, VB_WARN_POWER_OFF);
+ vb2_change_menu(VB_MENU_DEV_WARNING, VB_WARN_POWER_OFF);
/* Check if USB booting is allowed */
uint32_t allow_usb = vb2_nv_get(ctx, VB2_NV_DEV_BOOT_USB);
@@ -634,11 +620,10 @@ static VbError_t vb2_developer_menu(struct vb2_context *ctx)
/* If dev mode is disabled, only allow TONORM */
disable_dev_boot = 1;
VB2_DEBUG("dev_disable_boot is set.\n");
- vb2_set_menu_items(VB_MENU_TO_NORM, VB_TO_NORM_CONFIRM);
+ vb2_change_menu(VB_MENU_TO_NORM, VB_TO_NORM_CONFIRM);
}
}
- vb2_set_disabled_idx_mask(shared->flags);
/* Show the dev mode warning screen */
vb2_draw_current_screen(ctx);
@@ -731,9 +716,7 @@ static VbError_t vb2_developer_menu(struct vb2_context *ctx)
* we'll lose the previous state
*/
vb2_update_locale(ctx);
-
ret = vb2_update_menu(ctx);
- vb2_set_disabled_idx_mask(shared->flags);
vb2_draw_current_screen(ctx);
/* Probably shutting down */
@@ -920,7 +903,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx)
vb2_nv_commit(ctx);
VbDisplayScreen(ctx, VB_SCREEN_OS_BROKEN, 0);
- vb2_set_menu_items(VB_MENU_RECOVERY_BROKEN, 0);
+ vb2_change_menu(VB_MENU_RECOVERY_BROKEN, 0);
VB2_DEBUG("waiting for manual recovery\n");
while (1) {
key = VbExKeyboardRead();
@@ -960,7 +943,6 @@ static VbError_t recovery_ui(struct vb2_context *ctx)
usb_nogood = retval != VBERROR_NO_DISK_FOUND;
vb2_recovery_base_menu(usb_nogood);
vb2_draw_current_screen(ctx);
- vb2_set_disabled_idx_mask(shared->flags);
}
/*
@@ -1004,9 +986,8 @@ static VbError_t recovery_ui(struct vb2_context *ctx)
VbExBeep(120, 400);
break;
}
- vb2_set_menu_items(VB_MENU_TO_DEV,
+ vb2_change_menu(VB_MENU_TO_DEV,
VB_TO_DEV_CANCEL);
- vb2_set_disabled_idx_mask(shared->flags);
vb2_draw_current_screen(ctx);
break;
case VB_BUTTON_POWER_SHORT_PRESS:
@@ -1029,11 +1010,7 @@ static VbError_t recovery_ui(struct vb2_context *ctx)
* we'll lose the previous state
*/
vb2_update_locale(ctx);
-
ret = vb2_update_menu(ctx);
-
- vb2_set_disabled_idx_mask(shared->
- flags);
vb2_draw_current_screen(ctx);
}