blob: 6931278cd00b588116fabd06c5566f64515c7b67 [file] [log] [blame]
Randall Spangler3333e572014-05-14 11:37:52 -07001/* 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 * Secure non-volatile storage routines
6 */
7
Joel Kitching9adf2aa2019-08-20 17:43:50 +08008#ifndef VBOOT_REFERENCE_2SECDATA_H_
9#define VBOOT_REFERENCE_2SECDATA_H_
10
11/* Avoid circular dependency with 2api.h */
12struct vb2_context;
13typedef uint32_t vb2_error_t;
Randall Spangler3333e572014-05-14 11:37:52 -070014
Randall Spanglerbf9c2762015-05-12 13:44:30 -070015/*****************************************************************************/
16/* Firmware version space */
17
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080018#define VB2_SECDATA_FIRMWARE_VERSION 2
Randall Spangler3333e572014-05-14 11:37:52 -070019
20/* Flags for firmware space */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080021enum vb2_secdata_firmware_flags {
Randall Spangler3333e572014-05-14 11:37:52 -070022 /*
23 * Last boot was developer mode. TPM ownership is cleared when
24 * transitioning to/from developer mode. Set/cleared by
25 * vb2_check_dev_switch().
26 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080027 VB2_SECDATA_FIRMWARE_FLAG_LAST_BOOT_DEVELOPER = (1 << 0),
Randall Spangler3333e572014-05-14 11:37:52 -070028
29 /*
30 * Virtual developer mode switch is on. Set/cleared by the
31 * keyboard-controlled dev screens in recovery mode. Cleared by
32 * vb2_check_dev_switch().
33 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080034 VB2_SECDATA_FIRMWARE_FLAG_DEV_MODE = (1 << 1),
Randall Spangler3333e572014-05-14 11:37:52 -070035};
36
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080037struct vb2_secdata_firmware {
Randall Spangler3333e572014-05-14 11:37:52 -070038 /* Struct version, for backwards compatibility */
39 uint8_t struct_version;
40
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080041 /* Flags; see vb2_secdata_firmware_flags */
Randall Spangler3333e572014-05-14 11:37:52 -070042 uint8_t flags;
43
44 /* Firmware versions */
45 uint32_t fw_versions;
46
47 /* Reserved for future expansion */
48 uint8_t reserved[3];
49
50 /* CRC; must be last field in struct */
51 uint8_t crc8;
52} __attribute__((packed));
53
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080054/* Which param to get/set for vb2_secdata_firmware_get/set() */
55enum vb2_secdata_firmware_param {
56 /* Flags; see vb2_secdata_firmware_flags */
57 VB2_SECDATA_FIRMWARE_FLAGS = 0,
Randall Spangler3333e572014-05-14 11:37:52 -070058
59 /* Firmware versions */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080060 VB2_SECDATA_FIRMWARE_VERSIONS,
Randall Spangler3333e572014-05-14 11:37:52 -070061};
62
Randall Spanglerbf9c2762015-05-12 13:44:30 -070063/*****************************************************************************/
64/* Kernel version space */
65
66/* Kernel space - KERNEL_NV_INDEX, locked with physical presence. */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080067#define VB2_SECDATA_KERNEL_VERSION 2
68#define VB2_SECDATA_KERNEL_UID 0x4752574c /* 'GRWL' */
Randall Spanglerbf9c2762015-05-12 13:44:30 -070069
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080070struct vb2_secdata_kernel {
Randall Spanglerbf9c2762015-05-12 13:44:30 -070071 /* Struct version, for backwards compatibility */
72 uint8_t struct_version;
73
74 /* Unique ID to detect space redefinition */
75 uint32_t uid;
76
77 /* Kernel versions */
78 uint32_t kernel_versions;
79
80 /* Reserved for future expansion */
81 uint8_t reserved[3];
82
83 /* CRC; must be last field in struct */
84 uint8_t crc8;
85} __attribute__((packed));
86
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080087/* Which param to get/set for vb2_secdata_kernel_get/set() */
88enum vb2_secdata_kernel_param {
Randall Spanglerbf9c2762015-05-12 13:44:30 -070089 /* Kernel versions */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080090 VB2_SECDATA_KERNEL_VERSIONS = 0,
Randall Spanglerbf9c2762015-05-12 13:44:30 -070091};
92
93/*****************************************************************************/
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080094/* Firmware secure storage space functions */
Randall Spanglerbf9c2762015-05-12 13:44:30 -070095
Randall Spangler3333e572014-05-14 11:37:52 -070096/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080097 * Initialize firmware secure storage context and verify its CRC.
Randall Spangler3333e572014-05-14 11:37:52 -070098 *
Joel Kitchingfbde3aa2019-08-27 17:13:55 +080099 * This must be called before vb2_secdata_firmware_get/set().
Randall Spangler3333e572014-05-14 11:37:52 -0700100 *
101 * @param ctx Context pointer
102 * @return VB2_SUCCESS, or non-zero error code if error.
103 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800104vb2_error_t vb2_secdata_firmware_init(struct vb2_context *ctx);
Randall Spangler3333e572014-05-14 11:37:52 -0700105
106/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800107 * Read a firmware secure storage value.
Randall Spangler3333e572014-05-14 11:37:52 -0700108 *
109 * @param ctx Context pointer
110 * @param param Parameter to read
111 * @param dest Destination for value
112 * @return VB2_SUCCESS, or non-zero error code if error.
113 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800114vb2_error_t vb2_secdata_firmware_get(struct vb2_context *ctx,
115 enum vb2_secdata_firmware_param param,
116 uint32_t *dest);
Randall Spangler3333e572014-05-14 11:37:52 -0700117
118/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800119 * Write a firmware secure storage value.
Randall Spangler3333e572014-05-14 11:37:52 -0700120 *
121 * @param ctx Context pointer
122 * @param param Parameter to write
123 * @param value New value
124 * @return VB2_SUCCESS, or non-zero error code if error.
125 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800126vb2_error_t vb2_secdata_firmware_set(struct vb2_context *ctx,
127 enum vb2_secdata_firmware_param param,
128 uint32_t value);
Randall Spangler3333e572014-05-14 11:37:52 -0700129
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700130/*****************************************************************************/
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800131/* Kernel secure storage space functions
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700132 *
133 * These are separate functions so that they don't bloat the size of the early
134 * boot code which uses the firmware version space functions.
135 */
136
137/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800138 * Initialize kernel secure storage context and verify its CRC.
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700139 *
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800140 * This must be called before vb2_secdata_kernel_get/set().
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700141 *
142 * @param ctx Context pointer
143 * @return VB2_SUCCESS, or non-zero error code if error.
144 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800145vb2_error_t vb2_secdata_kernel_init(struct vb2_context *ctx);
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700146
147/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800148 * Read a kernel secure storage value.
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700149 *
150 * @param ctx Context pointer
151 * @param param Parameter to read
152 * @param dest Destination for value
153 * @return VB2_SUCCESS, or non-zero error code if error.
154 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800155vb2_error_t vb2_secdata_kernel_get(struct vb2_context *ctx,
156 enum vb2_secdata_kernel_param param,
157 uint32_t *dest);
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700158
159/**
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800160 * Write a kernel secure storage value.
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700161 *
162 * @param ctx Context pointer
163 * @param param Parameter to write
164 * @param value New value
165 * @return VB2_SUCCESS, or non-zero error code if error.
166 */
Joel Kitchingfbde3aa2019-08-27 17:13:55 +0800167vb2_error_t vb2_secdata_kernel_set(struct vb2_context *ctx,
168 enum vb2_secdata_kernel_param param,
169 uint32_t value);
Randall Spanglerbf9c2762015-05-12 13:44:30 -0700170
Joel Kitching9adf2aa2019-08-20 17:43:50 +0800171#endif /* VBOOT_REFERENCE_2SECDATA_H_ */