| /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * Recovery reasons. |
| */ |
| |
| #ifndef VBOOT_REFERENCE_2RECOVERY_REASONS_H_ |
| #define VBOOT_REFERENCE_2RECOVERY_REASONS_H_ |
| |
| #include "2sysincludes.h" |
| |
| /** |
| * Return a description of the recovery reason code. |
| * |
| * @param recovery reason code |
| * @returns A string literal with English description of the recovery reason |
| */ |
| const char *vb2_get_recovery_reason_string(uint8_t code); |
| |
| /* Recovery reason codes */ |
| enum vb2_nv_recovery { |
| |
| /**********************************************************************/ |
| /**** Uncategorized errors ********************************************/ |
| |
| /* Recovery not requested. */ |
| VB2_RECOVERY_NOT_REQUESTED = 0x00, |
| |
| /* |
| * Recovery requested from legacy utility. (Prior to the NV storage |
| * spec, recovery mode was a single bitfield; this value is reserved so |
| * that scripts which wrote 1 to the recovery field are distinguishable |
| * from scripts whch use the recovery reasons listed here. |
| */ |
| VB2_RECOVERY_LEGACY = 0x01, |
| |
| /* User manually requested recovery via recovery button */ |
| VB2_RECOVERY_RO_MANUAL = 0x02, |
| |
| |
| |
| /**********************************************************************/ |
| /**** Firmware verification (RO) errors (and some EC stuff???) ********/ |
| |
| /* Unspecified RW verification error (when none of 0x10-0x1f fit) */ |
| VB2_RECOVERY_RO_INVALID_RW = 0x03, |
| |
| /* S3 resume failed (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RO_S3_RESUME = 0x04, |
| |
| /* TPM error in read-only firmware (deprecated, see 0x54+) */ |
| VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR = 0x05, |
| |
| /* Shared data error in read-only firmware */ |
| VB2_RECOVERY_RO_SHARED_DATA = 0x06, |
| |
| /* Test error from S3Resume() (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RO_TEST_S3 = 0x07, |
| |
| /* Test error from LoadFirmwareSetup() (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RO_TEST_LFS = 0x08, |
| |
| /* Test error from LoadFirmware() (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RO_TEST_LF = 0x09, |
| |
| /* |
| * RW firmware failed signature check (neither RW firmware slot was |
| * valid). Recovery reason is VB2_RECOVERY_DEPRECATED_RW_NOT_DONE + |
| * the check value for the slot which came closest to validating; see |
| * VBSD_LF_CHECK_* in vboot_struct.h (deprecated). |
| */ |
| VB2_RECOVERY_DEPRECATED_RW_NOT_DONE = 0x10, |
| |
| /* Latest tried RW firmware developer flag mismatch */ |
| VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH = 0x11, |
| |
| /* Latest tried RW firmware recovery flag mismatch */ |
| VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH = 0x12, |
| |
| /* Latest tried RW firmware keyblock verification failed */ |
| VB2_RECOVERY_FW_KEYBLOCK = 0x13, |
| |
| /* Latest tried RW firmware key version too old */ |
| VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14, |
| |
| /* Latest tried RW firmware unable to parse data key */ |
| VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE = 0x15, |
| |
| /* Latest tried RW firmware preamble verification failed */ |
| VB2_RECOVERY_FW_PREAMBLE = 0x16, |
| |
| /* Latest tried RW firmware version too old */ |
| VB2_RECOVERY_FW_ROLLBACK = 0x17, |
| |
| /* Latest tried RW firmware header valid */ |
| VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID = 0x18, |
| |
| /* Latest tried RW firmware unable to get firmware body */ |
| VB2_RECOVERY_DEPRECATED_FW_GET_FW_BODY = 0x19, |
| |
| /* Latest tried RW firmware hash wrong size */ |
| VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE = 0x1a, |
| |
| /* Latest tried RW firmware body verification failed */ |
| VB2_RECOVERY_FW_BODY = 0x1b, |
| |
| /* Latest tried RW firmware valid */ |
| VB2_RECOVERY_DEPRECATED_FW_VALID = 0x1c, |
| |
| /* Latest tried RW firmware RO normal path not supported */ |
| VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL = 0x1d, |
| |
| /* |
| * Firmware boot failure outside of verified boot (RAM init, missing |
| * SSD, etc.). |
| */ |
| VB2_RECOVERY_RO_FIRMWARE = 0x20, |
| |
| /* |
| * Recovery mode TPM initialization requires a system reboot. The |
| * system was already in recovery mode for some other reason when this |
| * happened. |
| */ |
| VB2_RECOVERY_RO_TPM_REBOOT = 0x21, |
| |
| /* EC software sync - other error */ |
| VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22, |
| |
| /* EC software sync - unable to determine active EC image */ |
| VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23, |
| |
| /* EC software sync - error obtaining EC image hash (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_EC_HASH = 0x24, |
| |
| /* EC software sync - error obtaining expected EC image (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE = 0x25, |
| |
| /* EC software sync - error updating EC */ |
| VB2_RECOVERY_EC_UPDATE = 0x26, |
| |
| /* EC software sync - unable to jump to EC-RW */ |
| VB2_RECOVERY_EC_JUMP_RW = 0x27, |
| |
| /* EC software sync - unable to protect / unprotect EC-RW */ |
| VB2_RECOVERY_EC_PROTECT = 0x28, |
| |
| /* EC software sync - error obtaining expected EC hash */ |
| VB2_RECOVERY_EC_EXPECTED_HASH = 0x29, |
| |
| /* EC software sync - expected EC image doesn't match hash (deprc.) */ |
| VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH = 0x2a, |
| |
| /* Firmware secure data initialization error */ |
| VB2_RECOVERY_SECDATA_FIRMWARE_INIT = 0x2b, |
| |
| /* GBB header is bad */ |
| VB2_RECOVERY_GBB_HEADER = 0x2c, |
| |
| /* Unable to clear TPM owner */ |
| VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d, |
| |
| /* Error determining/updating virtual dev switch */ |
| VB2_RECOVERY_DEV_SWITCH = 0x2e, |
| |
| /* Error determining firmware slot */ |
| VB2_RECOVERY_FW_SLOT = 0x2f, |
| |
| /* Error updating auxiliary firmware */ |
| VB2_RECOVERY_AUXFW_UPDATE = 0x30, |
| |
| /* |
| * Intel CSE Lite SKU firmware failure; see subcodes defined in coreboot for specific |
| * reason. |
| */ |
| VB2_RECOVERY_INTEL_CSE_LITE_SKU = 0x31, |
| |
| /* Unspecified/unknown error in read-only firmware */ |
| VB2_RECOVERY_RO_UNSPECIFIED = 0x3f, |
| |
| |
| |
| /**********************************************************************/ |
| /**** Kernel verification (RW) errors *********************************/ |
| |
| /* |
| * User manually requested recovery by pressing a key at developer |
| * warning screen (deprecated) |
| */ |
| VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN = 0x41, |
| |
| /* No OS kernel detected (deprecated, now 0x5b) */ |
| VB2_RECOVERY_DEPRECATED_RW_NO_OS = 0x42, |
| |
| /* OS kernel failed signature check. Since the kernel corrupts itself |
| (DMVERROR) on a verity failure, may also indicate corrupt rootfs. */ |
| VB2_RECOVERY_RW_INVALID_OS = 0x43, |
| |
| /* TPM error in rewritable firmware (deprecated, see 0x54+) */ |
| VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR = 0x44, |
| |
| /* RW firmware in dev mode, but dev switch is off (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH = 0x45, |
| |
| /* Shared data error in rewritable firmware */ |
| VB2_RECOVERY_RW_SHARED_DATA = 0x46, |
| |
| /* Test error from LoadKernel() (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RW_TEST_LK = 0x47, |
| |
| /* No bootable disk found (deprecated, see 0x5a) */ |
| VB2_RECOVERY_DEPRECATED_RW_NO_DISK = 0x48, |
| |
| /* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST */ |
| VB2_RECOVERY_TPM_E_FAIL = 0x49, |
| |
| /* TPM setup error in read-only firmware */ |
| VB2_RECOVERY_RO_TPM_S_ERROR = 0x50, |
| |
| /* TPM write error in read-only firmware */ |
| VB2_RECOVERY_RO_TPM_W_ERROR = 0x51, |
| |
| /* TPM lock error in read-only firmware */ |
| VB2_RECOVERY_RO_TPM_L_ERROR = 0x52, |
| |
| /* TPM update error in read-only firmware */ |
| VB2_RECOVERY_RO_TPM_U_ERROR = 0x53, |
| |
| /* TPM read error in rewritable firmware */ |
| VB2_RECOVERY_RW_TPM_R_ERROR = 0x54, |
| |
| /* TPM write error in rewritable firmware */ |
| VB2_RECOVERY_RW_TPM_W_ERROR = 0x55, |
| |
| /* TPM lock error in rewritable firmware */ |
| VB2_RECOVERY_RW_TPM_L_ERROR = 0x56, |
| |
| /* EC software sync unable to get EC image hash */ |
| VB2_RECOVERY_EC_HASH_FAILED = 0x57, |
| |
| /* EC software sync invalid image hash size */ |
| VB2_RECOVERY_EC_HASH_SIZE = 0x58, |
| |
| /* Unspecified error while trying to load kernel */ |
| VB2_RECOVERY_LK_UNSPECIFIED = 0x59, |
| |
| /* No bootable storage device in system */ |
| VB2_RECOVERY_RW_NO_DISK = 0x5a, |
| |
| /* No bootable kernel found on disk */ |
| VB2_RECOVERY_RW_NO_KERNEL = 0x5b, |
| |
| /* BCB related error in RW firmware (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR = 0x5c, |
| |
| /* Kernel secure data initialization error */ |
| VB2_RECOVERY_SECDATA_KERNEL_INIT = 0x5d, |
| |
| /* Fastboot mode requested in firmware (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_FW_FASTBOOT = 0x5e, |
| |
| /* Recovery hash space lock error in RO firmware */ |
| VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR = 0x5f, |
| |
| /* Failed to disable the TPM [prior to running untrusted code] */ |
| VB2_RECOVERY_TPM_DISABLE_FAILED = 0x60, |
| |
| /* Alt FW Failed hash verification */ |
| VB2_RECOVERY_ALTFW_HASH_FAILED = 0x61, |
| |
| /* FWMP secure data initialization error */ |
| VB2_RECOVERY_SECDATA_FWMP_INIT = 0x62, |
| |
| /* Failed to get boot mode from TPM/Cr50 */ |
| VB2_RECOVERY_CR50_BOOT_MODE = 0x63, |
| |
| /* Attempt to escape from NO_BOOT mode was detected */ |
| VB2_RECOVERY_ESCAPE_NO_BOOT = 0x64, |
| |
| /* Unspecified/unknown error in rewritable firmware */ |
| VB2_RECOVERY_RW_UNSPECIFIED = 0x7f, |
| |
| |
| |
| /**********************************************************************/ |
| /**** OS level (kernel) errors (deprecated) ***************************/ |
| |
| /* |
| * Note: we want to avoid having the kernel touch vboot NVRAM directly |
| * in the future, so this whole range is essentially deprecated until |
| * further notice. |
| */ |
| |
| /* DM-verity error (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_KE_DM_VERITY = 0x81, |
| |
| /* Unspecified/unknown error in kernel (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED = 0xbf, |
| |
| |
| |
| /**********************************************************************/ |
| /**** OS level (userspace) errors *************************************/ |
| |
| /* Recovery mode test from user-mode */ |
| VB2_RECOVERY_US_TEST = 0xc1, |
| |
| /* Recovery requested by user-mode via BCB (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_BCB_USER_MODE = 0xc2, |
| |
| /* Fastboot mode requested by user-mode (deprecated) */ |
| VB2_RECOVERY_DEPRECATED_US_FASTBOOT = 0xc3, |
| |
| /* User requested recovery for training memory and rebooting. */ |
| VB2_RECOVERY_TRAIN_AND_REBOOT = 0xc4, |
| |
| /* Unspecified/unknown error in user-mode */ |
| VB2_RECOVERY_US_UNSPECIFIED = 0xff, |
| }; |
| |
| #endif /* VBOOT_REFERENCE_2RECOVERY_REASONS_H_ */ |