xref: /dpdk/drivers/common/cnxk/roc_se.h (revision 1c3f7561503734cb62616324d524ddb6e22e6044)
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