diff options
author | Joel Kitching <kitching@google.com> | 2020-05-11 18:08:06 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-20 13:21:06 +0000 |
commit | 8ea69a27252e62ed397d4d39dcc3a67cfaf3bd99 (patch) | |
tree | 0d90e16894cc456157793148609fd85f735c32cb | |
parent | c531000f851418520b6873f65c202d21f141eb84 (diff) | |
download | vboot-8ea69a27252e62ed397d4d39dcc3a67cfaf3bd99.tar.gz |
vboot/ui: standardize shutdown_required function signature
Stardardize to match that of a UI action function.
Also move power_button global into vb2_ui_context object.
BUG=b:146399181
TEST=make clean && make runtests
BRANCH=none
Change-Id: I59eb3b4dbd2f4a5630e8cceaef256ff93579c965
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2192864
Reviewed-by: Joel Kitching <kitching@chromium.org>
Tested-by: Joel Kitching <kitching@chromium.org>
Commit-Queue: Joel Kitching <kitching@chromium.org>
-rw-r--r-- | firmware/2lib/2ui.c | 34 | ||||
-rw-r--r-- | firmware/2lib/include/2ui.h | 9 | ||||
-rw-r--r-- | firmware/2lib/include/2ui_private.h | 8 | ||||
-rw-r--r-- | tests/vb2_ui_action_tests.c | 2 | ||||
-rw-r--r-- | tests/vb2_ui_tests.c | 2 | ||||
-rw-r--r-- | tests/vb2_ui_utility_tests.c | 65 |
6 files changed, 70 insertions, 50 deletions
diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c index a711bde8..e839f017 100644 --- a/firmware/2lib/2ui.c +++ b/firmware/2lib/2ui.c @@ -21,23 +21,22 @@ /*****************************************************************************/ /* Global variables */ -enum power_button_state power_button; int invalid_disk_last = -1; /*****************************************************************************/ /* Utility functions */ /** - * Checks GBB flags against VbExIsShutdownRequested() shutdown request to - * determine if a shutdown is required. + * Check GBB flags against VbExIsShutdownRequested() shutdown request, + * and check for VB_BUTTON_POWER_SHORT_PRESS key, to determine if a + * shutdown is required. * - * @param ctx Context pointer - * @param key Pressed key (VB_BUTTON_POWER_SHORT_PRESS) - * @return true if a shutdown is required, or false otherwise. + * @param ui UI context pointer + * @return VB2_REQUEST_SHUTDOWN if shutdown needed, or VB2_REQUEST_UI_CONTINUE */ -int shutdown_required(struct vb2_context *ctx, uint32_t key) +vb2_error_t check_shutdown_request(struct vb2_ui_context *ui) { - struct vb2_gbb_header *gbb = vb2_get_gbb(ctx); + struct vb2_gbb_header *gbb = vb2_get_gbb(ui->ctx); uint32_t shutdown_request = VbExIsShutdownRequested(); /* @@ -48,15 +47,15 @@ int shutdown_required(struct vb2_context *ctx, uint32_t key) */ if (shutdown_request & VB_SHUTDOWN_REQUEST_POWER_BUTTON) { shutdown_request &= ~VB_SHUTDOWN_REQUEST_POWER_BUTTON; - if (power_button == POWER_BUTTON_RELEASED) - power_button = POWER_BUTTON_PRESSED; + if (ui->power_button == VB2_POWER_BUTTON_RELEASED) + ui->power_button = VB2_POWER_BUTTON_PRESSED; } else { - if (power_button == POWER_BUTTON_PRESSED) + if (ui->power_button == VB2_POWER_BUTTON_PRESSED) shutdown_request |= VB_SHUTDOWN_REQUEST_POWER_BUTTON; - power_button = POWER_BUTTON_RELEASED; + ui->power_button = VB2_POWER_BUTTON_RELEASED; } - if (key == VB_BUTTON_POWER_SHORT_PRESS) + if (ui->key == VB_BUTTON_POWER_SHORT_PRESS) shutdown_request |= VB_SHUTDOWN_REQUEST_POWER_BUTTON; /* If desired, ignore shutdown request due to lid closure. */ @@ -70,7 +69,10 @@ int shutdown_required(struct vb2_context *ctx, uint32_t key) if (DETACHABLE) shutdown_request &= ~VB_SHUTDOWN_REQUEST_POWER_BUTTON; - return !!shutdown_request; + if (shutdown_request) + return VB2_REQUEST_SHUTDOWN; + + return VB2_REQUEST_UI_CONTINUE; } /*****************************************************************************/ @@ -278,8 +280,8 @@ vb2_error_t ui_loop(struct vb2_context *ctx, enum vb2_screen root_screen_id, ui.key_trusted = !!(key_flags & VB_KEY_FLAG_TRUSTED_KEYBOARD); /* Check for shutdown request. */ - if (shutdown_required(ctx, ui.key)) { - VB2_DEBUG("Shutdown required!\n"); + if (check_shutdown_request(&ui) == VB2_REQUEST_SHUTDOWN) { + VB2_DEBUG("Shutdown requested!\n"); return VB2_REQUEST_SHUTDOWN; } diff --git a/firmware/2lib/include/2ui.h b/firmware/2lib/include/2ui.h index 0043963a..847ec827 100644 --- a/firmware/2lib/include/2ui.h +++ b/firmware/2lib/include/2ui.h @@ -46,6 +46,12 @@ struct vb2_screen_state { uint32_t disabled_item_mask; }; +enum vb2_power_button { + VB2_POWER_BUTTON_HELD_SINCE_BOOT = 0, + VB2_POWER_BUTTON_RELEASED, + VB2_POWER_BUTTON_PRESSED, /* Must have been previously released */ +}; + struct vb2_ui_context { struct vb2_context *ctx; const struct vb2_screen_info *root_screen; @@ -58,6 +64,9 @@ struct vb2_ui_context { int disable_timer; uint64_t start_time; int beep_count; + + /* For check_shutdown_request. */ + enum vb2_power_button power_button; }; 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 2496555b..f7af05e1 100644 --- a/firmware/2lib/include/2ui_private.h +++ b/firmware/2lib/include/2ui_private.h @@ -10,13 +10,7 @@ #ifndef VBOOT_REFERENCE_2UI_PRIVATE_H_ #define VBOOT_REFERENCE_2UI_PRIVATE_H_ -enum power_button_state { - POWER_BUTTON_HELD_SINCE_BOOT = 0, - POWER_BUTTON_RELEASED, - POWER_BUTTON_PRESSED, /* Must have been previously released */ -}; -extern enum power_button_state power_button; -int shutdown_required(struct vb2_context *ctx, uint32_t key); +vb2_error_t check_shutdown_request(struct vb2_ui_context *ui); extern int invalid_disk_last; diff --git a/tests/vb2_ui_action_tests.c b/tests/vb2_ui_action_tests.c index 03b4eed7..0641d671 100644 --- a/tests/vb2_ui_action_tests.c +++ b/tests/vb2_ui_action_tests.c @@ -246,7 +246,7 @@ static void reset_common_data(void) vb2_nv_init(ctx); - /* For shutdown_required */ + /* For check_shutdown_request */ mock_calls_until_shutdown = 10; /* For try_recovery_action */ diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index a45fba85..4f36051c 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -187,7 +187,7 @@ static void reset_common_data(enum reset_type t) mock_displayed_count = 0; mock_displayed_i = 0; - /* For shutdown_required */ + /* For check_shutdown_request */ if (t == FOR_DEVELOPER) mock_calls_until_shutdown = 2000; /* Larger than 30s */ else diff --git a/tests/vb2_ui_utility_tests.c b/tests/vb2_ui_utility_tests.c index b616bcb8..a3952617 100644 --- a/tests/vb2_ui_utility_tests.c +++ b/tests/vb2_ui_utility_tests.c @@ -100,8 +100,7 @@ static void reset_common_data(void) vb2_nv_init(ctx); - /* For shutdown_required */ - power_button = POWER_BUTTON_HELD_SINCE_BOOT; + /* For check_shutdown_request */ mock_shutdown_request = MOCK_IGNORE; /* Mock ui_context based on mock screens */ @@ -115,6 +114,7 @@ static void reset_common_data(void) }, .locale_id = 0, .key = 0, + .power_button = VB2_POWER_BUTTON_HELD_SINCE_BOOT, }; mock_state = &mock_ui_context.state; @@ -149,55 +149,67 @@ const struct vb2_screen_info *vb2_get_screen_info(enum vb2_screen screen) } /* Tests */ -static void shutdown_required_tests(void) +static void check_shutdown_request_tests(void) { - VB2_DEBUG("Testing shutdown_required...\n"); + VB2_DEBUG("Testing check_shutdown_request...\n"); /* Release, press, hold, and release */ if (!DETACHABLE) { reset_common_data(); mock_shutdown_request = 0; - TEST_EQ(shutdown_required(ctx, 0), 0, + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, "release, press, hold, and release"); mock_shutdown_request = VB_SHUTDOWN_REQUEST_POWER_BUTTON; - TEST_EQ(shutdown_required(ctx, 0), 0, " press"); - TEST_EQ(shutdown_required(ctx, 0), 0, " hold"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, " press"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, " hold"); mock_shutdown_request = 0; - TEST_EQ(shutdown_required(ctx, 0), 1, " release"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, " release"); } /* Press is ignored because we may held since boot */ if (!DETACHABLE) { reset_common_data(); mock_shutdown_request = VB_SHUTDOWN_REQUEST_POWER_BUTTON; - TEST_EQ(shutdown_required(ctx, 0), 0, "press is ignored"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, "press is ignored"); } /* Power button short press from key */ if (!DETACHABLE) { reset_common_data(); mock_shutdown_request = 0; - TEST_EQ(shutdown_required(ctx, VB_BUTTON_POWER_SHORT_PRESS), 1, - "power button short press"); + mock_ui_context.key = VB_BUTTON_POWER_SHORT_PRESS; + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, "power button short press"); } /* Lid closure = shutdown request anyway */ reset_common_data(); mock_shutdown_request = VB_SHUTDOWN_REQUEST_LID_CLOSED; - TEST_EQ(shutdown_required(ctx, 0), 1, "lid closure"); - TEST_EQ(shutdown_required(ctx, 'A'), 1, " lidsw + random key"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, "lid closure"); + mock_ui_context.key = 'A'; + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, " lidsw + random key"); /* Lid ignored by GBB flags */ reset_common_data(); gbb.flags |= VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN; mock_shutdown_request = VB_SHUTDOWN_REQUEST_LID_CLOSED; - TEST_EQ(shutdown_required(ctx, 0), 0, "lid ignored"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, "lid ignored"); if (!DETACHABLE) { /* Power button works for non DETACHABLE */ mock_shutdown_request = VB_SHUTDOWN_REQUEST_LID_CLOSED | VB_SHUTDOWN_REQUEST_POWER_BUTTON; - TEST_EQ(shutdown_required(ctx, 0), 0, " lidsw + pwdsw"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, " lidsw + pwdsw"); mock_shutdown_request = 0; - TEST_EQ(shutdown_required(ctx, 0), 1, " pwdsw release"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, " pwdsw release"); } /* Lid ignored; power button short pressed */ @@ -205,7 +217,9 @@ static void shutdown_required_tests(void) reset_common_data(); gbb.flags |= VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN; mock_shutdown_request = VB_SHUTDOWN_REQUEST_LID_CLOSED; - TEST_EQ(shutdown_required(ctx, VB_BUTTON_POWER_SHORT_PRESS), 1, + mock_ui_context.key = VB_BUTTON_POWER_SHORT_PRESS; + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_SHUTDOWN, "lid ignored; power button short pressed"); } @@ -214,18 +228,19 @@ static void shutdown_required_tests(void) /* Flag pwdsw */ reset_common_data(); mock_shutdown_request = VB_SHUTDOWN_REQUEST_POWER_BUTTON; - TEST_EQ(shutdown_required(ctx, 0), 0, - "DETACHABLE: ignore pwdsw"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, "DETACHABLE: ignore pwdsw"); mock_shutdown_request = 0; - TEST_EQ(shutdown_required(ctx, 0), 0, - " ignore on release"); + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, " ignore on release"); /* Power button short press */ reset_common_data(); mock_shutdown_request = 0; - TEST_EQ(shutdown_required( - ctx, VB_BUTTON_POWER_SHORT_PRESS), 0, - "DETACHABLE: ignore power button short press"); + mock_ui_context.key = VB_BUTTON_POWER_SHORT_PRESS; + TEST_EQ(check_shutdown_request(&mock_ui_context), + VB2_REQUEST_UI_CONTINUE, + "DETACHABLE: ignore power button short press"); } VB2_DEBUG("...done.\n"); @@ -260,7 +275,7 @@ static void change_screen_tests(void) int main(void) { - shutdown_required_tests(); + check_shutdown_request_tests(); change_screen_tests(); return gTestSuccess ? 0 : 255; |