diff options
-rw-r--r-- | firmware/2lib/2nvstorage.c | 57 | ||||
-rw-r--r-- | firmware/2lib/include/2nvstorage_fields.h | 67 | ||||
-rw-r--r-- | firmware/include/vb2_api.h | 1 |
3 files changed, 69 insertions, 56 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c index 5c7b9800..68a4dad0 100644 --- a/firmware/2lib/2nvstorage.c +++ b/firmware/2lib/2nvstorage.c @@ -10,62 +10,7 @@ #include "2crc8.h" #include "2misc.h" #include "2nvstorage.h" - -/* - * Constants for NV storage. We use this rather than structs and bitfields so - * the data format is consistent across platforms and compilers. Total NV - * storage size is VB2_NVDATA_SIZE = 16 bytes. - * - * These constants must match the equivalent constants in - * lib/vboot_nvstorage.c. (We currently don't share a common header file - * because we're tring to keep the two libs independent, and we hope to - * deprecate that one.) - */ - -enum vb2_nv_offset { - VB2_NV_OFFS_HEADER = 0, - VB2_NV_OFFS_BOOT = 1, - VB2_NV_OFFS_RECOVERY = 2, - VB2_NV_OFFS_LOCALIZATION = 3, - VB2_NV_OFFS_DEV = 4, - VB2_NV_OFFS_TPM = 5, - VB2_NV_OFFS_RECOVERY_SUBCODE = 6, - VB2_NV_OFFS_BOOT2 = 7, - /* Offsets 8-10 are currently unused */ - VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */ - /* CRC must be last field */ - VB2_NV_OFFS_CRC = 15 -}; - -/* Fields in VB2_NV_OFFS_HEADER (unused = 0x0f) */ -#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET 0x10 -#define VB2_NV_HEADER_FW_SETTINGS_RESET 0x20 -#define VB2_NV_HEADER_SIGNATURE 0x40 -#define VB2_NV_HEADER_MASK 0xc0 - -/* Fields in VB2_NV_OFFS_BOOT */ -#define VB2_NV_BOOT_TRY_COUNT_MASK 0x0f -#define VB2_NV_BOOT_BACKUP_NVRAM 0x10 -#define VB2_NV_BOOT_OPROM_NEEDED 0x20 -#define VB2_NV_BOOT_DISABLE_DEV 0x40 -#define VB2_NV_BOOT_DEBUG_RESET 0x80 - -/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */ -#define VB2_NV_BOOT2_RESULT_MASK 0x03 -#define VB2_NV_BOOT2_TRIED 0x04 -#define VB2_NV_BOOT2_TRY_NEXT 0x08 -#define VB2_NV_BOOT2_PREV_RESULT_MASK 0x30 -#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4 /* Number of bits to shift result */ -#define VB2_NV_BOOT2_PREV_TRIED 0x40 - -/* Fields in VB2_NV_OFFS_DEV (unused = 0xf8) */ -#define VB2_NV_DEV_FLAG_USB 0x01 -#define VB2_NV_DEV_FLAG_SIGNED_ONLY 0x02 -#define VB2_NV_DEV_FLAG_LEGACY 0x04 - -/* Fields in VB2_NV_OFFS_TPM (unused = 0xfc) */ -#define VB2_NV_TPM_CLEAR_OWNER_REQUEST 0x01 -#define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02 +#include "2nvstorage_fields.h" static void vb2_nv_regen_crc(struct vb2_context *ctx) { diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h new file mode 100644 index 00000000..a794f383 --- /dev/null +++ b/firmware/2lib/include/2nvstorage_fields.h @@ -0,0 +1,67 @@ +/* Copyright 2015 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 bitfields + */ + +#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ +#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ + +/* + * Constants for NV storage. We use this rather than structs and bitfields so + * the data format is consistent across platforms and compilers. Total NV + * storage size is VB2_NVDATA_SIZE = 16 bytes. + * + * These constants must match the equivalent constants in + * lib/vboot_nvstorage.c. (We currently don't share a common header file + * because we're tring to keep the two libs independent, and we hope to + * deprecate that one.) + */ + +enum vb2_nv_offset { + VB2_NV_OFFS_HEADER = 0, + VB2_NV_OFFS_BOOT = 1, + VB2_NV_OFFS_RECOVERY = 2, + VB2_NV_OFFS_LOCALIZATION = 3, + VB2_NV_OFFS_DEV = 4, + VB2_NV_OFFS_TPM = 5, + VB2_NV_OFFS_RECOVERY_SUBCODE = 6, + VB2_NV_OFFS_BOOT2 = 7, + /* Offsets 8-10 are currently unused */ + VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */ + /* CRC must be last field */ + VB2_NV_OFFS_CRC = 15 +}; + +/* Fields in VB2_NV_OFFS_HEADER (unused = 0x0f) */ +#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET 0x10 +#define VB2_NV_HEADER_FW_SETTINGS_RESET 0x20 +#define VB2_NV_HEADER_SIGNATURE 0x40 +#define VB2_NV_HEADER_MASK 0xc0 + +/* Fields in VB2_NV_OFFS_BOOT */ +#define VB2_NV_BOOT_TRY_COUNT_MASK 0x0f +#define VB2_NV_BOOT_BACKUP_NVRAM 0x10 +#define VB2_NV_BOOT_OPROM_NEEDED 0x20 +#define VB2_NV_BOOT_DISABLE_DEV 0x40 +#define VB2_NV_BOOT_DEBUG_RESET 0x80 + +/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */ +#define VB2_NV_BOOT2_RESULT_MASK 0x03 +#define VB2_NV_BOOT2_TRIED 0x04 +#define VB2_NV_BOOT2_TRY_NEXT 0x08 +#define VB2_NV_BOOT2_PREV_RESULT_MASK 0x30 +#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4 /* Number of bits to shift result */ +#define VB2_NV_BOOT2_PREV_TRIED 0x40 + +/* Fields in VB2_NV_OFFS_DEV (unused = 0xf8) */ +#define VB2_NV_DEV_FLAG_USB 0x01 +#define VB2_NV_DEV_FLAG_SIGNED_ONLY 0x02 +#define VB2_NV_DEV_FLAG_LEGACY 0x04 + +/* Fields in VB2_NV_OFFS_TPM (unused = 0xfc) */ +#define VB2_NV_TPM_CLEAR_OWNER_REQUEST 0x01 +#define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02 + +#endif /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */ diff --git a/firmware/include/vb2_api.h b/firmware/include/vb2_api.h index 0b32a782..d8746d01 100644 --- a/firmware/include/vb2_api.h +++ b/firmware/include/vb2_api.h @@ -24,6 +24,7 @@ * TODO: Make cleaner APIs to this stuff. */ #ifdef NEED_VB20_INTERNALS +#include "../2lib/include/2nvstorage_fields.h" #include "../2lib/include/2struct.h" #include "../lib20/include/vb2_struct.h" #endif |