blob: 514ee4f4e2f41133bca6b6fd44f0f24b20a372b8 [file] [log] [blame]
/* 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_ */