summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2020-05-11 18:08:06 +0800
committerCommit Bot <commit-bot@chromium.org>2020-05-20 13:21:06 +0000
commit8ea69a27252e62ed397d4d39dcc3a67cfaf3bd99 (patch)
tree0d90e16894cc456157793148609fd85f735c32cb
parentc531000f851418520b6873f65c202d21f141eb84 (diff)
downloadvboot-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.c34
-rw-r--r--firmware/2lib/include/2ui.h9
-rw-r--r--firmware/2lib/include/2ui_private.h8
-rw-r--r--tests/vb2_ui_action_tests.c2
-rw-r--r--tests/vb2_ui_tests.c2
-rw-r--r--tests/vb2_ui_utility_tests.c65
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;