firmware: calling menu ui when using detachables

BUG=chrome-os-partner:61275
BRANCH=None
TEST=compile depthcharge with
     inflags=VB_SALK_INFLAGS_ENABLE_DETACHABLE_UI and run.

Change-Id: I4c2351feef51bbf88fefd37986de6f853cd1942e
Signed-off-by: Shelley Chen <shchen@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/424091
Reviewed-by: Randall Spangler <rspangler@chromium.org>
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index f127ab8..d57f98d 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -339,6 +339,8 @@
 	void *kernel_buffer;
 	/* Size of kernel buffer in bytes */
 	uint32_t kernel_buffer_size;
+	/* input flags.  Currently used for detachables */
+	uint32_t inflags;
 
 	/*
 	 * Outputs from VbSelectAndLoadKernel(); valid only if it returns
@@ -354,7 +356,7 @@
 	uint32_t bootloader_size;
 	/* UniquePartitionGuid for boot partition */
 	uint8_t partition_guid[16];
-	/* Flags passed in by signer */
+	/* Flags set by signer */
 	uint32_t flags;
 	/*
 	 * TODO: in H2C, all that pretty much just gets passed to the
@@ -364,6 +366,11 @@
 	 */
 } VbSelectAndLoadKernelParams;
 
+/* Flag to indicate using detachable menu ui (arrow up/down+power)
+ * instead of traditional FW screens with ctrl+D, ctrl+U, etc.
+ */
+#define VB_SALK_INFLAGS_ENABLE_DETACHABLE_UI (1 << 0)
+
 /**
  * Select and loads the kernel.
  *
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index f2f3966..53c08b3 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -427,11 +427,17 @@
 	/* Select boot path */
 	if (shared->recovery_reason) {
 		/* Recovery boot.  This has UI. */
-		retval = VbBootRecovery(&ctx, cparams);
+	        if (kparams->inflags & VB_SALK_INFLAGS_ENABLE_DETACHABLE_UI)
+	            retval = VbBootRecoveryMenu(&ctx, cparams);
+	        else
+		    retval = VbBootRecovery(&ctx, cparams);
 		VbExEcEnteringMode(0, VB_EC_RECOVERY);
 	} else if (shared->flags & VBSD_BOOT_DEV_SWITCH_ON) {
 		/* Developer boot.  This has UI. */
-		retval = VbBootDeveloper(&ctx, cparams);
+	        if (kparams->inflags & VB_SALK_INFLAGS_ENABLE_DETACHABLE_UI)
+		    retval = VbBootDeveloperMenu(&ctx, cparams);
+		else
+		    retval = VbBootDeveloper(&ctx, cparams);
 		VbExEcEnteringMode(0, VB_EC_DEVELOPER);
 	} else {
 		/* Normal boot */