summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShelley Chen <shchen@chromium.org>2017-01-10 15:22:15 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-01-24 10:21:27 -0800
commit0d82853f3bf9b7871597e058cb4d9103fb70dd9e (patch)
treefd96fe3c5fff1279e6e7bfd3a6c6380c51dde7f3
parent4de0c43b1c72cceca820edafe13d9b64cc456214 (diff)
downloadvboot-0d82853f3bf9b7871597e058cb4d9103fb70dd9e.tar.gz
firmware: set fw screen default selection
BUG=chrome-os-partner:61275 BRANCH=None TEST=reboot and scroll through menus to make sure defaults to power off in all menus. Change-Id: I21e6c24c43a46e9e79001857c1dec9869a07d61a Signed-off-by: Shelley Chen <shchen@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/426409 Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--firmware/lib/vboot_ui_menu.c169
1 files changed, 95 insertions, 74 deletions
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index 4c0eab1c..b5e786a7 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -222,8 +222,9 @@ typedef enum _VB_LANGUAGES_MENU {
static VB_MENU current_menu = VB_MENU_DEV_WARNING;
static VB_MENU prev_menu = VB_MENU_DEV_WARNING;
-static int current_menu_idx = 0;
+static int current_menu_idx = VB_WARN_POWER_OFF;
static int selected = 0;
+static uint32_t default_boot = VB2_DEV_DEFAULT_BOOT_DISK;
// TODO: add in consts
static char *dev_warning_menu[] = {
@@ -347,122 +348,145 @@ VbError_t vb2_print_current_menu()
return VbExDisplayText(0,50,m_str);
}
+VbError_t vb2_set_menu_items(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;
+}
+
// This updates current_menu and current_menu_idx,
// (as necessary)
// which are used to determine what to do.
VbError_t vb2_update_menu()
{
VbError_t ret = VBERROR_SUCCESS;
+ VB_MENU next_menu_idx;
switch(current_menu) {
case VB_MENU_DEV_WARNING:
switch(current_menu_idx) {
case VB_WARN_OPTIONS:
- // select dev menu
- prev_menu = current_menu;
- current_menu = VB_MENU_DEV;
- current_menu_idx = 0;
- selected = 0;
+ switch(default_boot) {
+ case VBNV_DEV_DEFAULT_BOOT_DISK:
+ next_menu_idx = VB_DEV_DISK;
+ break;
+ case VBNV_DEV_DEFAULT_BOOT_USB:
+ next_menu_idx = VB_DEV_USB;
+ break;
+ case VBNV_DEV_DEFAULT_BOOT_LEGACY:
+ next_menu_idx = VB_DEV_LEGACY;
+ break;
+ }
+
+ /*
+ * 1. select dev menu
+ * 2. default to dev boot device
+ */
+ vb2_set_menu_items(VB_MENU_DEV, next_menu_idx);
break;
case VB_WARN_DBG_INFO:
- // show debug info
+ /* show debug info */
break;
case VB_WARN_ENABLE_VER:
- // enable boot verification
- prev_menu = current_menu;
- current_menu = VB_MENU_TO_NORM;
- current_menu_idx = 0;
- selected = 0;
+ /*
+ * 1. enable boot verification
+ * 2. default to the power off option
+ */
+ vb2_set_menu_items(VB_MENU_TO_NORM,
+ VB_TO_NORM_POWER_OFF);
break;
case VB_WARN_POWER_OFF:
- // power off machine
+ /* power off machine */
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_WARN_LANGUAGE:
- // Languages
- // we'll have to figure out how to display this
- prev_menu = current_menu;
- current_menu = VB_MENU_LANGUAGES;
- current_menu_idx = 0;
- selected = 0;
+ /* Languages */
+ // TODO: we'll have to figure out how to display this
+ vb2_set_menu_items(VB_MENU_LANGUAGES,
+ VB_LANGUAGES_EN_US);
break;
default:
- // invalid menu item. Don't update anything.
+ /* invalid menu item. Don't update anything. */
break;
}
break;
case VB_MENU_DEV:
switch(current_menu_idx) {
case VB_DEV_NETWORK:
- // boot network image
+ /* boot network image */
break;
case VB_DEV_LEGACY:
- // boot legacy BIOS
+ /* boot legacy BIOS */
break;
case VB_DEV_USB:
- // book USB image
+ /* boot USB image */
break;
case VB_DEV_DISK:
- // boot developer image
+ /* boot developer image */
break;
case VB_DEV_CANCEL:
- // cancel (go back to developer warning menu)
- prev_menu = current_menu;
- current_menu = VB_MENU_DEV_WARNING;
- current_menu_idx = 0;
- selected = 0;
+ /*
+ * 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);
break;
case VB_DEV_POWER_OFF:
- // power off
+ /* power off */
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_DEV_LANGUAGE:
- // Language
- prev_menu = current_menu;
- current_menu = VB_MENU_LANGUAGES;
- current_menu_idx = 0;
- selected = 0;
+ /* Language */
+ vb2_set_menu_items(VB_MENU_LANGUAGES,
+ VB_LANGUAGES_EN_US);
break;
default:
- // invalid menu item. don't update anything.
+ /* invalid menu item. don't update anything. */
break;
}
break;
case VB_MENU_TO_NORM:
switch(current_menu_idx) {
case VB_TO_NORM_CONFIRM:
- // confirm enabling verified boot
+ /* confirm enabling verified boot */
break;
case VB_TO_NORM_CANCEL:
- // cancel (go back to developer warning menu)
- prev_menu = current_menu;
- current_menu = VB_MENU_DEV_WARNING;
- current_menu_idx = 0;
- selected = 0;
+ /*
+ * 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);
break;
case VB_TO_NORM_POWER_OFF:
- // power off
+ /* power off */
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_TO_NORM_LANGUAGE:
- // Language
- prev_menu = current_menu;
- current_menu = VB_MENU_LANGUAGES;
- current_menu_idx = 0;
- selected = 0;
+ /* Language */
+ vb2_set_menu_items(VB_MENU_LANGUAGES,
+ VB_LANGUAGES_EN_US);
break;
default:
- // invalid menu item. don't update anything
+ /* invalid menu item. don't update anything */
break;
}
break;
case VB_MENU_RECOVERY:
switch(current_menu_idx) {
case VB_RECOVERY_TO_DEV:
- // switch to TO_DEV menu
- prev_menu = current_menu;
- current_menu = VB_MENU_TO_DEV;
- current_menu_idx = 0;
- selected = 0;
+ /*
+ * 1. switch to TO_DEV menu
+ * 2. default to power off option
+ */
+ vb2_set_menu_items(VB_MENU_TO_DEV,
+ VB_TO_DEV_POWER_OFF);
break;
case VB_RECOVERY_DBG_INFO:
break;
@@ -470,47 +494,44 @@ VbError_t vb2_update_menu()
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_RECOVERY_LANGUAGE:
- prev_menu = current_menu;
- current_menu = VB_MENU_LANGUAGES;
- current_menu_idx = 0;
- selected = 0;
+ vb2_set_menu_items(VB_MENU_LANGUAGES,
+ VB_LANGUAGES_EN_US);
break;
default:
- // invalid menu item. don't update anything
+ /* invalid menu item. don't update anything */
break;
}
break;
case VB_MENU_TO_DEV:
switch(current_menu_idx) {
case VB_TO_DEV_CONFIRM:
- // confirm enabling dev mode
+ /* confirm enabling dev mode */
break;
case VB_TO_DEV_CANCEL:
- prev_menu = current_menu;
- current_menu = VB_MENU_RECOVERY;
- current_menu_idx = 0;
- selected = 0;
+ vb2_set_menu_items(VB_MENU_RECOVERY,
+ VB_RECOVERY_POWER_OFF);
break;
case VB_TO_DEV_POWER_OFF:
ret = VBERROR_SHUTDOWN_REQUESTED;
break;
case VB_TO_DEV_LANGUAGE:
- prev_menu = current_menu;
- current_menu = VB_MENU_LANGUAGES;
- current_menu_idx = 0;
- selected = 0;
+ vb2_set_menu_items(VB_MENU_LANGUAGES,
+ VB_LANGUAGES_EN_US);
break;
default:
- // invalid menu item. don't update anything.
+ /* invalid menu item. don't update anything. */
break;
}
break;
case VB_MENU_LANGUAGES:
switch(current_menu_idx) {
default:
- // assume that we select a language.
- // go to previous menu.
- // assume that there will be come action here.
+ /*
+ * Assume that we selected a language.
+ * Go to previous menu.
+ * Purposely bypassing vb2_set_menu_items()
+ * here because need to do in different order.
+ */
current_menu = prev_menu;
current_menu_idx = 0;
prev_menu = VB_MENU_LANGUAGES;
@@ -546,7 +567,7 @@ VbError_t vb2_developer_menu(struct vb2_context *ctx, VbCommonParams *cparams)
uint32_t allow_legacy = vb2_nv_get(ctx, VB2_NV_DEV_BOOT_LEGACY);
/* Check if the default is to boot using disk, usb, or legacy */
- uint32_t default_boot = vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT);
+ default_boot = vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT);
if(default_boot == VBNV_DEV_DEFAULT_BOOT_USB)
use_usb = 1;
@@ -845,7 +866,7 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
// initialize menu to recovery menu.
current_menu = VB_MENU_RECOVERY;
prev_menu = VB_MENU_RECOVERY;
- current_menu_idx = 0;
+ current_menu_idx = VB_RECOVERY_POWER_OFF;
while (1) {
VB2_DEBUG("VbBootRecoveryMenu() attempting to load kernel2\n");