mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * SPDX-License-Identifier: BSD-3-Clause
kenjiArai 0:5b88d5760320 5 *
kenjiArai 0:5b88d5760320 6 */
kenjiArai 0:5b88d5760320 7
kenjiArai 0:5b88d5760320 8 #ifndef __TFM_BOOT_STATUS_H__
kenjiArai 0:5b88d5760320 9 #define __TFM_BOOT_STATUS_H__
kenjiArai 0:5b88d5760320 10
kenjiArai 0:5b88d5760320 11 #include <stdint.h>
kenjiArai 0:5b88d5760320 12 #include <stddef.h>
kenjiArai 0:5b88d5760320 13
kenjiArai 0:5b88d5760320 14
kenjiArai 0:5b88d5760320 15 #ifdef __cplusplus
kenjiArai 0:5b88d5760320 16 extern "C" {
kenjiArai 0:5b88d5760320 17 #endif
kenjiArai 0:5b88d5760320 18
kenjiArai 0:5b88d5760320 19 /* Major numbers (4 bit) to identify
kenjiArai 0:5b88d5760320 20 * the consumer of shared data in runtime SW
kenjiArai 0:5b88d5760320 21 */
kenjiArai 0:5b88d5760320 22 #define TLV_MAJOR_CORE 0x0
kenjiArai 0:5b88d5760320 23 #define TLV_MAJOR_IAS 0x1
kenjiArai 0:5b88d5760320 24
kenjiArai 0:5b88d5760320 25 /**
kenjiArai 0:5b88d5760320 26 * The shared data between boot loader and runtime SW is TLV encoded. The
kenjiArai 0:5b88d5760320 27 * shared data is stored in a well known location in secure memory and this is
kenjiArai 0:5b88d5760320 28 * a contract between boot loader and runtime SW.
kenjiArai 0:5b88d5760320 29 *
kenjiArai 0:5b88d5760320 30 * The structure of shared data must be the following:
kenjiArai 0:5b88d5760320 31 * - At the beginning there must be a header: struct shared_data_tlv_header
kenjiArai 0:5b88d5760320 32 * This contains a magic number and a size field which covers the entire
kenjiArai 0:5b88d5760320 33 * size of the shared data area including this header.
kenjiArai 0:5b88d5760320 34 * - After the header there come the entries which are composed from an entry
kenjiArai 0:5b88d5760320 35 * header structure: struct shared_data_tlv_entry and the data. In the entry
kenjiArai 0:5b88d5760320 36 * header is a type field (tly_type) which identify the consumer of the
kenjiArai 0:5b88d5760320 37 * entry in the runtime SW and specify the subtype of that data item. There
kenjiArai 0:5b88d5760320 38 * is a size field (tlv_len) which covers the size of the entry header and
kenjiArai 0:5b88d5760320 39 * the data. After this structure comes the actual data.
kenjiArai 0:5b88d5760320 40 * - Arbitrary number and size of data entry can be in the shared memory area.
kenjiArai 0:5b88d5760320 41 *
kenjiArai 0:5b88d5760320 42 * This table gives of overview about the tlv_type field in the entry header.
kenjiArai 0:5b88d5760320 43 * The tlv_type always composed from a major and minor number. Major number
kenjiArai 0:5b88d5760320 44 * identifies the addressee in runtime SW, who should process the data entry.
kenjiArai 0:5b88d5760320 45 * Minor number used to encode more info about the data entry. The actual
kenjiArai 0:5b88d5760320 46 * definition of minor number could change per major number. In case of boot
kenjiArai 0:5b88d5760320 47 * status data, which is going to be processed by initial attestation service
kenjiArai 0:5b88d5760320 48 * the minor number is split further to two part: sw_module and claim. The
kenjiArai 0:5b88d5760320 49 * sw_module identifies the SW component in the system which the data item
kenjiArai 0:5b88d5760320 50 * belongs to and the claim part identifies the exact type of the data.
kenjiArai 0:5b88d5760320 51 *
kenjiArai 0:5b88d5760320 52 * |---------------------------------------|
kenjiArai 0:5b88d5760320 53 * | tlv_type (16) |
kenjiArai 0:5b88d5760320 54 * |---------------------------------------|
kenjiArai 0:5b88d5760320 55 * | tlv_major(4)| tlv_minor(12) |
kenjiArai 0:5b88d5760320 56 * |---------------------------------------|
kenjiArai 0:5b88d5760320 57 * | MAJOR_IAS | sw_module(6) | claim(6) |
kenjiArai 0:5b88d5760320 58 * |---------------------------------------|
kenjiArai 0:5b88d5760320 59 * | MAJOR_CORE | TBD |
kenjiArai 0:5b88d5760320 60 * |---------------------------------------|
kenjiArai 0:5b88d5760320 61 */
kenjiArai 0:5b88d5760320 62
kenjiArai 0:5b88d5760320 63 /* Initial attestation: SW components / SW modules
kenjiArai 0:5b88d5760320 64 * This list is intended to be adjusted per device. It contains more SW
kenjiArai 0:5b88d5760320 65 * components than currently available in TF-M project. It serves as an example,
kenjiArai 0:5b88d5760320 66 * what kind of SW components might be available.
kenjiArai 0:5b88d5760320 67 */
kenjiArai 0:5b88d5760320 68 #define SW_GENERAL 0x00
kenjiArai 0:5b88d5760320 69 #define SW_BL2 0x01
kenjiArai 0:5b88d5760320 70 #define SW_PROT 0x02
kenjiArai 0:5b88d5760320 71 #define SW_AROT 0x03
kenjiArai 0:5b88d5760320 72 #define SW_SPE 0x04
kenjiArai 0:5b88d5760320 73 #define SW_NSPE 0x05
kenjiArai 0:5b88d5760320 74 #define SW_S_NS 0x06
kenjiArai 0:5b88d5760320 75 #define SW_MAX 0x07
kenjiArai 0:5b88d5760320 76
kenjiArai 0:5b88d5760320 77 /* Initial attestation: Claim per SW components / SW modules */
kenjiArai 0:5b88d5760320 78 /* Bits: 0-2 */
kenjiArai 0:5b88d5760320 79 #define SW_VERSION 0x00
kenjiArai 0:5b88d5760320 80 #define SW_SIGNER_ID 0x01
kenjiArai 0:5b88d5760320 81 #define SW_EPOCH 0x02
kenjiArai 0:5b88d5760320 82 #define SW_TYPE 0x03
kenjiArai 0:5b88d5760320 83 /* Bits: 3-5 */
kenjiArai 0:5b88d5760320 84 #define SW_MEASURE_VALUE 0x08
kenjiArai 0:5b88d5760320 85 #define SW_MEASURE_TYPE 0x09
kenjiArai 0:5b88d5760320 86
kenjiArai 0:5b88d5760320 87 /* Initial attestation: General claim does not belong any particular SW
kenjiArai 0:5b88d5760320 88 * component. But they might be part of the boot status.
kenjiArai 0:5b88d5760320 89 */
kenjiArai 0:5b88d5760320 90 #define BOOT_SEED 0x00
kenjiArai 0:5b88d5760320 91 #define HW_VERSION 0x01
kenjiArai 0:5b88d5760320 92 #define SECURITY_LIFECYCLE 0x02
kenjiArai 0:5b88d5760320 93
kenjiArai 0:5b88d5760320 94 /* Minor numbers (12 bit) to identify attestation service related data */
kenjiArai 0:5b88d5760320 95 #define TLV_MINOR_IAS_BOOT_SEED ((SW_GENERAL << 6) | BOOT_SEED)
kenjiArai 0:5b88d5760320 96 #define TLV_MINOR_IAS_HW_VERSION ((SW_GENERAL << 6) | HW_VERSION)
kenjiArai 0:5b88d5760320 97 #define TLV_MINOR_IAS_SLC ((SW_GENERAL << 6) | SECURITY_LIFECYCLE)
kenjiArai 0:5b88d5760320 98
kenjiArai 0:5b88d5760320 99 /* Bootloader - It can be more stage */
kenjiArai 0:5b88d5760320 100 #define TLV_MINOR_IAS_BL2_MEASURE_VALUE ((SW_BL2 << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 101 #define TLV_MINOR_IAS_BL2_MEASURE_TYPE ((SW_BL2 << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 102 #define TLV_MINOR_IAS_BL2_VERSION ((SW_BL2 << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 103 #define TLV_MINOR_IAS_BL2_SIGNER_ID ((SW_BL2 << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 104 #define TLV_MINOR_IAS_BL2_EPOCH ((SW_BL2 << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 105 #define TLV_MINOR_IAS_BL2_TYPE ((SW_BL2 << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 106
kenjiArai 0:5b88d5760320 107 /* PROT: PSA Root of Trust */
kenjiArai 0:5b88d5760320 108 #define TLV_MINOR_IAS_PROT_MEASURE_VALUE ((SW_PROT << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 109 #define TLV_MINOR_IAS_PROT_MEASURE_TYPE ((SW_PROT << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 110 #define TLV_MINOR_IAS_PROT_VERSION ((SW_PROT << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 111 #define TLV_MINOR_IAS_PROT_SIGNER_ID ((SW_PROT << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 112 #define TLV_MINOR_IAS_PROT_EPOCH ((SW_PROT << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 113 #define TLV_MINOR_IAS_PROT_TYPE ((SW_PROT << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 114
kenjiArai 0:5b88d5760320 115 /* AROT: Application Root of Trust */
kenjiArai 0:5b88d5760320 116 #define TLV_MINOR_IAS_AROT_MEASURE_VALUE ((SW_AROT << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 117 #define TLV_MINOR_IAS_AROT_MEASURE_TYPE ((SW_AROT << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 118 #define TLV_MINOR_IAS_AROT_VERSION ((SW_AROT << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 119 #define TLV_MINOR_IAS_AROT_SIGNER_ID ((SW_AROT << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 120 #define TLV_MINOR_IAS_AROT_EPOCH ((SW_AROT << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 121 #define TLV_MINOR_IAS_AROT_TYPE ((SW_AROT << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 122
kenjiArai 0:5b88d5760320 123 /* Non-secure processing environment - single non-secure image */
kenjiArai 0:5b88d5760320 124 #define TLV_MINOR_IAS_NSPE_MEASURE_VALUE ((SW_NSPE << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 125 #define TLV_MINOR_IAS_NSPE_MEASURE_TYPE ((SW_NSPE << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 126 #define TLV_MINOR_IAS_NSPE_VERSION ((SW_NSPE << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 127 #define TLV_MINOR_IAS_NSPE_SIGNER_ID ((SW_NSPE << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 128 #define TLV_MINOR_IAS_NSPE_EPOCH ((SW_NSPE << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 129 #define TLV_MINOR_IAS_NSPE_TYPE ((SW_NSPE << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 130
kenjiArai 0:5b88d5760320 131 /* Secure processing environment (ARoT + PRoT) - single secure image */
kenjiArai 0:5b88d5760320 132 #define TLV_MINOR_IAS_SPE_MEASURE_VALUE ((SW_SPE << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 133 #define TLV_MINOR_IAS_SPE_MEASURE_TYPE ((SW_SPE << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 134 #define TLV_MINOR_IAS_SPE_VERSION ((SW_SPE << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 135 #define TLV_MINOR_IAS_SPE_SIGNER_ID ((SW_SPE << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 136 #define TLV_MINOR_IAS_SPE_EPOCH ((SW_SPE << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 137 #define TLV_MINOR_IAS_SPE_TYPE ((SW_SPE << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 138
kenjiArai 0:5b88d5760320 139 /* SPE + NSPE - combined secure and non-secure image */
kenjiArai 0:5b88d5760320 140 #define TLV_MINOR_IAS_S_NS_MEASURE_VALUE ((SW_S_NS << 6) | SW_MEASURE_VALUE)
kenjiArai 0:5b88d5760320 141 #define TLV_MINOR_IAS_S_NS_MEASURE_TYPE ((SW_S_NS << 6) | SW_MEASURE_TYPE)
kenjiArai 0:5b88d5760320 142 #define TLV_MINOR_IAS_S_NS_VERSION ((SW_S_NS << 6) | SW_VERSION)
kenjiArai 0:5b88d5760320 143 #define TLV_MINOR_IAS_S_NS_SIGNER_ID ((SW_S_NS << 6) | SW_SIGNER_ID)
kenjiArai 0:5b88d5760320 144 #define TLV_MINOR_IAS_S_NS_EPOCH ((SW_S_NS << 6) | SW_EPOCH)
kenjiArai 0:5b88d5760320 145 #define TLV_MINOR_IAS_S_NS_TYPE ((SW_S_NS << 6) | SW_TYPE)
kenjiArai 0:5b88d5760320 146
kenjiArai 0:5b88d5760320 147 /* General macros to handle TLV type */
kenjiArai 0:5b88d5760320 148 #define MAJOR_MASK 0xF /* 4 bit */
kenjiArai 0:5b88d5760320 149 #define MAJOR_POS 12 /* 12 bit */
kenjiArai 0:5b88d5760320 150 #define MINOR_MASK 0xFFF /* 12 bit */
kenjiArai 0:5b88d5760320 151
kenjiArai 0:5b88d5760320 152 #define SET_TLV_TYPE(major, minor) \
kenjiArai 0:5b88d5760320 153 ((((major) & MAJOR_MASK) << MAJOR_POS) | ((minor) & MINOR_MASK))
kenjiArai 0:5b88d5760320 154 #define GET_MAJOR(tlv_type) ((tlv_type) >> MAJOR_POS)
kenjiArai 0:5b88d5760320 155 #define GET_MINOR(tlv_type) ((tlv_type) & MINOR_MASK)
kenjiArai 0:5b88d5760320 156
kenjiArai 0:5b88d5760320 157 /* Initial attestation specific macros */
kenjiArai 0:5b88d5760320 158 #define MODULE_POS 6 /* 6 bit */
kenjiArai 0:5b88d5760320 159 #define CLAIM_MASK 0x3F /* 6 bit */
kenjiArai 0:5b88d5760320 160 #define MEASUREMENT_CLAIM_POS 3 /* 3 bit */
kenjiArai 0:5b88d5760320 161
kenjiArai 0:5b88d5760320 162 #define GET_IAS_MODULE(tlv_type) (GET_MINOR(tlv_type) >> MODULE_POS)
kenjiArai 0:5b88d5760320 163 #define GET_IAS_CLAIM(tlv_type) (GET_MINOR(tlv_type) & CLAIM_MASK)
kenjiArai 0:5b88d5760320 164 #define SET_IAS_MINOR(sw_module, claim) (((sw_module) << 6) | (claim))
kenjiArai 0:5b88d5760320 165
kenjiArai 0:5b88d5760320 166 #define GET_IAS_MEASUREMENT_CLAIM(ias_claim) ((ias_claim) >> \
kenjiArai 0:5b88d5760320 167 MEASUREMENT_CLAIM_POS)
kenjiArai 0:5b88d5760320 168
kenjiArai 0:5b88d5760320 169 /* Magic value which marks the beginning of shared data area in memory */
kenjiArai 0:5b88d5760320 170 #define SHARED_DATA_TLV_INFO_MAGIC 0x2016
kenjiArai 0:5b88d5760320 171
kenjiArai 0:5b88d5760320 172 /**
kenjiArai 0:5b88d5760320 173 * Shared data TLV header. All fields in little endian.
kenjiArai 0:5b88d5760320 174 *
kenjiArai 0:5b88d5760320 175 * -----------------------------------
kenjiArai 0:5b88d5760320 176 * | tlv_magic(16) | tlv_tot_len(16) |
kenjiArai 0:5b88d5760320 177 * -----------------------------------
kenjiArai 0:5b88d5760320 178 */
kenjiArai 0:5b88d5760320 179 struct shared_data_tlv_header {
kenjiArai 0:5b88d5760320 180 uint16_t tlv_magic;
kenjiArai 0:5b88d5760320 181 uint16_t tlv_tot_len; /* size of whole TLV area (including this header) */
kenjiArai 0:5b88d5760320 182 };
kenjiArai 0:5b88d5760320 183
kenjiArai 0:5b88d5760320 184 #define SHARED_DATA_HEADER_SIZE sizeof(struct shared_data_tlv_header)
kenjiArai 0:5b88d5760320 185
kenjiArai 0:5b88d5760320 186 /**
kenjiArai 0:5b88d5760320 187 * Shared data TLV entry header format. All fields in little endian.
kenjiArai 0:5b88d5760320 188 *
kenjiArai 0:5b88d5760320 189 * -------------------------------
kenjiArai 0:5b88d5760320 190 * | tlv_type(16) | tlv_len(16) |
kenjiArai 0:5b88d5760320 191 * -------------------------------
kenjiArai 0:5b88d5760320 192 * | Raw data |
kenjiArai 0:5b88d5760320 193 * -------------------------------
kenjiArai 0:5b88d5760320 194 */
kenjiArai 0:5b88d5760320 195 struct shared_data_tlv_entry {
kenjiArai 0:5b88d5760320 196 uint16_t tlv_type;
kenjiArai 0:5b88d5760320 197 uint16_t tlv_len; /* size of single TLV entry (including this header). */
kenjiArai 0:5b88d5760320 198 };
kenjiArai 0:5b88d5760320 199
kenjiArai 0:5b88d5760320 200 /**
kenjiArai 0:5b88d5760320 201 * \struct tfm_boot_data
kenjiArai 0:5b88d5760320 202 *
kenjiArai 0:5b88d5760320 203 * \brief Store the data for the runtime SW
kenjiArai 0:5b88d5760320 204 */
kenjiArai 0:5b88d5760320 205 struct tfm_boot_data {
kenjiArai 0:5b88d5760320 206 struct shared_data_tlv_header header;
kenjiArai 0:5b88d5760320 207 uint8_t data[];
kenjiArai 0:5b88d5760320 208 };
kenjiArai 0:5b88d5760320 209
kenjiArai 0:5b88d5760320 210 #define SHARED_DATA_ENTRY_HEADER_SIZE sizeof(struct shared_data_tlv_entry)
kenjiArai 0:5b88d5760320 211 #define SHARED_DATA_ENTRY_SIZE(size) (size + SHARED_DATA_ENTRY_HEADER_SIZE)
kenjiArai 0:5b88d5760320 212
kenjiArai 0:5b88d5760320 213 #ifdef __cplusplus
kenjiArai 0:5b88d5760320 214 }
kenjiArai 0:5b88d5760320 215 #endif
kenjiArai 0:5b88d5760320 216
kenjiArai 0:5b88d5760320 217 #endif /* __TFM_BOOT_STATUS_H__ */