Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
driver_defs.h
00001 /************************************************************************************** 00002 * Copyright (c) 2016-2017, ARM Limited or its affiliates. All rights reserved * 00003 * * 00004 * This file and the related binary are licensed under the following license: * 00005 * * 00006 * ARM Object Code and Header Files License, v1.0 Redistribution. * 00007 * * 00008 * Redistribution and use of object code, header files, and documentation, without * 00009 * modification, are permitted provided that the following conditions are met: * 00010 * * 00011 * 1) Redistributions must reproduce the above copyright notice and the * 00012 * following disclaimer in the documentation and/or other materials * 00013 * provided with the distribution. * 00014 * * 00015 * 2) Unless to the extent explicitly permitted by law, no reverse * 00016 * engineering, decompilation, or disassembly of is permitted. * 00017 * * 00018 * 3) Redistribution and use is permitted solely for the purpose of * 00019 * developing or executing applications that are targeted for use * 00020 * on an ARM-based product. * 00021 * * 00022 * DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 00023 * CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * 00024 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, * 00025 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * 00026 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * 00027 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * 00028 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * 00029 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 00030 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * 00031 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 00033 **************************************************************************************/ 00034 00035 00036 00037 #ifndef _DRIVER_DEFS_H_ 00038 #define _DRIVER_DEFS_H_ 00039 00040 #ifdef __KERNEL__ 00041 #include <linux/types.h> 00042 #define INT32_MAX 0x7FFFFFFFL 00043 #else 00044 #include <stdint.h> 00045 #endif 00046 00047 #ifndef min 00048 #define min(a, b) ((a) < (b) ? (a) : (b)) 00049 #endif 00050 00051 /****************************************************************************** 00052 * TYPE DEFINITIONS 00053 ******************************************************************************/ 00054 typedef uint32_t drvError_t; 00055 00056 typedef enum aesMode { 00057 CIPHER_NULL_MODE = -1, 00058 CIPHER_ECB = 0, 00059 CIPHER_CBC = 1, 00060 CIPHER_CTR = 2, 00061 CIPHER_CBC_MAC = 3, 00062 CIPHER_CMAC = 7, 00063 CIPHER_RESERVE32B = INT32_MAX 00064 }aesMode_t; 00065 00066 typedef enum hashMode { 00067 HASH_NULL_MODE = -1, 00068 HASH_SHA1 = 0, 00069 HASH_SHA256 = 1, 00070 HASH_SHA224 = 2, 00071 HASH_SHA512 = 3, 00072 HASH_SHA384 = 4, 00073 HASH_RESERVE32B = INT32_MAX 00074 }hashMode_t; 00075 00076 typedef enum DataBlockType { 00077 FIRST_BLOCK, 00078 MIDDLE_BLOCK, 00079 LAST_BLOCK, 00080 RESERVE32B_BLOCK = INT32_MAX 00081 }DataBlockType_t; 00082 00083 typedef enum dataAddrType { 00084 SRAM_ADDR = 0, 00085 DLLI_ADDR = 1, 00086 ADDR_RESERVE32B = INT32_MAX 00087 }dataAddrType_t; 00088 00089 typedef enum cryptoDirection { 00090 CRYPTO_DIRECTION_ENCRYPT = 0, 00091 CRYPTO_DIRECTION_DECRYPT = 1, 00092 00093 CRYPTO_DIRECTION_NUM_OF_ENC_MODES, 00094 CRYPTO_DIRECTION_RESERVE32B = INT32_MAX 00095 }cryptoDirection_t; 00096 00097 typedef enum cryptoKeyType { 00098 RKEK_KEY = 0, 00099 USER_KEY = 1, 00100 PROVISIONING_KEY = 2, 00101 SESSION_KEY = 3, 00102 END_OF_KEYS = INT32_MAX, 00103 }cryptoKeyType_t; 00104 00105 typedef enum cryptoPaddingType { 00106 CRYPTO_PADDING_NONE = 0, 00107 CRYPTO_PADDING_PKCS7 = 1, 00108 CRYPTO_PADDING_RESERVE32B = INT32_MAX 00109 }cryptoPaddingType_t; 00110 00111 typedef enum chachaNonceSize { 00112 NONCE_SIZE_64 = 0, 00113 NONCE_SIZE_96 = 1, 00114 NONCE_SIZE_RESERVE32B = INT32_MAX 00115 }chachaNonceSize_t; 00116 00117 /* The IOT drviers base address */ 00118 #define DRV_MODULE_ERROR_BASE 0x00F00000 00119 #define AES_DRV_MODULE_ERROR_BASE (DRV_MODULE_ERROR_BASE + 0x10000UL) 00120 #define HASH_DRV_MODULE_ERROR_BASE (DRV_MODULE_ERROR_BASE + 0x20000UL) 00121 #define HMAC_DRV_MODULE_ERROR_BASE (DRV_MODULE_ERROR_BASE + 0x30000UL) 00122 #define BYPASS_DRV_MODULE_ERROR_BASE (DRV_MODULE_ERROR_BASE + 0x40000UL) 00123 #define CHACHA_DRV_MODULE_ERROR_BASE (DRV_MODULE_ERROR_BASE + 0x50000UL) 00124 00125 00126 /****************************************************************************** 00127 * AES DEFINITIONS 00128 ******************************************************************************/ 00129 00130 #define AES_BLOCK_SIZE 16 00131 #define AES_BLOCK_SIZE_WORDS (AES_BLOCK_SIZE >> 2) 00132 #define AES_IV_SIZE 16 00133 #define AES_IV_SIZE_WORDS (AES_IV_SIZE >> 2) 00134 #define AES_128_BIT_KEY_SIZE 16 00135 #define AES_128_BIT_KEY_SIZE_WORDS (AES_128_BIT_KEY_SIZE >> 2) 00136 00137 00138 #define ENABLE_AES_CLOCK 0x1UL 00139 #define DISABLE_AES_CLOCK 0x0UL 00140 00141 #define CONFIG_DIN_AES_DOUT_VAL 0x1UL 00142 00143 /* The CRYS AES module errors */ 00144 #define AES_DRV_OK 0 00145 #define AES_DRV_INVALID_USER_CONTEXT_POINTER_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x00UL) 00146 #define AES_DRV_ILLEGAL_OPERATION_MODE_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x01UL) 00147 #define AES_DRV_ILLEGAL_OPERATION_DIRECTION_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x02UL) 00148 #define AES_DRV_ILLEGAL_INPUT_ADDR_MEM_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x03UL) 00149 #define AES_DRV_ILLEGAL_OUTPUT_ADDR_MEM_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x04UL) 00150 #define AES_DRV_ILLEGAL_MEM_SIZE_ERROR (AES_DRV_MODULE_ERROR_BASE + 0x05UL) 00151 00152 00153 /****************************************************************************** 00154 * HASH & HMAC DEFINITIONS 00155 ******************************************************************************/ 00156 00157 /************************ Typedefs ****************************/ 00158 typedef drvError_t (*llf_hash_init_operation_func)(void *); 00159 typedef drvError_t (*llf_hash_update_operation_func)(void *, uint32_t inputDataAddr, uint32_t dataInSize); 00160 typedef drvError_t (*llf_hash_finish_operation_func)(void *); 00161 00162 00163 /* The SHA-1 digest result size */ 00164 #define SHA1_DIGEST_SIZE_IN_WORDS 5 00165 #define SHA1_DIGEST_SIZE_IN_BYTES (SHA1_DIGEST_SIZE_IN_WORDS * sizeof(uint32_t)) 00166 00167 /* The SHA-256 digest result size*/ 00168 #define SHA224_DIGEST_SIZE_IN_WORDS 7 00169 #define SHA224_DIGEST_SIZE_IN_BYTES (SHA224_DIGEST_SIZE_IN_WORDS * sizeof(uint32_t)) 00170 00171 /* The SHA-256 digest result size */ 00172 #define SHA256_DIGEST_SIZE_IN_WORDS 8 00173 #define SHA256_DIGEST_SIZE_IN_BYTES (SHA256_DIGEST_SIZE_IN_WORDS * sizeof(uint32_t)) 00174 00175 /* The SHA-384 digest result size*/ 00176 #define SHA384_DIGEST_SIZE_IN_WORDS 12 00177 #define SHA384_DIGEST_SIZE_IN_BYTES (SHA384_DIGEST_SIZE_IN_WORDS * sizeof(uint32_t)) 00178 00179 /* The SHA-512 digest result size in bytes */ 00180 #define SHA512_DIGEST_SIZE_IN_WORDS 16 00181 #define SHA512_DIGEST_SIZE_IN_BYTES (SHA512_DIGEST_SIZE_IN_WORDS * sizeof(uint32_t)) 00182 00183 00184 #define MAX_DIGEST_SIZE_WORDS SHA512_DIGEST_SIZE_IN_WORDS 00185 00186 /* Hash driver registers configurations */ 00187 #define ENABLE_HASH_CLOCK 0x1UL 00188 #define DISABLE_HASH_CLOCK 0x0UL 00189 00190 #define HW_HASH_CTL_SHA1_VAL 0x0001UL 00191 #define HW_HASH_CTL_SHA256_VAL 0x0002UL 00192 #define HW_HASH_LE_MODE_VAL 0x0001UL 00193 #define HW_HASH_PAD_EN_VAL 0x1UL 00194 00195 /* The SHA1 hash block size in words */ 00196 #define HASH_BLOCK_SIZE_IN_WORDS 16 00197 #define HASH_BLOCK_SIZE_IN_BYTES (HASH_BLOCK_SIZE_IN_WORDS * sizeof(uint32_t)) 00198 00199 /* The SHA2 hash block size in words */ 00200 #define HASH_SHA512_BLOCK_SIZE_IN_WORDS 32 00201 #define HASH_SHA512_BLOCK_SIZE_IN_BYTES (HASH_SHA512_BLOCK_SIZE_IN_WORDS * sizeof(uint32_t)) 00202 00203 #define CONFIG_HASH_MODE_VAL 0x7UL 00204 00205 /* the MAC key IPAD and OPAD bytes */ 00206 #define MAC_KEY_IPAD_BYTE 0x36 00207 #define MAC_KEY_OPAD_BYTE 0x5C 00208 00209 #define HMAC_CONTEXT_VALIDATION_TAG 0x23456789 00210 00211 /* The CRYS HASH module errors */ 00212 #define HASH_DRV_OK 0 00213 #define HASH_DRV_INVALID_USER_CONTEXT_POINTER_ERROR (HASH_DRV_MODULE_ERROR_BASE + 0x00UL) 00214 #define HASH_DRV_ILLEGAL_OPERATION_MODE_ERROR (HASH_DRV_MODULE_ERROR_BASE + 0x01UL) 00215 #define HASH_DRV_USER_CONTEXT_CORRUPTED_ERROR (HASH_DRV_MODULE_ERROR_BASE + 0x02UL) 00216 00217 /* The CRYS HMAC module errors */ 00218 #define HMAC_DRV_OK 0 00219 #define HMAC_DRV_INVALID_USER_CONTEXT_POINTER_ERROR (HMAC_DRV_MODULE_ERROR_BASE + 0x00UL) 00220 00221 00222 /* SHA512 soft driver */ 00223 00224 /* The first padding byte */ 00225 #define LLF_HASH_FIRST_PADDING_BYTE 0x80 00226 /* The size at the end of the padding for SHA384 and SHA512 */ 00227 #define LLF_HASH_SHA2_COUNTER_SIZE_ON_END_OF_PADDING_IN_BYTES (4 * sizeof(uint32_t)) 00228 #define LLF_HASH_SHA2_COUNTER_SIZE_ON_END_OF_PADDING_IN_WORDS 4 00229 00230 /* the HASH user context validity TAG */ 00231 #define HASH_CONTEXT_VALIDATION_TAG 0x12345678 00232 00233 /****************************************************************************** 00234 * BYPASS DEFINITIONS 00235 ******************************************************************************/ 00236 00237 #define CONFIG_DIN_BYPASS_DOUT_VAL 0 00238 00239 /* The CRYS BYPASS module errors */ 00240 #define BYPASS_DRV_OK 0 00241 #define BYPASS_DRV_ILLEGAL_BLOCK_SIZE_ERROR (BYPASS_DRV_MODULE_ERROR_BASE + 0x01UL) 00242 #define BYPASS_DRV_ILLEGAL_INPUT_ADDR_MEM_ERROR (BYPASS_DRV_MODULE_ERROR_BASE + 0x02UL) 00243 #define BYPASS_DRV_ILLEGAL_OUTPUT_ADDR_MEM_ERROR (BYPASS_DRV_MODULE_ERROR_BASE + 0x03UL) 00244 00245 /****************************************************************************** 00246 * CHACHA DEFINITIONS 00247 ******************************************************************************/ 00248 00249 #define CHACHA_BLOCK_SIZE_BYTES 64 00250 #define CHACHA_BLOCK_SIZE_WORDS (CHACHA_BLOCK_SIZE_BYTES >> 2) 00251 #define CHACHA_NONCE_64_SIZE_BYTES 8 00252 #define CHACHA_NONCE_64_SIZE_WORDS (CHACHA_NONCE_64_SIZE_BYTES >> 2) 00253 #define CHACHA_NONCE_96_SIZE_BYTES 12 00254 #define CHACHA_NONCE_96_SIZE_WORDS (CHACHA_NONCE_96_SIZE_BYTES >> 2) 00255 #define CHACHA_256_BIT_KEY_SIZE 32 00256 #define CHACHA_256_BIT_KEY_SIZE_WORDS (CHACHA_256_BIT_KEY_SIZE >> 2) 00257 00258 #define ENABLE_CHACHA_CLOCK 0x1UL 00259 #define DISABLE_CHACHA_CLOCK 0x0UL 00260 00261 #define CONFIG_DIN_CHACHA_DOUT_VAL 0x10UL 00262 00263 /* The CRYS CHACHA module errors */ 00264 #define CHACHA_DRV_OK 0 00265 #define CHACHA_DRV_INVALID_USER_CONTEXT_POINTER_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x00UL) 00266 #define CHACHA_DRV_ILLEGAL_OPERATION_DIRECTION_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x01UL) 00267 #define CHACHA_DRV_ILLEGAL_INPUT_ADDR_MEM_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x02UL) 00268 #define CHACHA_DRV_ILLEGAL_OUTPUT_ADDR_MEM_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x03UL) 00269 #define CHACHA_DRV_ILLEGAL_MEM_SIZE_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x04UL) 00270 #define CHACHA_DRV_ILLEGAL_NONCE_SIZE_ERROR (CHACHA_DRV_MODULE_ERROR_BASE + 0x05UL) 00271 00272 00273 /****************************************************************************** 00274 * MACROS 00275 ******************************************************************************/ 00276 /* This MACRO purpose is to switch from CryptoCell definitions to crypto driver definitions, the MACRO assumes that the value is legal (encrypt or decrypt only) */ 00277 #define SASI_2_DRIVER_DIRECTION(ssiDirection) ((ssiDirection == SASI_AES_ENCRYPT) ? (CRYPTO_DIRECTION_ENCRYPT) : (CRYPTO_DIRECTION_DECRYPT)) 00278 00279 /* Poll on the DOUT MEM DMA (DLLI) busy till it is = 0 */ 00280 #define SASI_HAL_WAIT_ON_DOUT_MEM_DMA_BUSY()\ 00281 do {\ 00282 uint32_t regVal=1;\ 00283 do {\ 00284 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, DOUT_MEM_DMA_BUSY));\ 00285 }while( regVal ); \ 00286 }while(0) 00287 00288 /* Poll on the DIN MEM DMA (DLLI) busy till it is = 0 */ 00289 #define SASI_HAL_WAIT_ON_DIN_MEM_DMA_BUSY()\ 00290 do {\ 00291 uint32_t regVal=1;\ 00292 do {\ 00293 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, DIN_MEM_DMA_BUSY));\ 00294 }while( regVal );\ 00295 }while(0) 00296 00297 /* Poll on the DOUT SRAM DMA busy till it is = 0 */ 00298 #define SASI_HAL_WAIT_ON_DOUT_SRAM_DMA_BUSY()\ 00299 do {\ 00300 uint32_t regVal=1; \ 00301 do {\ 00302 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, DOUT_SRAM_DMA_BUSY));\ 00303 }while( regVal );\ 00304 }while(0) 00305 00306 /* Poll on the DIN SRAM busy till it is = 0 */ 00307 #define SASI_HAL_WAIT_ON_DIN_SRAM_DMA_BUSY()\ 00308 do {\ 00309 uint32_t regVal=1;\ 00310 do {\ 00311 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, DIN_SRAM_DMA_BUSY));\ 00312 }while( regVal );\ 00313 }while(0) 00314 00315 00316 /* Poll on the AES busy till it is = 0 */ 00317 #define SASI_HAL_WAIT_ON_AES_BUSY()\ 00318 do {\ 00319 uint32_t regVal=1;\ 00320 do {\ 00321 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, AES_BUSY));\ 00322 }while( regVal );\ 00323 }while(0) 00324 00325 /* Poll on the HASH busy till it is = 0 */ 00326 #define SASI_HAL_WAIT_ON_HASH_BUSY()\ 00327 do {\ 00328 uint32_t regVal=1;\ 00329 do {\ 00330 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, HASH_BUSY));\ 00331 }while( regVal );\ 00332 }while(0) 00333 00334 /* Poll on the CHACHA busy till it is = 0 */ 00335 #define SASI_HAL_WAIT_ON_CHACHA_BUSY() \ 00336 do { \ 00337 uint32_t regVal=1; \ 00338 do { \ 00339 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, CHACHA_BUSY)); \ 00340 }while( regVal ); \ 00341 }while(0) 00342 00343 /* Poll on the crypto busy till it is = 0 */ 00344 #define SASI_HAL_WAIT_ON_CRYPTO_BUSY()\ 00345 do {\ 00346 uint32_t regVal=1;\ 00347 do {\ 00348 regVal = SASI_HAL_READ_REGISTER( SASI_REG_OFFSET(HOST_RGF, CRYPTO_BUSY));\ 00349 }while( regVal );\ 00350 }while(0) 00351 00352 00353 #endif /* _DRIVER_DEFS_H_ */ 00354
Generated on Tue Jul 12 2022 13:54:17 by
