Track errno and errstr in the kthread
[akaros.git] / kern / include / crypto / 2nvstorage.h
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 #pragma once
9
10 enum vb2_nv_param {
11         /*
12          * Parameter values have been reset to defaults (flag for firmware).
13          * 0=clear; 1=set.
14          */
15         VB2_NV_FIRMWARE_SETTINGS_RESET = 0,
16         /*
17          * Parameter values have been reset to defaults (flag for kernel).
18          * 0=clear; 1=set.
19          */
20         VB2_NV_KERNEL_SETTINGS_RESET,
21         /* Request debug reset on next S3->S0 transition.  0=clear; 1=set. */
22         VB2_NV_DEBUG_RESET_MODE,
23         /* Firmware slot to try next.  0=A, 1=B */
24         VB2_NV_TRY_NEXT,
25         /*
26          * Number of times to try booting RW firmware slot B before slot A.
27          * Valid range: 0-15.
28          *
29          * For VB2, number of times to try booting the slot indicated by
30          * VB2_NV_TRY_NEXT.  On a 1->0 transition of try count, VB2_NV_TRY_NEXT
31          * will be set to the other slot.
32          */
33         VB2_NV_TRY_COUNT,
34         /*
35          * Request recovery mode on next boot; see 2recovery_reason.h for
36          * currently defined reason codes.  8-bit value.
37          */
38         VB2_NV_RECOVERY_REQUEST,
39         /*
40          * Localization index for screen bitmaps displayed by firmware.
41          * 8-bit value.
42          */
43         VB2_NV_LOCALIZATION_INDEX,
44         /* Field reserved for kernel/user-mode use; 32-bit value. */
45         VB2_NV_KERNEL_FIELD,
46         /* Allow booting from USB in developer mode.  0=no, 1=yes. */
47         VB2_NV_DEV_BOOT_USB,
48         /* Allow booting of legacy OSes in developer mode.  0=no, 1=yes. */
49         VB2_NV_DEV_BOOT_LEGACY,
50         /* Only boot Google-signed images in developer mode.  0=no, 1=yes. */
51         VB2_NV_DEV_BOOT_SIGNED_ONLY,
52         /*
53          * Allow full fastboot capability in firmware in developer mode.
54          * 0=no, 1=yes.
55          */
56         VB2_NV_DEV_BOOT_FASTBOOT_FULL_CAP,
57         /* Set default boot mode (see vb2_dev_default_boot) */
58         VB2_NV_DEV_DEFAULT_BOOT,
59         /*
60          * Set by userspace to request that RO firmware disable dev-mode on the
61          * next boot. This is likely only possible if the dev-switch is
62          * virtual.
63          */
64         VB2_NV_DISABLE_DEV_REQUEST,
65         /*
66          * Set and cleared by vboot to request that the video Option ROM be
67          * loaded at boot time, so that BIOS screens can be displayed. 0=no,
68          * 1=yes.
69          */
70         VB2_NV_OPROM_NEEDED,
71         /* Request that the firmware clear the TPM owner on the next boot. */
72         VB2_NV_CLEAR_TPM_OWNER_REQUEST,
73         /* Flag that TPM owner was cleared on request. */
74         VB2_NV_CLEAR_TPM_OWNER_DONE,
75         /* TPM requested a reboot already. */
76         VB2_NV_TPM_REQUESTED_REBOOT,
77         /* More details on recovery reason */
78         VB2_NV_RECOVERY_SUBCODE,
79         /* Request that NVRAM be backed up at next boot if possible. */
80         VB2_NV_BACKUP_NVRAM_REQUEST,
81         /* Firmware slot tried this boot (0=A, 1=B) */
82         VB2_NV_FW_TRIED,
83         /* Result of trying that firmware (see vb2_fw_result) */
84         VB2_NV_FW_RESULT,
85         /* Firmware slot tried previous boot (0=A, 1=B) */
86         VB2_NV_FW_PREV_TRIED,
87         /* Result of trying that firmware (see vb2_fw_result) */
88         VB2_NV_FW_PREV_RESULT,
89         /* Request wipeout of the device by the app. */
90         VB2_NV_REQ_WIPEOUT,
91
92         /* Fastboot: Unlock in firmware, 0=disabled, 1=enabled. */
93         VB2_NV_FASTBOOT_UNLOCK_IN_FW,
94         /* Boot system when AC detected (0=no, 1=yes). */
95         VB2_NV_BOOT_ON_AC_DETECT,
96         /* Try to update the EC-RO image after updating the EC-RW image(0=no, 1=yes). */
97         VB2_NV_TRY_RO_SYNC,
98         /* Cut off battery and shutdown on next boot. */
99         VB2_NV_BATTERY_CUTOFF_REQUEST,
100 };
101
102 /* Set default boot in developer mode */
103 enum vb2_dev_default_boot {
104         /* Default to boot from disk*/
105         VB2_DEV_DEFAULT_BOOT_DISK = 0,
106
107         /* Default to boot from USB */
108         VB2_DEV_DEFAULT_BOOT_USB= 1,
109
110         /* Default to boot legacy OS */
111         VB2_DEV_DEFAULT_BOOT_LEGACY = 2,
112
113 };
114
115 /* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
116 enum vb2_fw_result {
117         /* Unknown */
118         VB2_FW_RESULT_UNKNOWN = 0,
119
120         /* Trying a new slot, but haven't reached success/failure */
121         VB2_FW_RESULT_TRYING = 1,
122
123         /* Successfully booted to the OS */
124         VB2_FW_RESULT_SUCCESS = 2,
125
126         /* Known failure */
127         VB2_FW_RESULT_FAILURE = 3,
128 };
129
130 /**
131  * Check the CRC of the non-volatile storage context.
132  *
133  * Use this if reading from non-volatile storage may be flaky, and you want to
134  * retry reading it several times.
135  *
136  * This may be called before vb2_context_init().
137  *
138  * @param ctx           Context pointer
139  * @return VB2_SUCCESS, or non-zero error code if error.
140  */
141 int vb2_nv_check_crc(const struct vb2_context *ctx);
142
143 /**
144  * Initialize the non-volatile storage context and verify its CRC.
145  *
146  * @param ctx           Context pointer
147  */
148 void vb2_nv_init(struct vb2_context *ctx);
149
150 /**
151  * Read a non-volatile value.
152  *
153  * @param ctx           Context pointer
154  * @param param         Parameter to read
155  * @return The value of the parameter.  If you somehow force an invalid
156  *         parameter number, returns 0.
157  */
158 uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param);
159
160 /**
161  * Write a non-volatile value.
162  *
163  * Ignores writes to unknown params.
164  *
165  * @param ctx           Context pointer
166  * @param param         Parameter to write
167  * @param value         New value
168  */
169 void vb2_nv_set(struct vb2_context *ctx,
170                 enum vb2_nv_param param,
171                 uint32_t value);
172