| /* Copyright 2022 The ChromiumOS Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * Helper functions to retrieve vboot firmware information. |
| */ |
| |
| #ifndef VBOOT_REFERENCE_2INFO_H_ |
| #define VBOOT_REFERENCE_2INFO_H_ |
| |
| /* Boot mode decided in vb2api_fw_phase1. |
| * |
| * Boot mode is a constant set by verified boot and may be read (but should not |
| * be set or cleared) by the caller. |
| * The boot modes are mutually exclusive. If a boot fulfill more than one |
| * constraints of the listing boot modes, it will be set to the most important |
| * one. The priority is the same as the listing order. |
| */ |
| enum vb2_boot_mode { |
| /* Undefined, The boot mode is not set. */ |
| VB2_BOOT_MODE_UNDEFINED = 0, |
| |
| /* |
| * Manual recovery boot, regardless of dev mode state. |
| * |
| * VB2_CONTEXT_RECOVERY_MODE is set and the recovery is physically |
| * requested (a.k.a. Manual recovery). All other recovery requests |
| * including manual recovery requested by a (compromised) host will end |
| * up with a broken screen. |
| */ |
| VB2_BOOT_MODE_MANUAL_RECOVERY = 1, |
| |
| /* |
| * Broken screen. |
| * |
| * If a recovery boot is not a manual recovery (a.k.a. not requested |
| * physically), the recovery is not allowed and will end up with |
| * broken screen. |
| */ |
| VB2_BOOT_MODE_BROKEN_SCREEN = 2, |
| |
| /* |
| * Diagnostic boot. |
| * |
| * If diagnostic boot is enabled (a.k.a. vb2api_diagnostic_ui_enabled) |
| * and the nvdata contains VB2_NV_DIAG_REQUEST from previous boot, it |
| * will boot to diagnostic mode. |
| */ |
| VB2_BOOT_MODE_DIAGNOSTICS = 3, |
| |
| /* |
| * Developer boot: self-signed kernel okay. |
| * |
| * The developer mode switch is set (a.k.a. VB2_CONTEXT_DEVELOPER_MODE) |
| * and we are in the developer boot mode. |
| */ |
| VB2_BOOT_MODE_DEVELOPER = 4, |
| |
| /* Normal boot: kernel must be verified. */ |
| VB2_BOOT_MODE_NORMAL = 5, |
| }; |
| |
| /* Firmware slot codes */ |
| enum vb2_fw_slot { |
| /* Slot A */ |
| VB2_FW_SLOT_A = 0, |
| |
| /* Slot B */ |
| VB2_FW_SLOT_B = 1, |
| }; |
| |
| /* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */ |
| enum vb2_fw_result { |
| /* Unknown */ |
| VB2_FW_RESULT_UNKNOWN = 0, |
| |
| /* Trying a new slot, but haven't reached success/failure */ |
| VB2_FW_RESULT_TRYING = 1, |
| |
| /* Successfully booted to the OS */ |
| VB2_FW_RESULT_SUCCESS = 2, |
| |
| /* Known failure */ |
| VB2_FW_RESULT_FAILURE = 3, |
| }; |
| |
| /** |
| * Convert Firmware Boot Mode into supported string |
| * |
| * @return char* firmware boot mode string |
| */ |
| static inline const char *vb2_boot_mode_string(uint8_t boot_mode) |
| { |
| switch ((enum vb2_boot_mode)boot_mode) { |
| /* 0x00 */ case VB2_BOOT_MODE_UNDEFINED: |
| return "Undefined"; |
| /* 0x01 */ case VB2_BOOT_MODE_MANUAL_RECOVERY: |
| return "Manual recovery"; |
| /* 0x02 */ case VB2_BOOT_MODE_BROKEN_SCREEN: |
| return "Broken screen"; |
| /* 0x03 */ case VB2_BOOT_MODE_DIAGNOSTICS: |
| return "Diagnostic"; |
| /* 0x04 */ case VB2_BOOT_MODE_DEVELOPER: |
| return "Developer"; |
| /* 0x05 */ case VB2_BOOT_MODE_NORMAL: |
| return "Secure"; |
| } |
| |
| return "Unknown"; |
| } |
| |
| /** |
| * Convert Firmware Slot result into supported string |
| * |
| * @return char* firmware slot result string |
| */ |
| static inline const char *vb2_result_string(uint8_t result) |
| { |
| switch ((enum vb2_fw_result)result) { |
| /* 0x00 */ case VB2_FW_RESULT_UNKNOWN: |
| return "Unknown"; |
| /* 0x01 */ case VB2_FW_RESULT_TRYING: |
| return "Trying"; |
| /* 0x02 */ case VB2_FW_RESULT_SUCCESS: |
| return "Success"; |
| /* 0x03 */ case VB2_FW_RESULT_FAILURE: |
| return "Failure"; |
| } |
| |
| return "Unknown"; |
| } |
| |
| /** |
| * Convert Firmware Slot into supported string |
| * |
| * @return char* firmware slot name string |
| */ |
| static inline const char *vb2_slot_string(uint8_t slot) |
| { |
| if ((enum vb2_fw_slot)slot == VB2_FW_SLOT_A) |
| /* 0x00 */ return "A"; |
| else |
| /* 0x01 */ return "B"; |
| } |
| |
| #endif /* VBOOT_REFERENCE_2INFO_H_ */ |