vboot/ui: pass timer_disabled to vb2ex_display_ui()

Add an argument 'timer_disabled' to vb2ex_display_ui(), which will be
used when drawing dev mode screen to show the appropriate screen
descriptions.

BRANCH=none
BUG=b:146399181, b:157871585
TEST=make runtests
TEST=emerge-puff depthcharge

Cq-Depend: chromium:2236550
Change-Id: I48b46838f482bce612106b840476f5f941cc1166
Signed-off-by: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2241492
Reviewed-by: Joel Kitching <kitching@chromium.org>
diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c
index 81243ac..9147862 100644
--- a/firmware/2lib/2ui.c
+++ b/firmware/2lib/2ui.c
@@ -285,6 +285,7 @@
 {
 	struct vb2_ui_context ui;
 	struct vb2_screen_state prev_state;
+	int prev_disable_timer;
 	enum vb2_ui_error prev_error_code;
 	const struct vb2_menu *menu;
 	const struct vb2_screen_info *root_info;
@@ -301,12 +302,15 @@
 	if (rv != VB2_REQUEST_UI_CONTINUE)
 		return rv;
 	memset(&prev_state, 0, sizeof(prev_state));
+	prev_disable_timer = 0;
 	prev_error_code = VB2_UI_ERROR_NONE;
 
 	while (1) {
 		/* Draw if there are state changes. */
 		if (memcmp(&prev_state, ui.state, sizeof(*ui.state)) ||
-		    /* we want to redraw/beep on a transition */
+		    /* We want to redraw when timer is disabled. */
+		    prev_disable_timer != ui.disable_timer ||
+		    /* We want to redraw/beep on a transition. */
 		    prev_error_code != ui.error_code) {
 
 			menu = get_menu(&ui);
@@ -318,6 +322,7 @@
 			vb2ex_display_ui(ui.state->screen->id, ui.locale_id,
 					 ui.state->selected_item,
 					 ui.state->disabled_item_mask,
+					 ui.disable_timer,
 					 ui.error_code);
 			/*
 			 * Only beep if we're transitioning from no
@@ -329,6 +334,7 @@
 
 			/* Update prev variables. */
 			memcpy(&prev_state, ui.state, sizeof(*ui.state));
+			prev_disable_timer = ui.disable_timer;
 			prev_error_code = ui.error_code;
 		}
 
diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h
index 69fd145..0a023c6 100644
--- a/firmware/2lib/include/2api.h
+++ b/firmware/2lib/include/2api.h
@@ -1256,6 +1256,8 @@
  *				doesn't have a menu, this value will be ignored.
  * @param disabled_item_mask	Mask for disabled menu items. Bit (1 << idx)
  *				indicates whether item 'idx' is disabled.
+ * @param timer_disabled	Whether timer is disabled or not. Some screen
+ *				descriptions will depend on this value.
  * @param error_code		Error code if an error occurred.
  * @return VB2_SUCCESS, or error code on error.
  */
@@ -1263,6 +1265,7 @@
 			     uint32_t locale_id,
 			     uint32_t selected_item,
 			     uint32_t disabled_item_mask,
+			     int timer_disabled,
 			     enum vb2_ui_error error_code);
 
 /**
diff --git a/tests/vb2_ui_action_tests.c b/tests/vb2_ui_action_tests.c
index b32bafe..fb110b4 100644
--- a/tests/vb2_ui_action_tests.c
+++ b/tests/vb2_ui_action_tests.c
@@ -386,6 +386,7 @@
 			     uint32_t locale_id,
 			     uint32_t selected_item,
 			     uint32_t disabled_item_mask,
+			     int timer_disabled,
 			     enum vb2_ui_error error_code)
 {
 	struct display_call displayed = (struct display_call){
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c
index 47c7046..516ec6f 100644
--- a/tests/vb2_ui_tests.c
+++ b/tests/vb2_ui_tests.c
@@ -326,6 +326,7 @@
 			     uint32_t locale_id,
 			     uint32_t selected_item,
 			     uint32_t disabled_item_mask,
+			     int timer_disabled,
 			     enum vb2_ui_error error_code)
 {
 	struct display_call displayed = (struct display_call){