1 /* Copyright 2015 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 bitfields
6  */
7 
8 #ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
9 #define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
10 
11 /*
12  * Constants for NV storage.  We use this rather than structs and bitfields so
13  * the data format is consistent across platforms and compilers.  Total NV
14  * storage size is VB2_NVDATA_SIZE = 16 bytes.
15  *
16  * These constants must match the equivalent constants in
17  * lib/vboot_nvstorage.c.  (We currently don't share a common header file
18  * because we're tring to keep the two libs independent, and we hope to
19  * deprecate that one.)
20  */
21 
22 enum vb2_nv_offset {
23 	VB2_NV_OFFS_HEADER = 0,
24 	VB2_NV_OFFS_BOOT = 1,
25 	VB2_NV_OFFS_RECOVERY = 2,
26 	VB2_NV_OFFS_LOCALIZATION = 3,
27 	VB2_NV_OFFS_DEV = 4,
28 	VB2_NV_OFFS_TPM = 5,
29 	VB2_NV_OFFS_RECOVERY_SUBCODE = 6,
30 	VB2_NV_OFFS_BOOT2 = 7,
31 	/* Offsets 8-10 are currently unused */
32 	VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */
33 	/* CRC must be last field */
34 	VB2_NV_OFFS_CRC = 15
35 };
36 
37 /* Fields in VB2_NV_OFFS_HEADER (unused = 0x0f) */
38 #define VB2_NV_HEADER_KERNEL_SETTINGS_RESET    0x10
39 #define VB2_NV_HEADER_FW_SETTINGS_RESET        0x20
40 #define VB2_NV_HEADER_SIGNATURE                0x40
41 #define VB2_NV_HEADER_MASK                     0xc0
42 
43 /* Fields in VB2_NV_OFFS_BOOT */
44 #define VB2_NV_BOOT_TRY_COUNT_MASK             0x0f
45 #define VB2_NV_BOOT_BACKUP_NVRAM               0x10
46 #define VB2_NV_BOOT_OPROM_NEEDED               0x20
47 #define VB2_NV_BOOT_DISABLE_DEV                0x40
48 #define VB2_NV_BOOT_DEBUG_RESET                0x80
49 
50 /* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */
51 #define VB2_NV_BOOT2_RESULT_MASK               0x03
52 #define VB2_NV_BOOT2_TRIED                     0x04
53 #define VB2_NV_BOOT2_TRY_NEXT                  0x08
54 #define VB2_NV_BOOT2_PREV_RESULT_MASK          0x30
55 #define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4  /* Number of bits to shift result */
56 #define VB2_NV_BOOT2_PREV_TRIED                0x40
57 
58 /* Fields in VB2_NV_OFFS_DEV (unused = 0xf8) */
59 #define VB2_NV_DEV_FLAG_USB                    0x01
60 #define VB2_NV_DEV_FLAG_SIGNED_ONLY            0x02
61 #define VB2_NV_DEV_FLAG_LEGACY                 0x04
62 
63 /* Fields in VB2_NV_OFFS_TPM (unused = 0xfc) */
64 #define VB2_NV_TPM_CLEAR_OWNER_REQUEST         0x01
65 #define VB2_NV_TPM_CLEAR_OWNER_DONE            0x02
66 
67 #endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
68