diff options
author | Julius Werner <jwerner@chromium.org> | 2018-01-24 19:47:33 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-01-31 18:00:54 -0800 |
commit | 6ab5fce30c09ce08d2aec113b91362bee34476ca (patch) | |
tree | 1734fc0fdca54f1ed3bb021881868215adf25c6c /firmware/lib | |
parent | 7097e55a8d932d43f6bee6a3c538d21b9370dad5 (diff) | |
download | vboot-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>
Diffstat (limited to 'firmware/lib')
-rw-r--r-- | firmware/lib/vboot_ui_menu.c | 93 |
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); } |