1a4585931SKiran Kumar K /* SPDX-License-Identifier: BSD-3-Clause 2a4585931SKiran Kumar K * Copyright(C) 2021 Marvell. 3a4585931SKiran Kumar K */ 4a4585931SKiran Kumar K 5a4585931SKiran Kumar K #ifndef __ROC_SE_H__ 6a4585931SKiran Kumar K #define __ROC_SE_H__ 7a4585931SKiran Kumar K 805be867bSAnoob Joseph #include "roc_constants.h" 905be867bSAnoob Joseph 10a4585931SKiran Kumar K /* SE opcodes */ 11a4585931SKiran Kumar K #define ROC_SE_MAJOR_OP_FC 0x33 12a4585931SKiran Kumar K #define ROC_SE_FC_MINOR_OP_ENCRYPT 0x0 13a4585931SKiran Kumar K #define ROC_SE_FC_MINOR_OP_DECRYPT 0x1 14a4585931SKiran Kumar K #define ROC_SE_FC_MINOR_OP_HMAC_FIRST 0x10 1587d39616SVolodymyr Fialko #define ROC_SE_FC_MINOR_OP_DOCSIS 0x40 16a4585931SKiran Kumar K 17a4585931SKiran Kumar K #define ROC_SE_MAJOR_OP_HASH 0x34 18a4585931SKiran Kumar K #define ROC_SE_MAJOR_OP_HMAC 0x35 19759b5e65SAnoob Joseph #define ROC_SE_MAJOR_OP_PDCP 0x37 20a4585931SKiran Kumar K #define ROC_SE_MAJOR_OP_KASUMI 0x38 210fbb3e6cSTejasree Kondoj #define ROC_SE_MAJOR_OP_PDCP_CHAIN 0x3C 2221c1c303SVidya Sagar Velumuri #define ROC_SE_MAJOR_OP_SM 0x3D 2337e6479dSAnoob Joseph 2487d39616SVolodymyr Fialko #define ROC_SE_MAJOR_OP_MISC 0x01ULL 2587d39616SVolodymyr Fialko #define ROC_SE_MISC_MINOR_OP_PASSTHROUGH 0x03ULL 2687d39616SVolodymyr Fialko #define ROC_SE_MISC_MINOR_OP_DUMMY 0x04ULL 2787d39616SVolodymyr Fialko #define ROC_SE_MISC_MINOR_OP_HW_SUPPORT 0x08ULL 28a4585931SKiran Kumar K 29a4585931SKiran Kumar K #define ROC_SE_MAX_AAD_SIZE 64 30a4585931SKiran Kumar K #define ROC_SE_MAX_MAC_LEN 64 31a4585931SKiran Kumar K 32a4585931SKiran Kumar K #define ROC_SE_OFF_CTRL_LEN 8 33a4585931SKiran Kumar K 3421c1c303SVidya Sagar Velumuri #define ROC_SE_SM4_KEY_LEN 16 3521c1c303SVidya Sagar Velumuri 36a4585931SKiran Kumar K #define ROC_SE_ZS_EA 0x1 37a4585931SKiran Kumar K #define ROC_SE_ZS_IA 0x2 38a4585931SKiran Kumar K #define ROC_SE_K_F8 0x4 39a4585931SKiran Kumar K #define ROC_SE_K_F9 0x8 40a4585931SKiran Kumar K 41a4585931SKiran Kumar K #define ROC_SE_FC_GEN 0x1 42a4585931SKiran Kumar K #define ROC_SE_PDCP 0x2 43a4585931SKiran Kumar K #define ROC_SE_KASUMI 0x3 44a4585931SKiran Kumar K #define ROC_SE_HASH_HMAC 0x4 450fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_CHAIN 0x5 4621c1c303SVidya Sagar Velumuri #define ROC_SE_SM 0x6 47a4585931SKiran Kumar K 48a4585931SKiran Kumar K #define ROC_SE_OP_CIPHER_ENCRYPT 0x1 49a4585931SKiran Kumar K #define ROC_SE_OP_CIPHER_DECRYPT 0x2 50a4585931SKiran Kumar K #define ROC_SE_OP_CIPHER_MASK \ 51a4585931SKiran Kumar K (ROC_SE_OP_CIPHER_ENCRYPT | ROC_SE_OP_CIPHER_DECRYPT) 52a4585931SKiran Kumar K 53a4585931SKiran Kumar K #define ROC_SE_OP_AUTH_VERIFY 0x4 54a4585931SKiran Kumar K #define ROC_SE_OP_AUTH_GENERATE 0x8 55a4585931SKiran Kumar K #define ROC_SE_OP_AUTH_MASK \ 56a4585931SKiran Kumar K (ROC_SE_OP_AUTH_VERIFY | ROC_SE_OP_AUTH_GENERATE) 57a4585931SKiran Kumar K 58a4585931SKiran Kumar K #define ROC_SE_OP_ENCODE (ROC_SE_OP_CIPHER_ENCRYPT | ROC_SE_OP_AUTH_GENERATE) 59a4585931SKiran Kumar K #define ROC_SE_OP_DECODE (ROC_SE_OP_CIPHER_DECRYPT | ROC_SE_OP_AUTH_VERIFY) 60a4585931SKiran Kumar K 61a4585931SKiran Kumar K #define ROC_SE_ALWAYS_USE_SEPARATE_BUF 62a4585931SKiran Kumar K 63a4585931SKiran Kumar K /* 64a4585931SKiran Kumar K * Parameters for Flexi Crypto 65a4585931SKiran Kumar K * requests 66a4585931SKiran Kumar K */ 67a4585931SKiran Kumar K #define ROC_SE_VALID_AAD_BUF 0x01 68a4585931SKiran Kumar K #define ROC_SE_VALID_MAC_BUF 0x02 69a4585931SKiran Kumar K #define ROC_SE_VALID_IV_BUF 0x04 70a4585931SKiran Kumar K #define ROC_SE_SINGLE_BUF_INPLACE 0x08 71a4585931SKiran Kumar K #define ROC_SE_SINGLE_BUF_HEADROOM 0x10 72a4585931SKiran Kumar K 73a4585931SKiran Kumar K #define ROC_SE_ENCR_IV_OFFSET(__d_offs) (((__d_offs) >> 32) & 0xffff) 74a4585931SKiran Kumar K #define ROC_SE_ENCR_OFFSET(__d_offs) (((__d_offs) >> 16) & 0xffff) 75a4585931SKiran Kumar K #define ROC_SE_AUTH_OFFSET(__d_offs) ((__d_offs) & 0xffff) 76a4585931SKiran Kumar K #define ROC_SE_ENCR_DLEN(__d_lens) ((__d_lens) >> 32) 77a4585931SKiran Kumar K #define ROC_SE_AUTH_DLEN(__d_lens) ((__d_lens) & 0xffffffff) 78a4585931SKiran Kumar K 79a4585931SKiran Kumar K typedef enum { ROC_SE_FROM_CTX = 0, ROC_SE_FROM_DPTR = 1 } roc_se_input_type; 80a4585931SKiran Kumar K 81a4585931SKiran Kumar K typedef enum { 82a4585931SKiran Kumar K ROC_SE_MD5_TYPE = 1, 83a4585931SKiran Kumar K ROC_SE_SHA1_TYPE = 2, 84a4585931SKiran Kumar K ROC_SE_SHA2_SHA224 = 3, 85a4585931SKiran Kumar K ROC_SE_SHA2_SHA256 = 4, 86a4585931SKiran Kumar K ROC_SE_SHA2_SHA384 = 5, 87a4585931SKiran Kumar K ROC_SE_SHA2_SHA512 = 6, 88a4585931SKiran Kumar K ROC_SE_GMAC_TYPE = 7, 89a4585931SKiran Kumar K ROC_SE_POLY1305 = 8, 90b657e7d6SVidya Sagar Velumuri ROC_SE_SM3 = 9, 91a4585931SKiran Kumar K ROC_SE_SHA3_SHA224 = 10, 92a4585931SKiran Kumar K ROC_SE_SHA3_SHA256 = 11, 93a4585931SKiran Kumar K ROC_SE_SHA3_SHA384 = 12, 94a4585931SKiran Kumar K ROC_SE_SHA3_SHA512 = 13, 95db1813ddSVolodymyr Fialko ROC_SE_SHA3_SHAKE128 = 14, 96db1813ddSVolodymyr Fialko ROC_SE_SHA3_SHAKE256 = 15, 97a4585931SKiran Kumar K 98a4585931SKiran Kumar K /* These are only for software use */ 99a4585931SKiran Kumar K ROC_SE_ZUC_EIA3 = 0x90, 100a4585931SKiran Kumar K ROC_SE_SNOW3G_UIA2 = 0x91, 101a4585931SKiran Kumar K ROC_SE_AES_CMAC_EIA2 = 0x92, 102a4585931SKiran Kumar K ROC_SE_KASUMI_F9_CBC = 0x93, 103a4585931SKiran Kumar K ROC_SE_KASUMI_F9_ECB = 0x94, 104a4585931SKiran Kumar K } roc_se_auth_type; 105a4585931SKiran Kumar K 106a4585931SKiran Kumar K typedef enum { 107a4585931SKiran Kumar K /* To support passthrough */ 108a4585931SKiran Kumar K ROC_SE_PASSTHROUGH = 0x0, 109a4585931SKiran Kumar K /* 110a4585931SKiran Kumar K * These are defined by MC for Flexi crypto 111a4585931SKiran Kumar K * for field of 4 bits 112a4585931SKiran Kumar K */ 113a4585931SKiran Kumar K ROC_SE_DES3_CBC = 0x1, 114a4585931SKiran Kumar K ROC_SE_DES3_ECB = 0x2, 115a4585931SKiran Kumar K ROC_SE_AES_CBC = 0x3, 116a4585931SKiran Kumar K ROC_SE_AES_ECB = 0x4, 117a4585931SKiran Kumar K ROC_SE_AES_CFB = 0x5, 118a4585931SKiran Kumar K ROC_SE_AES_CTR = 0x6, 119a4585931SKiran Kumar K ROC_SE_AES_GCM = 0x7, 120a4585931SKiran Kumar K ROC_SE_AES_XTS = 0x8, 121a4585931SKiran Kumar K ROC_SE_CHACHA20 = 0x9, 122d15bc634STejasree Kondoj ROC_SE_AES_CCM = 0xA, 123a4585931SKiran Kumar K 124a4585931SKiran Kumar K /* These are only for software use */ 125a4585931SKiran Kumar K ROC_SE_ZUC_EEA3 = 0x90, 126a4585931SKiran Kumar K ROC_SE_SNOW3G_UEA2 = 0x91, 127a4585931SKiran Kumar K ROC_SE_AES_CTR_EEA2 = 0x92, 128a4585931SKiran Kumar K ROC_SE_KASUMI_F8_CBC = 0x93, 129a4585931SKiran Kumar K ROC_SE_KASUMI_F8_ECB = 0x94, 13087d39616SVolodymyr Fialko ROC_SE_AES_DOCSISBPI = 0x95, 13187d39616SVolodymyr Fialko ROC_SE_DES_DOCSISBPI = 0x96, 132a4585931SKiran Kumar K } roc_se_cipher_type; 133a4585931SKiran Kumar K 134a4585931SKiran Kumar K typedef enum { 13521c1c303SVidya Sagar Velumuri ROC_SM4_ECB = 0x0, 13621c1c303SVidya Sagar Velumuri ROC_SM4_CBC = 0x1, 13721c1c303SVidya Sagar Velumuri ROC_SM4_CTR = 0x2, 13821c1c303SVidya Sagar Velumuri ROC_SM4_CFB = 0x3, 13921c1c303SVidya Sagar Velumuri ROC_SM4_OFB = 0x4, 14021c1c303SVidya Sagar Velumuri } roc_sm_cipher_type; 14121c1c303SVidya Sagar Velumuri 14221c1c303SVidya Sagar Velumuri typedef enum { 143a4585931SKiran Kumar K /* Microcode errors */ 144a4585931SKiran Kumar K ROC_SE_NO_ERR = 0x00, 145a4585931SKiran Kumar K ROC_SE_ERR_OPCODE_UNSUPPORTED = 0x01, 146a4585931SKiran Kumar K 147a4585931SKiran Kumar K /* SCATTER GATHER */ 148a4585931SKiran Kumar K ROC_SE_ERR_SCATTER_GATHER_WRITE_LENGTH = 0x02, 149a4585931SKiran Kumar K ROC_SE_ERR_SCATTER_GATHER_LIST = 0x03, 150a4585931SKiran Kumar K ROC_SE_ERR_SCATTER_GATHER_NOT_SUPPORTED = 0x04, 151a4585931SKiran Kumar K 152a4585931SKiran Kumar K /* SE GC */ 153a4585931SKiran Kumar K ROC_SE_ERR_GC_LENGTH_INVALID = 0x41, 154a4585931SKiran Kumar K ROC_SE_ERR_GC_RANDOM_LEN_INVALID = 0x42, 155a4585931SKiran Kumar K ROC_SE_ERR_GC_DATA_LEN_INVALID = 0x43, 156a4585931SKiran Kumar K ROC_SE_ERR_GC_DRBG_TYPE_INVALID = 0x44, 157a4585931SKiran Kumar K ROC_SE_ERR_GC_CTX_LEN_INVALID = 0x45, 158a4585931SKiran Kumar K ROC_SE_ERR_GC_CIPHER_UNSUPPORTED = 0x46, 159a4585931SKiran Kumar K ROC_SE_ERR_GC_AUTH_UNSUPPORTED = 0x47, 160a4585931SKiran Kumar K ROC_SE_ERR_GC_OFFSET_INVALID = 0x48, 161a4585931SKiran Kumar K ROC_SE_ERR_GC_HASH_MODE_UNSUPPORTED = 0x49, 162a4585931SKiran Kumar K ROC_SE_ERR_GC_DRBG_ENTROPY_LEN_INVALID = 0x4a, 163a4585931SKiran Kumar K ROC_SE_ERR_GC_DRBG_ADDNL_LEN_INVALID = 0x4b, 164a4585931SKiran Kumar K ROC_SE_ERR_GC_ICV_MISCOMPARE = 0x4c, 165a4585931SKiran Kumar K ROC_SE_ERR_GC_DATA_UNALIGNED = 0x4d, 166a4585931SKiran Kumar K 16705be867bSAnoob Joseph ROC_SE_ERR_SSL_RECORD_LEN_INVALID = 0x82, 16805be867bSAnoob Joseph ROC_SE_ERR_SSL_CTX_LEN_INVALID = 0x83, 16905be867bSAnoob Joseph ROC_SE_ERR_SSL_CIPHER_UNSUPPORTED = 0x84, 17005be867bSAnoob Joseph ROC_SE_ERR_SSL_MAC_UNSUPPORTED = 0x85, 17105be867bSAnoob Joseph ROC_SE_ERR_SSL_VERSION_UNSUPPORTED = 0x86, 1729a126e7cSVidya Sagar Velumuri ROC_SE_ERR_SSL_POST_PROCESS = 0x88, 17305be867bSAnoob Joseph ROC_SE_ERR_SSL_MAC_MISMATCH = 0x89, 17405be867bSAnoob Joseph ROC_SE_ERR_SSL_PKT_REPLAY_SEQ_OUT_OF_WINDOW = 0xC1, 17505be867bSAnoob Joseph ROC_SE_ERR_SSL_PKT_REPLAY_SEQ = 0xC9, 17605be867bSAnoob Joseph 177a4585931SKiran Kumar K /* API Layer */ 178a4585931SKiran Kumar K ROC_SE_ERR_REQ_PENDING = 0xfe, 179a4585931SKiran Kumar K ROC_SE_ERR_REQ_TIMEOUT = 0xff, 180a4585931SKiran Kumar K 181a4585931SKiran Kumar K } roc_se_error_code; 182a4585931SKiran Kumar K 183a4585931SKiran Kumar K typedef enum { 184a4585931SKiran Kumar K ROC_SE_AES_128_BIT = 0x1, 185a4585931SKiran Kumar K ROC_SE_AES_192_BIT = 0x2, 186a4585931SKiran Kumar K ROC_SE_AES_256_BIT = 0x3 187a4585931SKiran Kumar K } roc_se_aes_type; 188a4585931SKiran Kumar K 189a07d1d4dSVidya Sagar Velumuri typedef enum { 190a07d1d4dSVidya Sagar Velumuri ROC_SE_PDCP_MAC_LEN_32_BIT = 0x1, 191a07d1d4dSVidya Sagar Velumuri ROC_SE_PDCP_MAC_LEN_64_BIT = 0x2, 192a07d1d4dSVidya Sagar Velumuri ROC_SE_PDCP_MAC_LEN_128_BIT = 0x3 193a07d1d4dSVidya Sagar Velumuri } roc_se_pdcp_mac_len_type; 194a07d1d4dSVidya Sagar Velumuri 195df22fe29SVidya Sagar Velumuri typedef enum { 196df22fe29SVidya Sagar Velumuri ROC_SE_IPSEC = 0x0, 197df22fe29SVidya Sagar Velumuri ROC_SE_TLS = 0x1, 198df22fe29SVidya Sagar Velumuri ROC_SE_FC = 0x2, 199df22fe29SVidya Sagar Velumuri } roc_se_op_type; 200df22fe29SVidya Sagar Velumuri 201a4585931SKiran Kumar K struct roc_se_enc_context { 202a4585931SKiran Kumar K uint64_t iv_source : 1; 203a4585931SKiran Kumar K uint64_t aes_key : 2; 2047d5ac441SVidya Sagar Velumuri uint64_t rsvd_59 : 1; 205a4585931SKiran Kumar K uint64_t enc_cipher : 4; 206a4585931SKiran Kumar K uint64_t auth_input_type : 1; 2077d5ac441SVidya Sagar Velumuri uint64_t auth_key_src : 1; 2087d5ac441SVidya Sagar Velumuri uint64_t rsvd_50_51 : 2; 209a4585931SKiran Kumar K uint64_t hash_type : 4; 210a4585931SKiran Kumar K uint64_t mac_len : 8; 2117d5ac441SVidya Sagar Velumuri uint64_t rsvd_16_39 : 24; 2127d5ac441SVidya Sagar Velumuri uint64_t hmac_key_sz : 16; 213a4585931SKiran Kumar K uint8_t encr_key[32]; 214a4585931SKiran Kumar K uint8_t encr_iv[16]; 215a4585931SKiran Kumar K }; 216a4585931SKiran Kumar K 217a4585931SKiran Kumar K struct roc_se_hmac_context { 218a4585931SKiran Kumar K uint8_t ipad[64]; 219a4585931SKiran Kumar K uint8_t opad[64]; 220a4585931SKiran Kumar K }; 221a4585931SKiran Kumar K 222a4585931SKiran Kumar K struct roc_se_context { 223a4585931SKiran Kumar K struct roc_se_enc_context enc; 224a4585931SKiran Kumar K struct roc_se_hmac_context hmac; 225a4585931SKiran Kumar K }; 226a4585931SKiran Kumar K 22721c1c303SVidya Sagar Velumuri struct roc_se_sm_context { 22821c1c303SVidya Sagar Velumuri uint64_t rsvd_56_60 : 5; 22921c1c303SVidya Sagar Velumuri uint64_t enc_cipher : 3; 23021c1c303SVidya Sagar Velumuri uint64_t rsvd_0_55 : 56; 23121c1c303SVidya Sagar Velumuri uint8_t encr_key[16]; 23221c1c303SVidya Sagar Velumuri }; 23321c1c303SVidya Sagar Velumuri 234a07d1d4dSVidya Sagar Velumuri struct roc_se_otk_zuc_ctx { 235a07d1d4dSVidya Sagar Velumuri union { 236a07d1d4dSVidya Sagar Velumuri uint64_t u64; 237a07d1d4dSVidya Sagar Velumuri struct { 238a07d1d4dSVidya Sagar Velumuri uint64_t rsvd_56 : 57; 239a07d1d4dSVidya Sagar Velumuri uint64_t mac_len : 2; 240a07d1d4dSVidya Sagar Velumuri uint64_t key_len : 2; 241a07d1d4dSVidya Sagar Velumuri uint64_t lfsr_state : 1; 242a07d1d4dSVidya Sagar Velumuri uint64_t alg_type : 2; 243a07d1d4dSVidya Sagar Velumuri } s; 244a07d1d4dSVidya Sagar Velumuri } w0; 245a07d1d4dSVidya Sagar Velumuri uint8_t ci_key[32]; 246a07d1d4dSVidya Sagar Velumuri uint8_t encr_auth_iv[24]; 247a07d1d4dSVidya Sagar Velumuri uint8_t zuc_const[32]; 248a07d1d4dSVidya Sagar Velumuri }; 249a07d1d4dSVidya Sagar Velumuri 250a07d1d4dSVidya Sagar Velumuri struct roc_se_onk_zuc_ctx { 251a4585931SKiran Kumar K uint8_t encr_auth_iv[16]; 252a4585931SKiran Kumar K uint8_t ci_key[16]; 253a4585931SKiran Kumar K uint8_t zuc_const[32]; 254a4585931SKiran Kumar K }; 255a4585931SKiran Kumar K 2566855d510STejasree Kondoj struct roc_se_pdcp_ctx { 2570fbb3e6cSTejasree Kondoj union { 2580fbb3e6cSTejasree Kondoj uint64_t u64; 2590fbb3e6cSTejasree Kondoj struct { 2600fbb3e6cSTejasree Kondoj uint64_t cipher_type : 2; 2610fbb3e6cSTejasree Kondoj uint64_t rsvd58_59 : 2; 2620fbb3e6cSTejasree Kondoj uint64_t auth_type : 2; 2630fbb3e6cSTejasree Kondoj uint64_t rsvd62_63 : 2; 2640fbb3e6cSTejasree Kondoj uint64_t mac_len : 4; 2650fbb3e6cSTejasree Kondoj uint64_t ci_key_len : 2; 2660fbb3e6cSTejasree Kondoj uint64_t auth_key_len : 2; 2670fbb3e6cSTejasree Kondoj uint64_t rsvd42_47 : 6; 2680fbb3e6cSTejasree Kondoj uint64_t state_conf : 2; 2690fbb3e6cSTejasree Kondoj uint64_t rsvd0_39 : 40; 2700fbb3e6cSTejasree Kondoj } s; 2710fbb3e6cSTejasree Kondoj } w0; 2720fbb3e6cSTejasree Kondoj union { 2730fbb3e6cSTejasree Kondoj struct { 274e332f197STejasree Kondoj uint8_t encr_lfsr_state[72]; 275e332f197STejasree Kondoj uint8_t auth_lfsr_state[72]; 2760fbb3e6cSTejasree Kondoj }; 2770fbb3e6cSTejasree Kondoj struct { 2780fbb3e6cSTejasree Kondoj uint8_t ci_key[32]; 2790fbb3e6cSTejasree Kondoj uint8_t ci_zuc_const[32]; 280e332f197STejasree Kondoj uint8_t rsvd[8]; 2810fbb3e6cSTejasree Kondoj uint8_t auth_key[32]; 2820fbb3e6cSTejasree Kondoj uint8_t auth_zuc_const[32]; 283e332f197STejasree Kondoj uint8_t rsvd1[8]; 2840fbb3e6cSTejasree Kondoj }; 2850fbb3e6cSTejasree Kondoj } st; 2860fbb3e6cSTejasree Kondoj }; 2870fbb3e6cSTejasree Kondoj 288a4585931SKiran Kumar K struct roc_se_kasumi_ctx { 289a4585931SKiran Kumar K uint8_t reg_A[8]; 290a4585931SKiran Kumar K uint8_t ci_key[16]; 291a4585931SKiran Kumar K }; 292a4585931SKiran Kumar K 293a4585931SKiran Kumar K /* Buffer pointer */ 294a4585931SKiran Kumar K struct roc_se_buf_ptr { 295a4585931SKiran Kumar K void *vaddr; 296a4585931SKiran Kumar K uint32_t size; 297a4585931SKiran Kumar K uint32_t resv; 298a4585931SKiran Kumar K }; 299a4585931SKiran Kumar K 300a4585931SKiran Kumar K /* IOV Pointer */ 301a4585931SKiran Kumar K struct roc_se_iov_ptr { 302a4585931SKiran Kumar K int buf_cnt; 303013b4c52SBruce Richardson struct roc_se_buf_ptr bufs[]; 304a4585931SKiran Kumar K }; 305a4585931SKiran Kumar K 306a4585931SKiran Kumar K #define ROC_SE_PDCP_ALG_TYPE_ZUC 0 307a4585931SKiran Kumar K #define ROC_SE_PDCP_ALG_TYPE_SNOW3G 1 308a4585931SKiran Kumar K #define ROC_SE_PDCP_ALG_TYPE_AES_CTR 2 3090fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_ALG_TYPE_AES_CMAC 3 3100fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_CHAIN_ALG_TYPE_SNOW3G 1 3110fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_CHAIN_ALG_TYPE_ZUC 3 3120fbb3e6cSTejasree Kondoj 3130fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_CHAIN_CTX_LFSR 0 3140fbb3e6cSTejasree Kondoj #define ROC_SE_PDCP_CHAIN_CTX_KEY_IV 1 315a4585931SKiran Kumar K 316a4585931SKiran Kumar K struct roc_se_ctx { 317a4585931SKiran Kumar K /* Below fields are accessed by sw */ 318a4585931SKiran Kumar K uint64_t enc_cipher : 8; 319a4585931SKiran Kumar K uint64_t hash_type : 8; 320a4585931SKiran Kumar K uint64_t mac_len : 8; 3210fcaf90fSGowrishankar Muthukrishnan uint64_t auth_key_len : 16; 322a4585931SKiran Kumar K uint64_t fc_type : 4; 323a4585931SKiran Kumar K uint64_t hmac : 1; 324a4585931SKiran Kumar K uint64_t zsk_flags : 3; 325a4585931SKiran Kumar K uint64_t k_ecb : 1; 3260fbb3e6cSTejasree Kondoj uint64_t pdcp_ci_alg : 2; 3270fbb3e6cSTejasree Kondoj uint64_t pdcp_auth_alg : 2; 3280fcaf90fSGowrishankar Muthukrishnan uint64_t ciph_then_auth : 1; 3290fcaf90fSGowrishankar Muthukrishnan uint64_t auth_then_ciph : 1; 330e332f197STejasree Kondoj uint64_t eia2 : 1; 331815bc4c7STejasree Kondoj /* auth_iv_offset passed to PDCP_CHAIN opcode based on FVC bit */ 332815bc4c7STejasree Kondoj uint8_t pdcp_iv_offset; 333a4585931SKiran Kumar K union cpt_inst_w4 template_w4; 334*1c3f7561SAnoob Joseph uint8_t *auth_key; 335a4585931SKiran Kumar K /* Below fields are accessed by hardware */ 3362cbfe3d5STejasree Kondoj struct se_ctx_s { 3372cbfe3d5STejasree Kondoj /* Word0 */ 3382cbfe3d5STejasree Kondoj union { 3392cbfe3d5STejasree Kondoj struct { 3402cbfe3d5STejasree Kondoj uint64_t rsvd : 48; 3412cbfe3d5STejasree Kondoj 3422cbfe3d5STejasree Kondoj uint64_t ctx_push_size : 7; 3432cbfe3d5STejasree Kondoj uint64_t rsvd1 : 1; 3442cbfe3d5STejasree Kondoj 3452cbfe3d5STejasree Kondoj uint64_t ctx_hdr_size : 2; 3462cbfe3d5STejasree Kondoj uint64_t aop_valid : 1; 3472cbfe3d5STejasree Kondoj uint64_t rsvd2 : 1; 3482cbfe3d5STejasree Kondoj uint64_t ctx_size : 4; 3492cbfe3d5STejasree Kondoj } s; 3502cbfe3d5STejasree Kondoj uint64_t u64; 3512cbfe3d5STejasree Kondoj } w0; 352a4585931SKiran Kumar K union { 353a4585931SKiran Kumar K struct roc_se_context fctx; 3546855d510STejasree Kondoj struct roc_se_pdcp_ctx pctx; 355a4585931SKiran Kumar K struct roc_se_kasumi_ctx k_ctx; 35621c1c303SVidya Sagar Velumuri struct roc_se_sm_context sm_ctx; 357a4585931SKiran Kumar K }; 3582cbfe3d5STejasree Kondoj } se_ctx __plt_aligned(ROC_ALIGN); 3592cbfe3d5STejasree Kondoj } __plt_aligned(ROC_ALIGN); 360a4585931SKiran Kumar K 3611ceb66a1SAnoob Joseph struct roc_se_fc_params { 3621ceb66a1SAnoob Joseph union { 3631ceb66a1SAnoob Joseph struct roc_se_buf_ptr bufs[1]; 3641ceb66a1SAnoob Joseph struct { 3651ceb66a1SAnoob Joseph struct roc_se_iov_ptr *src_iov; 3661ceb66a1SAnoob Joseph struct roc_se_iov_ptr *dst_iov; 3671ceb66a1SAnoob Joseph }; 3681ceb66a1SAnoob Joseph }; 369d649fca6STejasree Kondoj const void *iv_buf; 370d649fca6STejasree Kondoj const void *auth_iv_buf; 3711ceb66a1SAnoob Joseph struct roc_se_ctx *ctx; 3721ceb66a1SAnoob Joseph struct roc_se_buf_ptr meta_buf; 3731ceb66a1SAnoob Joseph uint8_t cipher_iv_len; 3741ceb66a1SAnoob Joseph uint8_t auth_iv_len; 375815bc4c7STejasree Kondoj uint8_t pdcp_iv_offset; 3761ceb66a1SAnoob Joseph 3771ceb66a1SAnoob Joseph struct roc_se_buf_ptr aad_buf; 3781ceb66a1SAnoob Joseph struct roc_se_buf_ptr mac_buf; 3791ceb66a1SAnoob Joseph }; 3801ceb66a1SAnoob Joseph 3815242d8dbSAnkur Dwivedi static inline void 3825242d8dbSAnkur Dwivedi roc_se_zuc_bytes_swap(uint8_t *arr, int len) 3835242d8dbSAnkur Dwivedi { 3845242d8dbSAnkur Dwivedi int start, end; 3855242d8dbSAnkur Dwivedi uint8_t tmp; 3865242d8dbSAnkur Dwivedi 3875242d8dbSAnkur Dwivedi if (len <= 0) 3885242d8dbSAnkur Dwivedi return; 3895242d8dbSAnkur Dwivedi 3905242d8dbSAnkur Dwivedi start = 0; 3915242d8dbSAnkur Dwivedi end = len - 1; 3925242d8dbSAnkur Dwivedi 3935242d8dbSAnkur Dwivedi while (start < end) { 3945242d8dbSAnkur Dwivedi tmp = arr[start]; 3955242d8dbSAnkur Dwivedi arr[start] = arr[end]; 3965242d8dbSAnkur Dwivedi arr[end] = tmp; 3975242d8dbSAnkur Dwivedi start++; 3985242d8dbSAnkur Dwivedi end--; 3995242d8dbSAnkur Dwivedi } 4005242d8dbSAnkur Dwivedi } 4015242d8dbSAnkur Dwivedi 4022cbfe3d5STejasree Kondoj int __roc_api roc_se_auth_key_set(struct roc_se_ctx *se_ctx, roc_se_auth_type type, 4032cbfe3d5STejasree Kondoj const uint8_t *key, uint16_t key_len, uint16_t mac_len); 4045e076b60SAnkur Dwivedi 4052cbfe3d5STejasree Kondoj int __roc_api roc_se_ciph_key_set(struct roc_se_ctx *se_ctx, roc_se_cipher_type type, 406aa2478adSAnoob Joseph const uint8_t *key, uint16_t key_len); 4075e076b60SAnkur Dwivedi 408a07d1d4dSVidya Sagar Velumuri void __roc_api roc_se_ctx_swap(struct roc_se_ctx *se_ctx); 4092cbfe3d5STejasree Kondoj void __roc_api roc_se_ctx_init(struct roc_se_ctx *se_ctx); 4105242d8dbSAnkur Dwivedi 411df22fe29SVidya Sagar Velumuri void __roc_api roc_se_hmac_opad_ipad_gen(roc_se_auth_type auth_type, const uint8_t *key, 412df22fe29SVidya Sagar Velumuri uint16_t length, uint8_t *opad_ipad, 413df22fe29SVidya Sagar Velumuri roc_se_op_type op_type); 414a4585931SKiran Kumar K #endif /* __ROC_SE_H__ */ 415