diff options
author | Joel Kitching <kitching@google.com> | 2020-05-20 15:58:57 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-22 10:39:12 +0000 |
commit | 5c79be367927349eb92e7854e2e6396ccb515f9d (patch) | |
tree | cae59686476c37aab39860e76f9e649dd4cadd76 /firmware | |
parent | b3327d3e7d346ea978938c86cabfbac9b2db6384 (diff) | |
download | vboot-5c79be367927349eb92e7854e2e6396ccb515f9d.tar.gz |
vboot/ui: move invalid_disk_last into vb2_context_ui
BUG=b:146399181
TEST=make clean && make runtests
BRANCH=none
Change-Id: I055499580325a43dcba3e1d037bac60deff30af8
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2210015
Commit-Queue: Joel Kitching <kitching@chromium.org>
Tested-by: Joel Kitching <kitching@chromium.org>
Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/2lib/2ui.c | 28 | ||||
-rw-r--r-- | firmware/2lib/include/2ui.h | 9 | ||||
-rw-r--r-- | firmware/2lib/include/2ui_private.h | 2 |
3 files changed, 20 insertions, 19 deletions
diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c index e839f017..adf07867 100644 --- a/firmware/2lib/2ui.c +++ b/firmware/2lib/2ui.c @@ -19,11 +19,6 @@ #define KEY_DELAY_MS 20 /* Delay between key scans in UI loops */ /*****************************************************************************/ -/* Global variables */ - -int invalid_disk_last = -1; - -/*****************************************************************************/ /* Utility functions */ /** @@ -217,8 +212,14 @@ vb2_error_t (*input_action_lookup(int key))(struct vb2_ui_context *ui) vb2_error_t vb2_ui_change_screen(struct vb2_ui_context *ui, enum vb2_screen id) { - const struct vb2_screen_info *new_screen_info = vb2_get_screen_info(id); + const struct vb2_screen_info *new_screen_info; + if (ui->state.screen && ui->state.screen->id == id) { + VB2_DEBUG("WARNING: Already on screen %#x; ignoring\n", id); + return VB2_REQUEST_UI_CONTINUE; + } + + new_screen_info = vb2_get_screen_info(id); if (new_screen_info == NULL) { VB2_DEBUG("ERROR: Screen entry %#x not found; ignoring\n", id); return VB2_REQUEST_UI_CONTINUE; @@ -340,19 +341,18 @@ vb2_error_t vb2_manual_recovery_menu(struct vb2_context *ctx) vb2_error_t try_recovery_action(struct vb2_ui_context *ui) { - int invalid_disk; + /* See if we have a recovery kernel available yet. */ vb2_error_t rv = VbTryLoadKernel(ui->ctx, VB_DISK_FLAG_REMOVABLE); - if (rv == VB2_SUCCESS) return rv; /* If disk validity state changed, switch to appropriate screen. */ - invalid_disk = rv != VB2_ERROR_LK_NO_DISK_FOUND; - if (invalid_disk_last != invalid_disk) { - invalid_disk_last = invalid_disk; - return vb2_ui_change_screen(ui, invalid_disk ? - VB2_SCREEN_RECOVERY_INVALID : - VB2_SCREEN_RECOVERY_SELECT); + if (ui->recovery_rv != rv) { + ui->recovery_rv = rv; + return vb2_ui_change_screen(ui, + rv == VB2_ERROR_LK_NO_DISK_FOUND ? + VB2_SCREEN_RECOVERY_SELECT : + VB2_SCREEN_RECOVERY_INVALID); } return VB2_REQUEST_UI_CONTINUE; diff --git a/firmware/2lib/include/2ui.h b/firmware/2lib/include/2ui.h index 847ec827..0d4df42f 100644 --- a/firmware/2lib/include/2ui.h +++ b/firmware/2lib/include/2ui.h @@ -60,13 +60,16 @@ struct vb2_ui_context { uint32_t key; int key_trusted; - /* For developer mode screen. */ + /* For check_shutdown_request. */ + enum vb2_power_button power_button; + + /* For developer mode. */ int disable_timer; uint64_t start_time; int beep_count; - /* For check_shutdown_request. */ - enum vb2_power_button power_button; + /* For manual recovery. */ + vb2_error_t recovery_rv; }; vb2_error_t vb2_ui_change_screen(struct vb2_ui_context *ui, enum vb2_screen id); diff --git a/firmware/2lib/include/2ui_private.h b/firmware/2lib/include/2ui_private.h index f7af05e1..891c0414 100644 --- a/firmware/2lib/include/2ui_private.h +++ b/firmware/2lib/include/2ui_private.h @@ -12,8 +12,6 @@ vb2_error_t check_shutdown_request(struct vb2_ui_context *ui); -extern int invalid_disk_last; - struct input_action { int key; vb2_error_t (*action)(struct vb2_ui_context *ui); |