summaryrefslogtreecommitdiff
path: root/firmware/include/vboot_nvstorage.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/include/vboot_nvstorage.h')
-rw-r--r--firmware/include/vboot_nvstorage.h358
1 files changed, 0 insertions, 358 deletions
diff --git a/firmware/include/vboot_nvstorage.h b/firmware/include/vboot_nvstorage.h
deleted file mode 100644
index ecb5d007..00000000
--- a/firmware/include/vboot_nvstorage.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/* Copyright (c) 2013 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.
- */
-
-/* Non-volatile storage routines for verified boot. */
-
-#ifndef VBOOT_REFERENCE_NVSTORAGE_H_
-#define VBOOT_REFERENCE_NVSTORAGE_H_
-#include <stdint.h>
-
-#define VBNV_BLOCK_SIZE 16 /* Size of NV storage block in bytes */
-
-typedef struct VbNvContext {
- /* Raw NV data. Caller must fill this before calling VbNvSetup(). */
- uint8_t raw[VBNV_BLOCK_SIZE];
- /*
- * Flag indicating whether raw data has changed. Set by VbNvTeardown()
- * if the raw data has changed and needs to be stored to the underlying
- * non-volatile data store.
- */
- int raw_changed;
-
- /*
- * Internal data for NV storage routines. Caller should not touch
- * these fields.
- */
- int regenerate_crc;
-} VbNvContext;
-
-/* Parameter type for VbNvGet(), VbNvSet(). */
-typedef enum VbNvParam {
- /*
- * Parameter values have been reset to defaults (flag for firmware).
- * 0=clear; 1=set.
- */
- VBNV_FIRMWARE_SETTINGS_RESET = 0,
- /*
- * Parameter values have been reset to defaults (flag for kernel).
- * 0=clear; 1=set.
- */
- VBNV_KERNEL_SETTINGS_RESET,
- /* Request debug reset on next S3->S0 transition. 0=clear; 1=set. */
- VBNV_DEBUG_RESET_MODE,
- /*
- * Number of times to try booting RW firmware slot B before slot A.
- * Valid range: 0-15.
- *
- * Vboot2: Number of times to try the firmware in VBNV_FW_TRY_NEXT.
- *
- * These refer to the same field, but have different enum values so
- * case statement don't complain about duplicates.
- */
- VBNV_TRY_B_COUNT,
- VBNV_FW_TRY_COUNT,
- /*
- * Request recovery mode on next boot; see VBNB_RECOVERY_* below for
- * currently defined reason codes. 8-bit value.
- */
- VBNV_RECOVERY_REQUEST,
- /*
- * Localization index for screen bitmaps displayed by firmware.
- * 8-bit value.
- */
- VBNV_LOCALIZATION_INDEX,
- /* Field reserved for kernel/user-mode use; 32-bit value. */
- VBNV_KERNEL_FIELD,
- /* Allow booting from USB in developer mode. 0=no, 1=yes. */
- VBNV_DEV_BOOT_USB,
- /* Allow booting of legacy OSes in developer mode. 0=no, 1=yes. */
- VBNV_DEV_BOOT_LEGACY,
- /* Only boot Google-signed images in developer mode. 0=no, 1=yes. */
- VBNV_DEV_BOOT_SIGNED_ONLY,
- /*
- * Allow full fastboot capability in firmware in developer mode.
- * 0=no, 1=yes.
- */
- VBNV_DEV_BOOT_FASTBOOT_FULL_CAP,
- /* Set default boot mode (see VbDevDefaultBoot) */
- VBNV_DEV_DEFAULT_BOOT,
- /*
- * Set by userspace to request that RO firmware disable dev-mode on the
- * next boot. This is likely only possible if the dev-switch is
- * virtual.
- */
- VBNV_DISABLE_DEV_REQUEST,
- /*
- * Set and cleared by vboot to request that the video Option ROM be
- * loaded at boot time, so that BIOS screens can be displayed. 0=no,
- * 1=yes.
- */
- VBNV_OPROM_NEEDED,
- /* Request that the firmware clear the TPM owner on the next boot. */
- VBNV_CLEAR_TPM_OWNER_REQUEST,
- /* Flag that TPM owner was cleared on request. */
- VBNV_CLEAR_TPM_OWNER_DONE,
- /* TPM requested a reboot */
- VBNV_TPM_REQUESTED_REBOOT,
- /* More details on recovery reason */
- VBNV_RECOVERY_SUBCODE,
- /* Request that NVRAM be backed up at next boot if possible. */
- VBNV_BACKUP_NVRAM_REQUEST,
-
- /* Vboot2: Firmware slot to try next. 0=A, 1=B */
- VBNV_FW_TRY_NEXT,
- /* Vboot2: Firmware slot tried this boot (0=A, 1=B) */
- VBNV_FW_TRIED,
- /* Vboot2: Result of trying that firmware (see vb2_fw_result) */
- VBNV_FW_RESULT,
- /* Firmware slot tried previous boot (0=A, 1=B) */
- VBNV_FW_PREV_TRIED,
- /* Result of trying that firmware (see vb2_fw_result) */
- VBNV_FW_PREV_RESULT,
- /* Wipeout request from firmware present. */
- VBNV_FW_REQ_WIPEOUT,
-
- /* Fastboot: Unlock in firmware, 0=disabled, 1=enabled. */
- VBNV_FASTBOOT_UNLOCK_IN_FW,
- /* Boot system when AC detected (0=no, 1=yes). */
- VBNV_BOOT_ON_AC_DETECT,
- /* Try to update the EC-RO image (0=no, 1=yes). */
- VBNV_TRY_RO_SYNC,
- /*
- * Finish mode transition (if requested), perform battery cut-off and
- * shutdown in next boot.
- */
- VBNV_BATTERY_CUTOFF_REQUEST,
- /* Maximum kernel version to roll forward to */
- VBNV_KERNEL_MAX_ROLLFORWARD,
-} VbNvParam;
-
-/* Set default boot in developer mode */
-typedef enum VbDevDefaultBoot {
- /* Default to boot from disk*/
- VBNV_DEV_DEFAULT_BOOT_DISK = 0,
-
- /* Default to boot from USB */
- VBNV_DEV_DEFAULT_BOOT_USB = 1,
-
- /* Default to boot legacy OS */
- VBNV_DEV_DEFAULT_BOOT_LEGACY = 2,
-
-} VbDevDefaultBoot;
-
-/* Result of trying the firmware in VBNV_FW_TRIED */
-typedef enum VbFwResult {
- /* Unknown */
- VBNV_FW_RESULT_UNKNOWN = 0,
-
- /* Trying a new slot, but haven't reached success/failure */
- VBNV_FW_RESULT_TRYING = 1,
-
- /* Successfully booted to the OS */
- VBNV_FW_RESULT_SUCCESS = 2,
-
- /* Known failure */
- VBNV_FW_RESULT_FAILURE = 3,
-
-} VbFwResult;
-
-/* Recovery reason codes for VBNV_RECOVERY_REQUEST */
-/* Recovery not requested. */
-#define VBNV_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.
- */
-#define VBNV_RECOVERY_LEGACY 0x01
-/* User manually requested recovery via recovery button */
-#define VBNV_RECOVERY_RO_MANUAL 0x02
-/* RW firmware failed signature check (neither RW firmware slot was valid) */
-#define VBNV_RECOVERY_RO_INVALID_RW 0x03
-/* S3 resume failed */
-#define VBNV_RECOVERY_RO_S3_RESUME 0x04
-/* TPM error in read-only firmware (deprecated) */
-#define VBNV_RECOVERY_DEP_RO_TPM_ERROR 0x05
-/* Shared data error in read-only firmware */
-#define VBNV_RECOVERY_RO_SHARED_DATA 0x06
-/* Test error from S3Resume() */
-#define VBNV_RECOVERY_RO_TEST_S3 0x07
-/* Test error from LoadFirmwareSetup() */
-#define VBNV_RECOVERY_RO_TEST_LFS 0x08
-/* Test error from LoadFirmware() */
-#define VBNV_RECOVERY_RO_TEST_LF 0x09
-/*
- * RW firmware failed signature check (neither RW firmware slot was valid).
- * Recovery reason is VBNV_RECOVERY_RO_INVALID_RW_CHECK_MIN + the check value
- * for the slot which came closest to validating; see VBSD_LF_CHECK_* in
- * vboot_struct.h.
- */
-#define VBNV_RECOVERY_RO_INVALID_RW_CHECK_MIN 0x10
-#define VBNV_RECOVERY_RO_INVALID_RW_CHECK_MAX 0x1F
-/*
- * Firmware boot failure outside of verified boot (RAM init, missing SSD,
- * etc.).
- */
-#define VBNV_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.
- */
-#define VBNV_RECOVERY_RO_TPM_REBOOT 0x21
-/* EC software sync - other error */
-#define VBNV_RECOVERY_EC_SOFTWARE_SYNC 0x22
-/* EC software sync - unable to determine active EC image */
-#define VBNV_RECOVERY_EC_UNKNOWN_IMAGE 0x23
-/* EC software sync - error obtaining EC image hash (deprecated) */
-#define VBNV_RECOVERY_DEP_EC_HASH 0x24
-/* EC software sync - error obtaining expected EC image */
-#define VBNV_RECOVERY_EC_EXPECTED_IMAGE 0x25
-/* EC software sync - error updating EC */
-#define VBNV_RECOVERY_EC_UPDATE 0x26
-/* EC software sync - unable to jump to EC-RW */
-#define VBNV_RECOVERY_EC_JUMP_RW 0x27
-/* EC software sync - unable to protect / unprotect EC-RW */
-#define VBNV_RECOVERY_EC_PROTECT 0x28
-/* EC software sync - error obtaining expected EC hash */
-#define VBNV_RECOVERY_EC_EXPECTED_HASH 0x29
-/* EC software sync - expected EC image doesn't match hash */
-#define VBNV_RECOVERY_EC_HASH_MISMATCH 0x2A
-/* VB2: Secure data inititalization error */
-#define VBNV_RECOVERY_VB2_SECDATA_INIT 0x2B
-/* VB2: GBB header is bad */
-#define VBNV_RECOVERY_VB2_GBB_HEADER 0x2C
-/* VB2: Unable to clear TPM owner */
-#define VBNV_RECOVERY_VB2_TPM_CLEAR_OWNER 0x2D
-/* VB2: Error determining/updating virtual dev switch */
-#define VBNV_RECOVERY_VB2_DEV_SWITCH 0x2E
-/* VB2: Error determining firmware slot */
-#define VBNV_RECOVERY_VB2_FW_SLOT 0x2F
-/* Unspecified/unknown error in read-only firmware */
-#define VBNV_RECOVERY_RO_UNSPECIFIED 0x3F
-/*
- * User manually requested recovery by pressing a key at developer
- * warning screen
- */
-#define VBNV_RECOVERY_RW_DEV_SCREEN 0x41
-/* No OS kernel detected */
-#define VBNV_RECOVERY_RW_NO_OS 0x42
-/* OS kernel failed signature check */
-#define VBNV_RECOVERY_RW_INVALID_OS 0x43
-/* TPM error in rewritable firmware (deprecated) */
-#define VBNV_RECOVERY_DEP_RW_TPM_ERROR 0x44
-/* RW firmware in dev mode, but dev switch is off */
-#define VBNV_RECOVERY_RW_DEV_MISMATCH 0x45
-/* Shared data error in rewritable firmware */
-#define VBNV_RECOVERY_RW_SHARED_DATA 0x46
-/* Test error from LoadKernel() */
-#define VBNV_RECOVERY_RW_TEST_LK 0x47
-/* No bootable disk found (deprecated)*/
-#define VBNV_RECOVERY_DEP_RW_NO_DISK 0x48
-/* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST */
-#define VBNV_RECOVERY_TPM_E_FAIL 0x49
-/* TPM setup error in read-only firmware */
-#define VBNV_RECOVERY_RO_TPM_S_ERROR 0x50
-/* TPM write error in read-only firmware */
-#define VBNV_RECOVERY_RO_TPM_W_ERROR 0x51
-/* TPM lock error in read-only firmware */
-#define VBNV_RECOVERY_RO_TPM_L_ERROR 0x52
-/* TPM update error in read-only firmware */
-#define VBNV_RECOVERY_RO_TPM_U_ERROR 0x53
-/* TPM read error in rewritable firmware */
-#define VBNV_RECOVERY_RW_TPM_R_ERROR 0x54
-/* TPM write error in rewritable firmware */
-#define VBNV_RECOVERY_RW_TPM_W_ERROR 0x55
-/* TPM lock error in rewritable firmware */
-#define VBNV_RECOVERY_RW_TPM_L_ERROR 0x56
-/* EC software sync unable to get EC image hash */
-#define VBNV_RECOVERY_EC_HASH_FAILED 0x57
-/* EC software sync invalid image hash size */
-#define VBNV_RECOVERY_EC_HASH_SIZE 0x58
-/* Unspecified error while trying to load kernel */
-#define VBNV_RECOVERY_LK_UNSPECIFIED 0x59
-/* No bootable storage device in system */
-#define VBNV_RECOVERY_RW_NO_DISK 0x5A
-/* No bootable kernel found on disk */
-#define VBNV_RECOVERY_RW_NO_KERNEL 0x5B
-/* BCB-related error in RW firmware */
-#define VBNV_RECOVERY_RW_BCB_ERROR 0x5C
-/* Fastboot mode requested in firmware */
-#define VBNV_RECOVERY_FW_FASTBOOT 0x5E
-/* Recovery hash space lock error in RO firmware */
-#define VBNV_RECOVERY_RO_TPM_REC_HASH_L_ERROR 0x5F
-/* Unspecified/unknown error in rewritable firmware */
-#define VBNV_RECOVERY_RW_UNSPECIFIED 0x7F
-/* DM-verity error */
-#define VBNV_RECOVERY_KE_DM_VERITY 0x81
-/* Unspecified/unknown error in kernel */
-#define VBNV_RECOVERY_KE_UNSPECIFIED 0xBF
-/* Recovery mode test from user-mode */
-#define VBNV_RECOVERY_US_TEST 0xC1
-/* Recovery requested by user-mode via BCB */
-#define VBNV_RECOVERY_BCB_USER_MODE 0xC2
-/* Fastboot mode requested by user-mode */
-#define VBNV_RECOVERY_US_FASTBOOT 0xC3
-/* User requested recovery for training memory and rebooting. */
-#define VBNV_RECOVERY_TRAIN_AND_REBOOT 0xC4
-/* Unspecified/unknown error in user-mode */
-#define VBNV_RECOVERY_US_UNSPECIFIED 0xFF
-
-/**
- * Initialize the NV storage library.
- *
- * This must be called before any other functions in this library. Returns 0
- * if success, non-zero if error.
- *
- * Proper calling procedure:
- * 1) Allocate a context struct.
- * 2) If multi-threaded/multi-process, acquire a lock to prevent
- * other processes from modifying the underlying storage.
- * 3) Read underlying storage and fill in context->raw.
- * 4) Call VbNvSetup().
- *
- * If you have access to global variables, you may want to wrap all that in
- * your own VbNvOpen() function. We don't do that in here because there are no
- * global variables in UEFI BIOS during the PEI phase (that's also why we have
- * to pass around a context pointer).
- */
-int VbNvSetup(VbNvContext *context);
-
-/**
- * Clean up and flush changes back to the raw data.
- *
- * This must be called after other functions in this library. Returns 0 if
- * success, non-zero if error.
- *
- * Proper calling procedure:
- * 1) Call VbNvExit().
- * 2) If context.raw_changed, write data back to underlying storage.
- * 3) Release any lock you acquired before calling VbNvSetup().
- * 4) Free the context struct.
- *
- * If you have access to global variables, you may want to wrap this
- * in your own VbNvClose() function.
- */
-int VbNvTeardown(VbNvContext *context);
-
-/**
- * Read a NV storage parameter into *dest.
- *
- * Returns 0 if success, non-zero if error.
- *
- * This may only be called between VbNvSetup() and VbNvTeardown().
- */
-int VbNvGet(VbNvContext *context, VbNvParam param, uint32_t *dest);
-
-/**
- * Set a NV storage param to a new value.
- *
- * Returns 0 if success, non-zero if error.
- *
- * This may only be called between VbNvSetup() and VbNvTeardown().
- */
-int VbNvSet(VbNvContext *context, VbNvParam param, uint32_t value);
-
-#endif /* VBOOT_REFERENCE_NVSTORAGE_H_ */