Home | History | Annotate | Download | only in include
      1 /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  *
      5  * Non-volatile storage routines
      6  */
      7 
      8 #ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
      9 #define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
     10 
     11 enum vb2_nv_param {
     12 	/*
     13 	 * Parameter values have been reset to defaults (flag for firmware).
     14 	 * 0=clear; 1=set.
     15 	 */
     16 	VB2_NV_FIRMWARE_SETTINGS_RESET = 0,
     17 	/*
     18 	 * Parameter values have been reset to defaults (flag for kernel).
     19 	 * 0=clear; 1=set.
     20 	 */
     21 	VB2_NV_KERNEL_SETTINGS_RESET,
     22 	/* Request debug reset on next S3->S0 transition.  0=clear; 1=set. */
     23 	VB2_NV_DEBUG_RESET_MODE,
     24 	/* Firmware slot to try next.  0=A, 1=B */
     25 	VB2_NV_TRY_NEXT,
     26 	/*
     27 	 * Number of times to try booting RW firmware slot B before slot A.
     28 	 * Valid range: 0-15.
     29 	 *
     30 	 * For VB2, number of times to try booting the slot indicated by
     31 	 * VB2_NV_TRY_NEXT.  On a 1->0 transition of try count, VB2_NV_TRY_NEXT
     32 	 * will be set to the other slot.
     33 	 */
     34 	VB2_NV_TRY_COUNT,
     35 	/*
     36 	 * Request recovery mode on next boot; see 2recovery_reason.h for
     37 	 * currently defined reason codes.  8-bit value.
     38 	 */
     39 	VB2_NV_RECOVERY_REQUEST,
     40 	/*
     41 	 * Localization index for screen bitmaps displayed by firmware.
     42 	 * 8-bit value.
     43 	 */
     44 	VB2_NV_LOCALIZATION_INDEX,
     45 	/* Field reserved for kernel/user-mode use; 32-bit value. */
     46 	VB2_NV_KERNEL_FIELD,
     47 	/* Allow booting from USB in developer mode.  0=no, 1=yes. */
     48 	VB2_NV_DEV_BOOT_USB,
     49 	/* Allow booting of legacy OSes in developer mode.  0=no, 1=yes. */
     50 	VB2_NV_DEV_BOOT_LEGACY,
     51 	/* Only boot Google-signed images in developer mode.  0=no, 1=yes. */
     52 	VB2_NV_DEV_BOOT_SIGNED_ONLY,
     53 	/*
     54 	 * Set by userspace to request that RO firmware disable dev-mode on the
     55 	 * next boot. This is likely only possible if the dev-switch is
     56 	 * virtual.
     57 	 */
     58 	VB2_NV_DISABLE_DEV_REQUEST,
     59 	/*
     60 	 * Set and cleared by vboot to request that the video Option ROM be
     61 	 * loaded at boot time, so that BIOS screens can be displayed. 0=no,
     62 	 * 1=yes.
     63 	 */
     64 	VB2_NV_OPROM_NEEDED,
     65 	/* Request that the firmware clear the TPM owner on the next boot. */
     66 	VB2_NV_CLEAR_TPM_OWNER_REQUEST,
     67 	/* Flag that TPM owner was cleared on request. */
     68 	VB2_NV_CLEAR_TPM_OWNER_DONE,
     69 	/* More details on recovery reason */
     70 	VB2_NV_RECOVERY_SUBCODE,
     71 	/* Request that NVRAM be backed up at next boot if possible. */
     72 	VB2_NV_BACKUP_NVRAM_REQUEST,
     73 	/* Firmware slot tried this boot (0=A, 1=B) */
     74 	VB2_NV_FW_TRIED,
     75 	/* Result of trying that firmware (see vb2_fw_result) */
     76 	VB2_NV_FW_RESULT,
     77 	/* Firmware slot tried previous boot (0=A, 1=B) */
     78 	VB2_NV_FW_PREV_TRIED,
     79 	/* Result of trying that firmware (see vb2_fw_result) */
     80 	VB2_NV_FW_PREV_RESULT,
     81 };
     82 
     83 /* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
     84 enum vb2_fw_result {
     85 	/* Unknown */
     86 	VB2_FW_RESULT_UNKNOWN = 0,
     87 
     88 	/* Trying a new slot, but haven't reached success/failure */
     89 	VB2_FW_RESULT_TRYING = 1,
     90 
     91 	/* Successfully booted to the OS */
     92 	VB2_FW_RESULT_SUCCESS = 2,
     93 
     94 	/* Known failure */
     95 	VB2_FW_RESULT_FAILURE = 3,
     96 };
     97 
     98 /**
     99  * Check the CRC of the non-volatile storage context.
    100  *
    101  * Use this if reading from non-volatile storage may be flaky, and you want to
    102  * retry reading it several times.
    103  *
    104  * This may be called before vb2_context_init().
    105  *
    106  * @param ctx		Context pointer
    107  * @return VB2_SUCCESS, or non-zero error code if error.
    108  */
    109 int vb2_nv_check_crc(const struct vb2_context *ctx);
    110 
    111 /**
    112  * Initialize the non-volatile storage context and verify its CRC.
    113  *
    114  * @param ctx		Context pointer
    115  */
    116 void vb2_nv_init(struct vb2_context *ctx);
    117 
    118 /**
    119  * Read a non-volatile value.
    120  *
    121  * @param ctx		Context pointer
    122  * @param param		Parameter to read
    123  * @return The value of the parameter.  If you somehow force an invalid
    124  *         parameter number, returns 0.
    125  */
    126 uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param);
    127 
    128 /**
    129  * Write a non-volatile value.
    130  *
    131  * Ignores writes to unknown params.
    132  *
    133  * @param ctx		Context pointer
    134  * @param param		Parameter to write
    135  * @param value		New value
    136  */
    137 void vb2_nv_set(struct vb2_context *ctx,
    138 		enum vb2_nv_param param,
    139 		uint32_t value);
    140 
    141 #endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_ */
    142