xref: /aosp_15_r20/external/vboot_reference/firmware/2lib/include/2info.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2022 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  *
5*8617a60dSAndroid Build Coastguard Worker  * Helper functions to retrieve vboot firmware information.
6*8617a60dSAndroid Build Coastguard Worker  */
7*8617a60dSAndroid Build Coastguard Worker 
8*8617a60dSAndroid Build Coastguard Worker #ifndef VBOOT_REFERENCE_2INFO_H_
9*8617a60dSAndroid Build Coastguard Worker #define VBOOT_REFERENCE_2INFO_H_
10*8617a60dSAndroid Build Coastguard Worker 
11*8617a60dSAndroid Build Coastguard Worker /* Boot mode decided in vb2api_fw_phase1.
12*8617a60dSAndroid Build Coastguard Worker  *
13*8617a60dSAndroid Build Coastguard Worker  * Boot mode is a constant set by verified boot and may be read (but should not
14*8617a60dSAndroid Build Coastguard Worker  * be set or cleared) by the caller.
15*8617a60dSAndroid Build Coastguard Worker  * The boot modes are mutually exclusive. If a boot fulfill more than one
16*8617a60dSAndroid Build Coastguard Worker  * constraints of the listing boot modes, it will be set to the most important
17*8617a60dSAndroid Build Coastguard Worker  * one. The priority is the same as the listing order.
18*8617a60dSAndroid Build Coastguard Worker  */
19*8617a60dSAndroid Build Coastguard Worker enum vb2_boot_mode {
20*8617a60dSAndroid Build Coastguard Worker 	/* Undefined, The boot mode is not set. */
21*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_UNDEFINED = 0,
22*8617a60dSAndroid Build Coastguard Worker 
23*8617a60dSAndroid Build Coastguard Worker 	/*
24*8617a60dSAndroid Build Coastguard Worker 	 * Manual recovery boot, regardless of dev mode state.
25*8617a60dSAndroid Build Coastguard Worker 	 *
26*8617a60dSAndroid Build Coastguard Worker 	 * VB2_CONTEXT_RECOVERY_MODE is set and the recovery is physically
27*8617a60dSAndroid Build Coastguard Worker 	 * requested (a.k.a. Manual recovery).  All other recovery requests
28*8617a60dSAndroid Build Coastguard Worker 	 * including manual recovery requested by a (compromised) host will end
29*8617a60dSAndroid Build Coastguard Worker 	 * up with a broken screen.
30*8617a60dSAndroid Build Coastguard Worker 	 */
31*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_MANUAL_RECOVERY = 1,
32*8617a60dSAndroid Build Coastguard Worker 
33*8617a60dSAndroid Build Coastguard Worker 	/*
34*8617a60dSAndroid Build Coastguard Worker 	 * Broken screen.
35*8617a60dSAndroid Build Coastguard Worker 	 *
36*8617a60dSAndroid Build Coastguard Worker 	 * If a recovery boot is not a manual recovery (a.k.a. not requested
37*8617a60dSAndroid Build Coastguard Worker 	 * physically), the recovery is not allowed and will end up with
38*8617a60dSAndroid Build Coastguard Worker 	 * broken screen.
39*8617a60dSAndroid Build Coastguard Worker 	 */
40*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_BROKEN_SCREEN = 2,
41*8617a60dSAndroid Build Coastguard Worker 
42*8617a60dSAndroid Build Coastguard Worker 	/*
43*8617a60dSAndroid Build Coastguard Worker 	 * Diagnostic boot.
44*8617a60dSAndroid Build Coastguard Worker 	 *
45*8617a60dSAndroid Build Coastguard Worker 	 * If diagnostic boot is enabled (a.k.a. vb2api_diagnostic_ui_enabled)
46*8617a60dSAndroid Build Coastguard Worker 	 * and the nvdata contains VB2_NV_DIAG_REQUEST from previous boot, it
47*8617a60dSAndroid Build Coastguard Worker 	 * will boot to diagnostic mode.
48*8617a60dSAndroid Build Coastguard Worker 	 */
49*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_DIAGNOSTICS = 3,
50*8617a60dSAndroid Build Coastguard Worker 
51*8617a60dSAndroid Build Coastguard Worker 	/*
52*8617a60dSAndroid Build Coastguard Worker 	 * Developer boot: self-signed kernel okay.
53*8617a60dSAndroid Build Coastguard Worker 	 *
54*8617a60dSAndroid Build Coastguard Worker 	 * The developer mode switch is set (a.k.a. VB2_CONTEXT_DEVELOPER_MODE)
55*8617a60dSAndroid Build Coastguard Worker 	 * and we are in the developer boot mode.
56*8617a60dSAndroid Build Coastguard Worker 	 */
57*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_DEVELOPER = 4,
58*8617a60dSAndroid Build Coastguard Worker 
59*8617a60dSAndroid Build Coastguard Worker 	/* Normal boot: kernel must be verified. */
60*8617a60dSAndroid Build Coastguard Worker 	VB2_BOOT_MODE_NORMAL = 5,
61*8617a60dSAndroid Build Coastguard Worker };
62*8617a60dSAndroid Build Coastguard Worker 
63*8617a60dSAndroid Build Coastguard Worker /* Firmware slot codes */
64*8617a60dSAndroid Build Coastguard Worker enum vb2_fw_slot {
65*8617a60dSAndroid Build Coastguard Worker 	/* Slot A */
66*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_SLOT_A = 0,
67*8617a60dSAndroid Build Coastguard Worker 
68*8617a60dSAndroid Build Coastguard Worker 	/* Slot B */
69*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_SLOT_B = 1,
70*8617a60dSAndroid Build Coastguard Worker };
71*8617a60dSAndroid Build Coastguard Worker 
72*8617a60dSAndroid Build Coastguard Worker /* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
73*8617a60dSAndroid Build Coastguard Worker enum vb2_fw_result {
74*8617a60dSAndroid Build Coastguard Worker 	/* Unknown */
75*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_RESULT_UNKNOWN = 0,
76*8617a60dSAndroid Build Coastguard Worker 
77*8617a60dSAndroid Build Coastguard Worker 	/* Trying a new slot, but haven't reached success/failure */
78*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_RESULT_TRYING = 1,
79*8617a60dSAndroid Build Coastguard Worker 
80*8617a60dSAndroid Build Coastguard Worker 	/* Successfully booted to the OS */
81*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_RESULT_SUCCESS = 2,
82*8617a60dSAndroid Build Coastguard Worker 
83*8617a60dSAndroid Build Coastguard Worker 	/* Known failure */
84*8617a60dSAndroid Build Coastguard Worker 	VB2_FW_RESULT_FAILURE = 3,
85*8617a60dSAndroid Build Coastguard Worker };
86*8617a60dSAndroid Build Coastguard Worker 
87*8617a60dSAndroid Build Coastguard Worker /**
88*8617a60dSAndroid Build Coastguard Worker  * Convert Firmware Boot Mode into supported string
89*8617a60dSAndroid Build Coastguard Worker  *
90*8617a60dSAndroid Build Coastguard Worker  * @return char*   firmware boot mode string
91*8617a60dSAndroid Build Coastguard Worker  */
vb2_boot_mode_string(uint8_t boot_mode)92*8617a60dSAndroid Build Coastguard Worker static inline const char *vb2_boot_mode_string(uint8_t boot_mode)
93*8617a60dSAndroid Build Coastguard Worker {
94*8617a60dSAndroid Build Coastguard Worker 	switch ((enum vb2_boot_mode)boot_mode) {
95*8617a60dSAndroid Build Coastguard Worker 	/* 0x00 */ case VB2_BOOT_MODE_UNDEFINED:
96*8617a60dSAndroid Build Coastguard Worker 		return "Undefined";
97*8617a60dSAndroid Build Coastguard Worker 	/* 0x01 */ case VB2_BOOT_MODE_MANUAL_RECOVERY:
98*8617a60dSAndroid Build Coastguard Worker 		return "Manual recovery";
99*8617a60dSAndroid Build Coastguard Worker 	/* 0x02 */ case VB2_BOOT_MODE_BROKEN_SCREEN:
100*8617a60dSAndroid Build Coastguard Worker 		return "Broken screen";
101*8617a60dSAndroid Build Coastguard Worker 	/* 0x03 */ case VB2_BOOT_MODE_DIAGNOSTICS:
102*8617a60dSAndroid Build Coastguard Worker 		return "Diagnostic";
103*8617a60dSAndroid Build Coastguard Worker 	/* 0x04 */ case VB2_BOOT_MODE_DEVELOPER:
104*8617a60dSAndroid Build Coastguard Worker 		return "Developer";
105*8617a60dSAndroid Build Coastguard Worker 	/* 0x05 */ case VB2_BOOT_MODE_NORMAL:
106*8617a60dSAndroid Build Coastguard Worker 		return "Secure";
107*8617a60dSAndroid Build Coastguard Worker 	}
108*8617a60dSAndroid Build Coastguard Worker 
109*8617a60dSAndroid Build Coastguard Worker 	return "Unknown";
110*8617a60dSAndroid Build Coastguard Worker }
111*8617a60dSAndroid Build Coastguard Worker 
112*8617a60dSAndroid Build Coastguard Worker /**
113*8617a60dSAndroid Build Coastguard Worker  * Convert Firmware Slot result into supported string
114*8617a60dSAndroid Build Coastguard Worker  *
115*8617a60dSAndroid Build Coastguard Worker  * @return char*   firmware slot result string
116*8617a60dSAndroid Build Coastguard Worker  */
vb2_result_string(uint8_t result)117*8617a60dSAndroid Build Coastguard Worker static inline const char *vb2_result_string(uint8_t result)
118*8617a60dSAndroid Build Coastguard Worker {
119*8617a60dSAndroid Build Coastguard Worker 	switch ((enum vb2_fw_result)result) {
120*8617a60dSAndroid Build Coastguard Worker 	/* 0x00 */ case VB2_FW_RESULT_UNKNOWN:
121*8617a60dSAndroid Build Coastguard Worker 		return "Unknown";
122*8617a60dSAndroid Build Coastguard Worker 	/* 0x01 */ case VB2_FW_RESULT_TRYING:
123*8617a60dSAndroid Build Coastguard Worker 		return "Trying";
124*8617a60dSAndroid Build Coastguard Worker 	/* 0x02 */ case VB2_FW_RESULT_SUCCESS:
125*8617a60dSAndroid Build Coastguard Worker 		return "Success";
126*8617a60dSAndroid Build Coastguard Worker 	/* 0x03 */ case VB2_FW_RESULT_FAILURE:
127*8617a60dSAndroid Build Coastguard Worker 		return "Failure";
128*8617a60dSAndroid Build Coastguard Worker 	}
129*8617a60dSAndroid Build Coastguard Worker 
130*8617a60dSAndroid Build Coastguard Worker 	return "Unknown";
131*8617a60dSAndroid Build Coastguard Worker }
132*8617a60dSAndroid Build Coastguard Worker 
133*8617a60dSAndroid Build Coastguard Worker /**
134*8617a60dSAndroid Build Coastguard Worker  * Convert Firmware Slot into supported string
135*8617a60dSAndroid Build Coastguard Worker  *
136*8617a60dSAndroid Build Coastguard Worker  * @return char*   firmware slot name string
137*8617a60dSAndroid Build Coastguard Worker  */
vb2_slot_string(uint8_t slot)138*8617a60dSAndroid Build Coastguard Worker static inline const char *vb2_slot_string(uint8_t slot)
139*8617a60dSAndroid Build Coastguard Worker {
140*8617a60dSAndroid Build Coastguard Worker 	if ((enum vb2_fw_slot)slot == VB2_FW_SLOT_A)
141*8617a60dSAndroid Build Coastguard Worker 	/* 0x00 */ return "A";
142*8617a60dSAndroid Build Coastguard Worker 	else
143*8617a60dSAndroid Build Coastguard Worker 	/* 0x01 */ return "B";
144*8617a60dSAndroid Build Coastguard Worker }
145*8617a60dSAndroid Build Coastguard Worker 
146*8617a60dSAndroid Build Coastguard Worker #endif  /* VBOOT_REFERENCE_2INFO_H_ */
147