vboot: Add recovery select screen to vb2_screen

Add VB2_SCREEN_RECOVERY_SELECT to enum vb2_screen for the recovery
select screen.

Also add arguments 'selected_item' and 'disabled_item_mask' to
vb2ex_display_ui() for menu items, and rename argument 'locale' to
'locale_id'.

BRANCH=none
BUG=b:146399181
TEST=USE="menu_ui" emerge-nami depthcharge

Cq-Depend: chromium:2124025
Change-Id: Ifff67ded8196288cdb3c1558c64c09b7ffc5011e
Signed-off-by: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2138876
Reviewed-by: Joel Kitching <kitching@chromium.org>
diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c
index 25037c9..5b38e08 100644
--- a/firmware/2lib/2ui.c
+++ b/firmware/2lib/2ui.c
@@ -22,7 +22,7 @@
 	enum vb2_dev_default_boot default_boot;
 
 	/* TODO(roccochen): Init, wait for user, and boot. */
-	vb2ex_display_ui(VB2_SCREEN_BLANK, 0);
+	vb2ex_display_ui(VB2_SCREEN_BLANK, 0, 0, 0);
 
 	/* If dev mode was disabled, loop forever. */
 	if (!vb2_dev_boot_allowed(ctx))
@@ -48,7 +48,7 @@
 vb2_error_t vb2_broken_recovery_menu(struct vb2_context *ctx)
 {
 	/* TODO(roccochen): Init and wait for user to reset or shutdown. */
-	vb2ex_display_ui(VB2_SCREEN_BLANK, 0);
+	vb2ex_display_ui(VB2_SCREEN_BLANK, 0, 0, 0);
 
 	while (1);
 
@@ -58,7 +58,7 @@
 vb2_error_t vb2_manual_recovery_menu(struct vb2_context *ctx)
 {
 	/* TODO(roccochen): Init and wait for user. */
-	vb2ex_display_ui(VB2_SCREEN_BLANK, 0);
+	vb2ex_display_ui(VB2_SCREEN_BLANK, 0 ,0, 0);
 
 	while (1);
 
diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h
index d75b9e4..07a5718 100644
--- a/firmware/2lib/include/2api.h
+++ b/firmware/2lib/include/2api.h
@@ -1172,16 +1172,25 @@
 	/* Blank screen */
 	VB2_SCREEN_BLANK			= 0x0,
 	/* Wait screen for EC sync and AUXFW sync */
-	VB2_SCREEN_FIRMWARE_SYNC		= 0x10,
+	VB2_SCREEN_FIRMWARE_SYNC		= 0x100,
+	/* First recovery screen to select recovering from disk or phone */
+	VB2_SCREEN_RECOVERY_SELECT		= 0x200,
 };
 
 /**
  * Display UI screen.
  *
  * @param screen		Screen to display.
- * @param locale		Locale.
+ * @param selected_item		Index of the selected menu item. If the screen
+ *				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 locale_id		Id of current locale.
  * @return VB2_SUCCESS, or error code on error.
  */
-vb2_error_t vb2ex_display_ui(enum vb2_screen screen, uint32_t locale);
+vb2_error_t vb2ex_display_ui(enum vb2_screen screen,
+			     uint32_t locale_id,
+			     uint32_t selected_item,
+			     uint32_t disabled_item_mask);
 
 #endif  /* VBOOT_REFERENCE_2API_H_ */
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c
index eb7de29..bf9124b 100644
--- a/tests/vb2_ui_tests.c
+++ b/tests/vb2_ui_tests.c
@@ -116,10 +116,13 @@
 	return mock_vbtlk_retval[mock_vbtlk_count++];
 }
 
-vb2_error_t vb2ex_display_ui(enum vb2_screen screen, uint32_t locale)
+vb2_error_t vb2ex_display_ui(enum vb2_screen screen,
+			     uint32_t locale_id,
+			     uint32_t selected_item,
+			     uint32_t disabled_item_mask)
 {
-	VB2_DEBUG("screens %d: screen = %#x, locale = %u\n",
-		  mock_screens_count, screen, locale);
+	VB2_DEBUG("screens %d: screen = %#x, locale_id = %u\n",
+		  mock_screens_count, screen, locale_id);
 
 	if (mock_screens_count >= ARRAY_SIZE(mock_screens_displayed) ||
 	    mock_screens_count >= ARRAY_SIZE(mock_locales_displayed)) {
@@ -129,7 +132,8 @@
 	}
 
 	mock_screens_displayed[mock_screens_count] = screen;
-	mock_locales_displayed[mock_screens_count] = locale;
+	mock_locales_displayed[mock_screens_count] = locale_id;
+	/* TODO(roccochen): handle the rest of two arguments */
 	mock_screens_count++;
 
 	return VB2_SUCCESS;