Dependencies:   MMA7660 LM75B

Committer:
MACRUM
Date:
Sat Jun 30 01:40:30 2018 +0000
Revision:
0:119624335925
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:119624335925 1 // ----------------------------------------------------------------------------
MACRUM 0:119624335925 2 // Copyright 2016-2017 ARM Ltd.
MACRUM 0:119624335925 3 //
MACRUM 0:119624335925 4 // SPDX-License-Identifier: Apache-2.0
MACRUM 0:119624335925 5 //
MACRUM 0:119624335925 6 // Licensed under the Apache License, Version 2.0 (the "License");
MACRUM 0:119624335925 7 // you may not use this file except in compliance with the License.
MACRUM 0:119624335925 8 // You may obtain a copy of the License at
MACRUM 0:119624335925 9 //
MACRUM 0:119624335925 10 // http://www.apache.org/licenses/LICENSE-2.0
MACRUM 0:119624335925 11 //
MACRUM 0:119624335925 12 // Unless required by applicable law or agreed to in writing, software
MACRUM 0:119624335925 13 // distributed under the License is distributed on an "AS IS" BASIS,
MACRUM 0:119624335925 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 0:119624335925 15 // See the License for the specific language governing permissions and
MACRUM 0:119624335925 16 // limitations under the License.
MACRUM 0:119624335925 17 // ----------------------------------------------------------------------------
MACRUM 0:119624335925 18
MACRUM 0:119624335925 19 #ifndef ARM_UC_MM_CONTEXT_TYPES_H
MACRUM 0:119624335925 20 #define ARM_UC_MM_CONTEXT_TYPES_H
MACRUM 0:119624335925 21
MACRUM 0:119624335925 22 #include "update-client-manifest-manager/update-client-manifest-types.h"
MACRUM 0:119624335925 23 #include "update-client-manifest-manager/../source/arm_uc_mmConfig.h"
MACRUM 0:119624335925 24 #include "update-client-common/arm_uc_error.h"
MACRUM 0:119624335925 25 #include "update-client-common/arm_uc_types.h"
MACRUM 0:119624335925 26 #include "update-client-common/arm_uc_scheduler.h"
MACRUM 0:119624335925 27 #include "update-client-manifest-manager/arm-pal-kv.h"
MACRUM 0:119624335925 28
MACRUM 0:119624335925 29
MACRUM 0:119624335925 30 struct arm_uc_mmInitContext_t {
MACRUM 0:119624335925 31 uint64_t timestamp;
MACRUM 0:119624335925 32 uint32_t state;
MACRUM 0:119624335925 33 arm_uc_buffer_t manifest;
MACRUM 0:119624335925 34 arm_uc_buffer_t keyPath;
MACRUM 0:119624335925 35 uint32_t loopCounters[1];
MACRUM 0:119624335925 36
MACRUM 0:119624335925 37 arm_uc_callback_t callbackStorage; // initialized in hub
MACRUM 0:119624335925 38 struct {
MACRUM 0:119624335925 39 unsigned root:1;
MACRUM 0:119624335925 40 unsigned depidx:3;
MACRUM 0:119624335925 41 unsigned missingDep:1;
MACRUM 0:119624335925 42 };
MACRUM 0:119624335925 43 uint8_t rootManifestBasePath[sizeof(MANIFEST_PREFIX ".." ) + CFSTORE_HASH_ID_SIZE];
MACRUM 0:119624335925 44 uint8_t pathBuffer[220];
MACRUM 0:119624335925 45 uint8_t manifestBuffer[640];
MACRUM 0:119624335925 46 uint8_t currentHash [MAX_HASH_BYTES];
MACRUM 0:119624335925 47
MACRUM 0:119624335925 48 };
MACRUM 0:119624335925 49
MACRUM 0:119624335925 50 struct arm_uc_mm_get_latest_ts_context {
MACRUM 0:119624335925 51 uint64_t current_ts;
MACRUM 0:119624335925 52 uint64_t* max_ts;
MACRUM 0:119624335925 53 uint32_t state;
MACRUM 0:119624335925 54 arm_uc_buffer_t current_data;
MACRUM 0:119624335925 55 arm_uc_buffer_t max_ts_key;
MACRUM 0:119624335925 56 };
MACRUM 0:119624335925 57
MACRUM 0:119624335925 58 enum arm_uc_mm_pk_sig_state {
MACRUM 0:119624335925 59 UCMM_PKSIG_STATE_INVALID = 0,
MACRUM 0:119624335925 60 UCMM_PKSIG_STATE_FIND_CA,
MACRUM 0:119624335925 61 UCMM_PKSIG_STATE_FINDING_CA,
MACRUM 0:119624335925 62 UCMM_PKSIG_STATE_CHECK,
MACRUM 0:119624335925 63 UCMM_PKSIG_STATE_IDLE,
MACRUM 0:119624335925 64 };
MACRUM 0:119624335925 65
MACRUM 0:119624335925 66 typedef struct arm_uc_mm_validate_signature_context{
MACRUM 0:119624335925 67 enum arm_uc_mm_pk_sig_state state;
MACRUM 0:119624335925 68 void (* applicationEventHandler)(uint32_t);
MACRUM 0:119624335925 69 arm_uc_buffer_t fingerprint;
MACRUM 0:119624335925 70 arm_uc_buffer_t certList;
MACRUM 0:119624335925 71 arm_uc_buffer_t cert;
MACRUM 0:119624335925 72 arm_uc_buffer_t* manifest;
MACRUM 0:119624335925 73 arm_uc_error_t storedError;
MACRUM 0:119624335925 74 uint32_t sigIndex;
MACRUM 0:119624335925 75 } arm_uc_mm_validate_signature_context_t;
MACRUM 0:119624335925 76
MACRUM 0:119624335925 77 #define ARM_UC_MM_FW_STATE_LIST\
MACRUM 0:119624335925 78 ENUM_FIXED(ARM_UC_MM_FW_STATE_INVALID,0)\
MACRUM 0:119624335925 79 ENUM_AUTO(ARM_UC_MM_FW_STATE_IDLE)\
MACRUM 0:119624335925 80 ENUM_AUTO(ARM_UC_MM_FW_STATE_BEGIN)\
MACRUM 0:119624335925 81 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_ROOT)\
MACRUM 0:119624335925 82 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_TS)\
MACRUM 0:119624335925 83 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_NAME)\
MACRUM 0:119624335925 84 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_NEXT_ROOT)\
MACRUM 0:119624335925 85 ENUM_AUTO(ARM_UC_MM_FW_STATE_FORMAT_ROOT_PREFIX)\
MACRUM 0:119624335925 86 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_MANIFEST)\
MACRUM 0:119624335925 87 ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_MANIFEST)\
MACRUM 0:119624335925 88 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_ROOT)\
MACRUM 0:119624335925 89 ENUM_AUTO(ARM_UC_MM_FW_STATE_FIND_URI)\
MACRUM 0:119624335925 90 ENUM_AUTO(ARM_UC_MM_FW_STATE_READ_URI)\
MACRUM 0:119624335925 91 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_URI_KEY)\
MACRUM 0:119624335925 92 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_HASH)\
MACRUM 0:119624335925 93 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_URI)\
MACRUM 0:119624335925 94 ENUM_AUTO(ARM_UC_MM_FW_STATE_FETCH_DEP_HASH)\
MACRUM 0:119624335925 95 ENUM_AUTO(ARM_UC_MM_FW_STATE_GET_FW_REF)\
MACRUM 0:119624335925 96 ENUM_AUTO(ARM_UC_MM_FW_STATE_NOTIFY)\
MACRUM 0:119624335925 97 ENUM_AUTO(ARM_UC_MM_FW_STATE_ROOT_NOTIFY_WAIT)\
MACRUM 0:119624335925 98 ENUM_AUTO(ARM_UC_MM_FW_STATE_NEXT_IMAGE)\
MACRUM 0:119624335925 99 ENUM_AUTO(ARM_UC_MM_FW_STATE_DONE)\
MACRUM 0:119624335925 100
MACRUM 0:119624335925 101
MACRUM 0:119624335925 102 enum arm_uc_mm_fw_state {
MACRUM 0:119624335925 103 #define ENUM_AUTO(name) name,
MACRUM 0:119624335925 104 #define ENUM_FIXED(name, val) name = val,
MACRUM 0:119624335925 105 ARM_UC_MM_FW_STATE_LIST
MACRUM 0:119624335925 106 #undef ENUM_AUTO
MACRUM 0:119624335925 107 #undef ENUM_FIXED
MACRUM 0:119624335925 108 };
MACRUM 0:119624335925 109
MACRUM 0:119624335925 110 struct arm_uc_mm_fw_context_t {
MACRUM 0:119624335925 111 struct arm_uc_mm_get_latest_ts_context getLatestTs;
MACRUM 0:119624335925 112 uint64_t ts;
MACRUM 0:119624335925 113 arm_uc_manifest_handle_t* ID;
MACRUM 0:119624335925 114 enum arm_uc_mm_fw_state state;
MACRUM 0:119624335925 115 struct manifest_firmware_info_t* info;
MACRUM 0:119624335925 116 arm_uc_callback_t callbackStorage; // initialized in hub
MACRUM 0:119624335925 117 arm_uc_buffer_t current_data;
MACRUM 0:119624335925 118 char hashIDbuffer[CFSTORE_HASH_ID_SIZE];
MACRUM 0:119624335925 119 uint8_t keyBuffer[ARM_PAL_KV_KEY_MAX_PATH];
MACRUM 0:119624335925 120 };
MACRUM 0:119624335925 121
MACRUM 0:119624335925 122 #define ARM_UC_MM_INS_STATE_LIST\
MACRUM 0:119624335925 123 ENUM_FIXED(ARM_UC_MM_INS_STATE_INVALID,0)\
MACRUM 0:119624335925 124 ENUM_AUTO(ARM_UC_MM_INS_STATE_IDLE)\
MACRUM 0:119624335925 125 ENUM_AUTO(ARM_UC_MM_INS_STATE_BEGIN)\
MACRUM 0:119624335925 126 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_BASIC_PARAMS)\
MACRUM 0:119624335925 127 ENUM_AUTO(ARM_UC_MM_INS_STATE_HASH_VERIFY)\
MACRUM 0:119624335925 128 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_LOOP)\
MACRUM 0:119624335925 129 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_START)\
MACRUM 0:119624335925 130 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_SIG_WAIT)\
MACRUM 0:119624335925 131 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_PARAMS)\
MACRUM 0:119624335925 132 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_APP)\
MACRUM 0:119624335925 133 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_FAIL)\
MACRUM 0:119624335925 134 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_DONE)\
MACRUM 0:119624335925 135 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_BEGIN)\
MACRUM 0:119624335925 136 ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCHING)\
MACRUM 0:119624335925 137 ENUM_AUTO(ARM_UC_MM_INS_STATE_MATCH_FETCHING)\
MACRUM 0:119624335925 138 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST_BEGIN)\
MACRUM 0:119624335925 139 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_MANIFEST)\
MACRUM 0:119624335925 140 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_URI)\
MACRUM 0:119624335925 141 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_FW_HASH)\
MACRUM 0:119624335925 142 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_AES)\
MACRUM 0:119624335925 143 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_DEPS)\
MACRUM 0:119624335925 144 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEPSTART)\
MACRUM 0:119624335925 145 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_WAITING)\
MACRUM 0:119624335925 146 ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION)\
MACRUM 0:119624335925 147 ENUM_AUTO(ARM_UC_MM_INS_STATE_COMPLETION_FINDING)\
MACRUM 0:119624335925 148 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS_START)\
MACRUM 0:119624335925 149 ENUM_AUTO(ARM_UC_MM_INS_STATE_VERIFY_TS)\
MACRUM 0:119624335925 150 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS_START)\
MACRUM 0:119624335925 151 ENUM_AUTO(ARM_UC_MM_INS_STATE_STORE_TS)\
MACRUM 0:119624335925 152 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECK)\
MACRUM 0:119624335925 153 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_CHECKING)\
MACRUM 0:119624335925 154 ENUM_AUTO(ARM_UC_MM_INS_STATE_DEP_DELETE)\
MACRUM 0:119624335925 155 ENUM_AUTO(ARM_UC_MM_INS_STATE_DONE)\
MACRUM 0:119624335925 156 ENUM_AUTO(ARM_UC_MM_INS_STATE_ALERT)\
MACRUM 0:119624335925 157
MACRUM 0:119624335925 158
MACRUM 0:119624335925 159 enum arm_uc_mm_insert_state {
MACRUM 0:119624335925 160 #define ENUM_AUTO(name) name,
MACRUM 0:119624335925 161 #define ENUM_FIXED(name, val) name = val,
MACRUM 0:119624335925 162 ARM_UC_MM_INS_STATE_LIST
MACRUM 0:119624335925 163 #undef ENUM_AUTO
MACRUM 0:119624335925 164 #undef ENUM_FIXED
MACRUM 0:119624335925 165 };
MACRUM 0:119624335925 166
MACRUM 0:119624335925 167 struct arm_uc_mmInsertContext_t {
MACRUM 0:119624335925 168 struct arm_uc_mm_get_latest_ts_context getLatestTs;
MACRUM 0:119624335925 169 arm_uc_mm_validate_signature_context_t signatureContext;
MACRUM 0:119624335925 170 uint64_t max_ts;
MACRUM 0:119624335925 171 uint64_t current_ts;
MACRUM 0:119624335925 172 arm_uc_manifest_handle_t* ID;
MACRUM 0:119624335925 173 enum arm_uc_mm_insert_state state;
MACRUM 0:119624335925 174 arm_uc_callback_t callbackStorage; // initialized in hub
MACRUM 0:119624335925 175 arm_uc_buffer_t manifest;
MACRUM 0:119624335925 176 arm_uc_mm_crypto_flags_t cryptoMode;
MACRUM 0:119624335925 177 arm_uc_buffer_t certificateStorage;
MACRUM 0:119624335925 178 uint32_t loopCounters[1];
MACRUM 0:119624335925 179 };
MACRUM 0:119624335925 180
MACRUM 0:119624335925 181 struct arm_uc_mmContext_t {
MACRUM 0:119624335925 182 // Operational Contexts
MACRUM 0:119624335925 183 union {
MACRUM 0:119624335925 184 struct arm_uc_mmInitContext_t init;
MACRUM 0:119624335925 185 struct arm_uc_mm_fw_context_t getFw;
MACRUM 0:119624335925 186 struct arm_uc_mmInsertContext_t insert;
MACRUM 0:119624335925 187 };
MACRUM 0:119624335925 188 };
MACRUM 0:119624335925 189 typedef struct arm_uc_mmContext_t arm_uc_mmContext_t;
MACRUM 0:119624335925 190
MACRUM 0:119624335925 191
MACRUM 0:119624335925 192 enum arm_uc_mmState_t {
MACRUM 0:119624335925 193 ARM_UC_MM_STATE_INVALID=0,
MACRUM 0:119624335925 194 ARM_UC_MM_STATE_IDLE,
MACRUM 0:119624335925 195 ARM_UC_MM_STATE_INIT,
MACRUM 0:119624335925 196 ARM_UC_MM_STATE_INSERTING,
MACRUM 0:119624335925 197 ARM_UC_MM_STATE_STORING_CA,
MACRUM 0:119624335925 198 ARM_UC_MM_STATE_FWINFO,
MACRUM 0:119624335925 199 ARM_UC_MM_STATE_TEST,
MACRUM 0:119624335925 200 };
MACRUM 0:119624335925 201
MACRUM 0:119624335925 202 typedef void (*ARM_UC_mmTestHook_t)(const char*, arm_uc_mmContext_t*, uint32_t, uint32_t, arm_uc_error_t);
MACRUM 0:119624335925 203
MACRUM 0:119624335925 204 struct arm_uc_mmPersistentContext_t {
MACRUM 0:119624335925 205 enum arm_uc_mmState_t state;
MACRUM 0:119624335925 206 arm_uc_error_t reportedError;
MACRUM 0:119624335925 207 const char* errorFile;
MACRUM 0:119624335925 208 uint32_t errorLine;
MACRUM 0:119624335925 209 struct arm_uc_mmContext_t** ctx;
MACRUM 0:119624335925 210 arm_uc_callback_t applicationCallbackStorage; // initialized in mmCommon
MACRUM 0:119624335925 211 void (*applicationEventHandler)(uint32_t);
MACRUM 0:119624335925 212 arm_uc_error_t (*testFSM)(uint32_t event);
MACRUM 0:119624335925 213 #if ARM_UC_MM_ENABLE_TEST_VECTORS
MACRUM 0:119624335925 214 ARM_UC_mmTestHook_t testHook;
MACRUM 0:119624335925 215 #endif
MACRUM 0:119624335925 216 };
MACRUM 0:119624335925 217
MACRUM 0:119624335925 218 typedef struct arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext_t;
MACRUM 0:119624335925 219 extern arm_uc_mmPersistentContext_t arm_uc_mmPersistentContext;
MACRUM 0:119624335925 220
MACRUM 0:119624335925 221 static inline arm_uc_mmContext_t* arm_uc_mmBuf2Context(arm_uc_buffer_t* b) {
MACRUM 0:119624335925 222 return (arm_uc_mmContext_t*)b->ptr;
MACRUM 0:119624335925 223 }
MACRUM 0:119624335925 224
MACRUM 0:119624335925 225 static inline arm_uc_error_t arm_uc_mmContextBufSizeCheck(arm_uc_buffer_t* b) {
MACRUM 0:119624335925 226 arm_uc_error_t err = { .code = MFST_ERR_NONE };
MACRUM 0:119624335925 227 if (b->size_max < sizeof(arm_uc_mmContext_t)) {
MACRUM 0:119624335925 228 err.code = MFST_ERR_SIZE;
MACRUM 0:119624335925 229 return err;
MACRUM 0:119624335925 230 }
MACRUM 0:119624335925 231 return err;
MACRUM 0:119624335925 232 }
MACRUM 0:119624335925 233
MACRUM 0:119624335925 234
MACRUM 0:119624335925 235 #endif // ARM_UC_MM_CONTEXT_TYPES_H