xref: /dpdk/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h (revision 4cd3b988fa7ecbdca97e7c827ca3fdd433e31909)
1131a75b6SHemant Agrawal /* SPDX-License-Identifier: BSD-3-Clause
2623326ddSAkhil Goyal  *
3623326ddSAkhil Goyal  *   Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
44a2694aeSHemant Agrawal  *   Copyright 2016,2020-2023 NXP
5623326ddSAkhil Goyal  *
6623326ddSAkhil Goyal  */
7623326ddSAkhil Goyal 
8b28f28aeSDharmik Thakkar #ifndef _DPAA2_SEC_PMD_PRIVATE_H_
9b28f28aeSDharmik Thakkar #define _DPAA2_SEC_PMD_PRIVATE_H_
10623326ddSAkhil Goyal 
11bffc7d56SAkhil Goyal #include <rte_security_driver.h>
12bffc7d56SAkhil Goyal 
13194c5991SAkhil Goyal #define CRYPTODEV_NAME_DPAA2_SEC_PMD	crypto_dpaa2_sec
14194c5991SAkhil Goyal /**< NXP DPAA2 - SEC PMD device name */
15a3277ad4SSlawomir Mrozowicz 
164a81d34aSGagandeep Singh extern uint8_t cryptodev_driver_id;
174a81d34aSGagandeep Singh 
184a81d34aSGagandeep Singh /* FLE_POOL_NUM_BUFS is set as per the ipsec-secgw application */
194a81d34aSGagandeep Singh #define FLE_POOL_NUM_BUFS	32000
204a81d34aSGagandeep Singh #define FLE_POOL_BUF_SIZE	256
214a81d34aSGagandeep Singh #define FLE_POOL_CACHE_SIZE	512
224a81d34aSGagandeep Singh #define FLE_SG_MEM_SIZE(num)	(FLE_POOL_BUF_SIZE + ((num) * 32))
234a81d34aSGagandeep Singh #define SEC_FLC_DHR_OUTBOUND	-114
244a81d34aSGagandeep Singh #define SEC_FLC_DHR_INBOUND	0
254a81d34aSGagandeep Singh 
268d1f3a5dSAkhil Goyal #define MAX_QUEUES		64
278d1f3a5dSAkhil Goyal #define MAX_DESC_SIZE		64
28623326ddSAkhil Goyal /** private data structure for each DPAA2_SEC device */
29623326ddSAkhil Goyal struct dpaa2_sec_dev_private {
30623326ddSAkhil Goyal 	void *mc_portal; /**< MC Portal for configuring this device */
31623326ddSAkhil Goyal 	void *hw; /**< Hardware handle for this device.Used by NADK framework */
32623326ddSAkhil Goyal 	int32_t hw_id; /**< An unique ID of this device instance */
33623326ddSAkhil Goyal 	int32_t vfio_fd; /**< File descriptor received via VFIO */
34623326ddSAkhil Goyal 	uint16_t token; /**< Token required by DPxxx objects */
35623326ddSAkhil Goyal 	unsigned int max_nb_queue_pairs;
36623326ddSAkhil Goyal 	/**< Max number of queue pairs supported by device */
374562de32SNipun Gupta 	uint8_t en_ordered;
384562de32SNipun Gupta 	uint8_t en_loose_ordered;
39623326ddSAkhil Goyal };
40623326ddSAkhil Goyal 
41623326ddSAkhil Goyal struct dpaa2_sec_qp {
42623326ddSAkhil Goyal 	struct dpaa2_queue rx_vq;
43623326ddSAkhil Goyal 	struct dpaa2_queue tx_vq;
4495af364bSGagandeep Singh 	struct rte_mempool *fle_pool; /* per device memory pool for FLE */
45623326ddSAkhil Goyal };
46623326ddSAkhil Goyal 
478d1f3a5dSAkhil Goyal enum shr_desc_type {
488d1f3a5dSAkhil Goyal 	DESC_UPDATE,
498d1f3a5dSAkhil Goyal 	DESC_FINAL,
508d1f3a5dSAkhil Goyal 	DESC_INITFINAL,
518d1f3a5dSAkhil Goyal };
528d1f3a5dSAkhil Goyal 
538d1f3a5dSAkhil Goyal #define DIR_ENC                 1
548d1f3a5dSAkhil Goyal #define DIR_DEC                 0
558d1f3a5dSAkhil Goyal 
5653982ba2SAkhil Goyal #define DPAA2_IPv6_DEFAULT_VTC_FLOW	0x60000000
5753982ba2SAkhil Goyal 
580a23d4b6SAkhil Goyal #define DPAA2_SET_FLC_EWS(flc)  (flc->word1_bits23_16 |= 0x1)
590a23d4b6SAkhil Goyal #define DPAA2_SET_FLC_RSC(flc)  (flc->word1_bits31_24 |= 0x1)
600a23d4b6SAkhil Goyal #define DPAA2_SET_FLC_REUSE_BS(flc) (flc->mode_bits |= 0x8000)
610a23d4b6SAkhil Goyal #define DPAA2_SET_FLC_REUSE_FF(flc) (flc->mode_bits |= 0x2000)
620a23d4b6SAkhil Goyal 
638d1f3a5dSAkhil Goyal /* SEC Flow Context Descriptor */
648d1f3a5dSAkhil Goyal struct sec_flow_context {
658d1f3a5dSAkhil Goyal 	/* word 0 */
668d1f3a5dSAkhil Goyal 	uint16_t word0_sdid;		/* 11-0  SDID */
678d1f3a5dSAkhil Goyal 	uint16_t word0_res;		/* 31-12 reserved */
688d1f3a5dSAkhil Goyal 
698d1f3a5dSAkhil Goyal 	/* word 1 */
708d1f3a5dSAkhil Goyal 	uint8_t word1_sdl;		/* 5-0 SDL */
718d1f3a5dSAkhil Goyal 					/* 7-6 reserved */
728d1f3a5dSAkhil Goyal 
738d1f3a5dSAkhil Goyal 	uint8_t word1_bits_15_8;        /* 11-8 CRID */
748d1f3a5dSAkhil Goyal 					/* 14-12 reserved */
758d1f3a5dSAkhil Goyal 					/* 15 CRJD */
768d1f3a5dSAkhil Goyal 
778d1f3a5dSAkhil Goyal 	uint8_t word1_bits23_16;	/* 16  EWS */
788d1f3a5dSAkhil Goyal 					/* 17 DAC */
798d1f3a5dSAkhil Goyal 					/* 18,19,20 ? */
808d1f3a5dSAkhil Goyal 					/* 23-21 reserved */
818d1f3a5dSAkhil Goyal 
828d1f3a5dSAkhil Goyal 	uint8_t word1_bits31_24;	/* 24 RSC */
838d1f3a5dSAkhil Goyal 					/* 25 RBMT */
848d1f3a5dSAkhil Goyal 					/* 31-26 reserved */
858d1f3a5dSAkhil Goyal 
868d1f3a5dSAkhil Goyal 	/* word 2  RFLC[31-0] */
878d1f3a5dSAkhil Goyal 	uint32_t word2_rflc_31_0;
888d1f3a5dSAkhil Goyal 
898d1f3a5dSAkhil Goyal 	/* word 3  RFLC[63-32] */
908d1f3a5dSAkhil Goyal 	uint32_t word3_rflc_63_32;
918d1f3a5dSAkhil Goyal 
928d1f3a5dSAkhil Goyal 	/* word 4 */
938d1f3a5dSAkhil Goyal 	uint16_t word4_iicid;		/* 15-0  IICID */
948d1f3a5dSAkhil Goyal 	uint16_t word4_oicid;		/* 31-16 OICID */
958d1f3a5dSAkhil Goyal 
968d1f3a5dSAkhil Goyal 	/* word 5 */
978d1f3a5dSAkhil Goyal 	uint32_t word5_ofqid:24;		/* 23-0 OFQID */
988d1f3a5dSAkhil Goyal 	uint32_t word5_31_24:8;
998d1f3a5dSAkhil Goyal 					/* 24 OSC */
1008d1f3a5dSAkhil Goyal 					/* 25 OBMT */
1018d1f3a5dSAkhil Goyal 					/* 29-26 reserved */
1028d1f3a5dSAkhil Goyal 					/* 31-30 ICR */
1038d1f3a5dSAkhil Goyal 
1048d1f3a5dSAkhil Goyal 	/* word 6 */
1058d1f3a5dSAkhil Goyal 	uint32_t word6_oflc_31_0;
1068d1f3a5dSAkhil Goyal 
1078d1f3a5dSAkhil Goyal 	/* word 7 */
1088d1f3a5dSAkhil Goyal 	uint32_t word7_oflc_63_32;
1098d1f3a5dSAkhil Goyal 
1108d1f3a5dSAkhil Goyal 	/* Word 8-15 storage profiles */
1118d1f3a5dSAkhil Goyal 	uint16_t dl;			/**<  DataLength(correction) */
1128d1f3a5dSAkhil Goyal 	uint16_t reserved;		/**< reserved */
1138d1f3a5dSAkhil Goyal 	uint16_t dhr;			/**< DataHeadRoom(correction) */
1148d1f3a5dSAkhil Goyal 	uint16_t mode_bits;		/**< mode bits */
1158d1f3a5dSAkhil Goyal 	uint16_t bpv0;			/**< buffer pool0 valid */
1168d1f3a5dSAkhil Goyal 	uint16_t bpid0;			/**< Bypass Memory Translation */
1178d1f3a5dSAkhil Goyal 	uint16_t bpv1;			/**< buffer pool1 valid */
1188d1f3a5dSAkhil Goyal 	uint16_t bpid1;			/**< Bypass Memory Translation */
1198d1f3a5dSAkhil Goyal 	uint64_t word_12_15[2];		/**< word 12-15 are reserved */
1208d1f3a5dSAkhil Goyal };
1218d1f3a5dSAkhil Goyal 
1228d1f3a5dSAkhil Goyal struct sec_flc_desc {
1238d1f3a5dSAkhil Goyal 	struct sec_flow_context flc;
1248d1f3a5dSAkhil Goyal 	uint32_t desc[MAX_DESC_SIZE];
1258d1f3a5dSAkhil Goyal };
1268d1f3a5dSAkhil Goyal 
1278d1f3a5dSAkhil Goyal struct ctxt_priv {
1288d1f3a5dSAkhil Goyal 	struct sec_flc_desc flc_desc[0];
1298d1f3a5dSAkhil Goyal };
1308d1f3a5dSAkhil Goyal 
1318d1f3a5dSAkhil Goyal enum dpaa2_sec_op_type {
1328d1f3a5dSAkhil Goyal 	DPAA2_SEC_NONE,  /*!< No Cipher operations*/
1338d1f3a5dSAkhil Goyal 	DPAA2_SEC_CIPHER,/*!< CIPHER operations */
1348d1f3a5dSAkhil Goyal 	DPAA2_SEC_AUTH,  /*!< Authentication Operations */
13513273250SAkhil Goyal 	DPAA2_SEC_AEAD,  /*!< AEAD (AES-GCM/CCM) type operations */
1368d1f3a5dSAkhil Goyal 	DPAA2_SEC_CIPHER_HASH,  /*!< Authenticated Encryption with
1378d1f3a5dSAkhil Goyal 				 * associated data
1388d1f3a5dSAkhil Goyal 				 */
1398d1f3a5dSAkhil Goyal 	DPAA2_SEC_HASH_CIPHER,  /*!< Encryption with Authenticated
1408d1f3a5dSAkhil Goyal 				 * associated data
1418d1f3a5dSAkhil Goyal 				 */
1428d1f3a5dSAkhil Goyal 	DPAA2_SEC_IPSEC, /*!< IPSEC protocol operations*/
1438d1f3a5dSAkhil Goyal 	DPAA2_SEC_PDCP,  /*!< PDCP protocol operations*/
1448d1f3a5dSAkhil Goyal 	DPAA2_SEC_PKC,   /*!< Public Key Cryptographic Operations */
1458d1f3a5dSAkhil Goyal 	DPAA2_SEC_MAX
1468d1f3a5dSAkhil Goyal };
1478d1f3a5dSAkhil Goyal 
1488d1f3a5dSAkhil Goyal struct dpaa2_sec_aead_ctxt {
1498d1f3a5dSAkhil Goyal 	uint16_t auth_only_len; /*!< Length of data for Auth only */
1508d1f3a5dSAkhil Goyal 	uint8_t auth_cipher_text;       /**< Authenticate/cipher ordering */
1518d1f3a5dSAkhil Goyal };
1528d1f3a5dSAkhil Goyal 
153bef594ecSAkhil Goyal /*
154bef594ecSAkhil Goyal  * The structure is to be filled by user for PDCP Protocol
155bef594ecSAkhil Goyal  */
156bef594ecSAkhil Goyal struct dpaa2_pdcp_ctxt {
157bef594ecSAkhil Goyal 	enum rte_security_pdcp_domain domain; /*!< Data/Control mode*/
158bef594ecSAkhil Goyal 	int8_t bearer;	/*!< PDCP bearer ID */
159bef594ecSAkhil Goyal 	int8_t pkt_dir;/*!< PDCP Frame Direction 0:UL 1:DL*/
160bef594ecSAkhil Goyal 	int8_t hfn_ovd;/*!< Overwrite HFN per packet*/
1616a0c9d36SAkhil Goyal 	uint8_t sn_size;	/*!< Sequence number size, 5/7/12/15/18 */
1626a0c9d36SAkhil Goyal 	uint32_t hfn_ovd_offset;/*!< offset from rte_crypto_op at which
1636a0c9d36SAkhil Goyal 				 * per packet hfn is stored
1646a0c9d36SAkhil Goyal 				 */
165bef594ecSAkhil Goyal 	uint32_t hfn;	/*!< Hyper Frame Number */
166bef594ecSAkhil Goyal 	uint32_t hfn_threshold;	/*!< HFN Threashold for key renegotiation */
167bef594ecSAkhil Goyal };
1684a81d34aSGagandeep Singh 
1694a81d34aSGagandeep Singh typedef int (*dpaa2_sec_build_fd_t)(
1704a81d34aSGagandeep Singh 	void *qp, uint8_t *drv_ctx, struct rte_crypto_vec *data_vec,
1714a81d34aSGagandeep Singh 	uint16_t n_data_vecs, union rte_crypto_sym_ofs ofs,
1724a81d34aSGagandeep Singh 	struct rte_crypto_va_iova_ptr *iv,
1734a81d34aSGagandeep Singh 	struct rte_crypto_va_iova_ptr *digest,
1744a81d34aSGagandeep Singh 	struct rte_crypto_va_iova_ptr *aad_or_auth_iv,
1754a81d34aSGagandeep Singh 	void *user_data);
1764a81d34aSGagandeep Singh 
1774a81d34aSGagandeep Singh typedef int (*dpaa2_sec_build_raw_dp_fd_t)(uint8_t *drv_ctx,
1784a81d34aSGagandeep Singh 		       struct rte_crypto_sgl *sgl,
1796bb2ce73SGagandeep Singh 		       struct rte_crypto_sgl *dest_sgl,
1804a81d34aSGagandeep Singh 		       struct rte_crypto_va_iova_ptr *iv,
1814a81d34aSGagandeep Singh 		       struct rte_crypto_va_iova_ptr *digest,
1824a81d34aSGagandeep Singh 		       struct rte_crypto_va_iova_ptr *auth_iv,
1834a81d34aSGagandeep Singh 		       union rte_crypto_sym_ofs ofs,
1844a81d34aSGagandeep Singh 		       void *userdata,
1854a81d34aSGagandeep Singh 		       struct qbman_fd *fd);
1864a81d34aSGagandeep Singh 
1878d1f3a5dSAkhil Goyal typedef struct dpaa2_sec_session_entry {
1888d1f3a5dSAkhil Goyal 	void *ctxt;
1898d1f3a5dSAkhil Goyal 	uint8_t ctxt_type;
1908d1f3a5dSAkhil Goyal 	uint8_t dir;         /*!< Operation Direction */
1918d1f3a5dSAkhil Goyal 	enum rte_crypto_cipher_algorithm cipher_alg; /*!< Cipher Algorithm*/
1928d1f3a5dSAkhil Goyal 	enum rte_crypto_auth_algorithm auth_alg; /*!< Authentication Algorithm*/
193681271e8SHemant Agrawal 	enum rte_crypto_aead_algorithm aead_alg; /*!< AEAD Algorithm*/
1944a81d34aSGagandeep Singh 	dpaa2_sec_build_fd_t build_fd;
1954a81d34aSGagandeep Singh 	dpaa2_sec_build_raw_dp_fd_t build_raw_dp_fd;
19613273250SAkhil Goyal 	union {
19713273250SAkhil Goyal 		struct {
19813273250SAkhil Goyal 			uint8_t *data;	/**< pointer to key data */
19913273250SAkhil Goyal 			size_t length;	/**< key length in bytes */
20013273250SAkhil Goyal 		} aead_key;
20113273250SAkhil Goyal 		struct {
2028d1f3a5dSAkhil Goyal 			struct {
2038d1f3a5dSAkhil Goyal 				uint8_t *data;	/**< pointer to key data */
2048d1f3a5dSAkhil Goyal 				size_t length;	/**< key length in bytes */
2058d1f3a5dSAkhil Goyal 			} cipher_key;
2068d1f3a5dSAkhil Goyal 			struct {
2078d1f3a5dSAkhil Goyal 				uint8_t *data;	/**< pointer to key data */
2088d1f3a5dSAkhil Goyal 				size_t length;	/**< key length in bytes */
2098d1f3a5dSAkhil Goyal 			} auth_key;
21013273250SAkhil Goyal 		};
21113273250SAkhil Goyal 	};
212bef594ecSAkhil Goyal 	union {
213bef594ecSAkhil Goyal 		struct {
2140fbd75a9SPablo de Lara 			struct {
2150fbd75a9SPablo de Lara 				uint16_t length; /**< IV length in bytes */
2160fbd75a9SPablo de Lara 				uint16_t offset; /**< IV offset in bytes */
2170fbd75a9SPablo de Lara 			} iv;
2187f003427SPablo de Lara 			uint16_t digest_length;
2198d1f3a5dSAkhil Goyal 			uint8_t status;
2208d1f3a5dSAkhil Goyal 			union {
2218d1f3a5dSAkhil Goyal 				struct dpaa2_sec_aead_ctxt aead_ctxt;
2228d1f3a5dSAkhil Goyal 			} ext_params;
223bef594ecSAkhil Goyal 		};
224bef594ecSAkhil Goyal 		struct dpaa2_pdcp_ctxt pdcp;
225bef594ecSAkhil Goyal 	};
2268d1f3a5dSAkhil Goyal } dpaa2_sec_session;
2278d1f3a5dSAkhil Goyal 
228623326ddSAkhil Goyal static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
229a054c627SAkhil Goyal 	/* Symmetric capabilities */
230a054c627SAkhil Goyal 	{	/* MD5 */
231a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
232a054c627SAkhil Goyal 		{.sym = {
233a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
234a054c627SAkhil Goyal 			{.auth = {
235a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_MD5,
236a054c627SAkhil Goyal 				.block_size = 64,
237a054c627SAkhil Goyal 				.key_size = {
238a054c627SAkhil Goyal 					.min = 0,
239a054c627SAkhil Goyal 					.max = 0,
240a054c627SAkhil Goyal 					.increment = 0
241a054c627SAkhil Goyal 				},
242a054c627SAkhil Goyal 				.digest_size = {
243a054c627SAkhil Goyal 					.min = 16,
244a054c627SAkhil Goyal 					.max = 16,
245a054c627SAkhil Goyal 					.increment = 0
246a054c627SAkhil Goyal 				},
247a054c627SAkhil Goyal 				.iv_size = { 0 }
248a054c627SAkhil Goyal 			}, }
249a054c627SAkhil Goyal 		}, }
250a054c627SAkhil Goyal 	},
251623326ddSAkhil Goyal 	{	/* MD5 HMAC */
252623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
253623326ddSAkhil Goyal 		{.sym = {
254623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
255623326ddSAkhil Goyal 			{.auth = {
256623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_MD5_HMAC,
257623326ddSAkhil Goyal 				.block_size = 64,
258623326ddSAkhil Goyal 				.key_size = {
259f947fd77SAkhil Goyal 					.min = 1,
260623326ddSAkhil Goyal 					.max = 64,
261f947fd77SAkhil Goyal 					.increment = 1
262623326ddSAkhil Goyal 				},
263623326ddSAkhil Goyal 				.digest_size = {
264e37effdcSHemant Agrawal 					.min = 1,
265623326ddSAkhil Goyal 					.max = 16,
266e37effdcSHemant Agrawal 					.increment = 1
267623326ddSAkhil Goyal 				},
268acf86169SPablo de Lara 				.iv_size = { 0 }
269623326ddSAkhil Goyal 			}, }
270623326ddSAkhil Goyal 		}, }
271623326ddSAkhil Goyal 	},
272a054c627SAkhil Goyal 	{	/* SHA1 */
273a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
274a054c627SAkhil Goyal 		{.sym = {
275a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
276a054c627SAkhil Goyal 			{.auth = {
277a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA1,
278a054c627SAkhil Goyal 				.block_size = 64,
279a054c627SAkhil Goyal 				.key_size = {
280a054c627SAkhil Goyal 					.min = 0,
281a054c627SAkhil Goyal 					.max = 0,
282a054c627SAkhil Goyal 					.increment = 0
283a054c627SAkhil Goyal 				},
284a054c627SAkhil Goyal 				.digest_size = {
285a054c627SAkhil Goyal 					.min = 20,
286a054c627SAkhil Goyal 					.max = 20,
287a054c627SAkhil Goyal 					.increment = 0
288a054c627SAkhil Goyal 				},
289a054c627SAkhil Goyal 				.iv_size = { 0 }
290a054c627SAkhil Goyal 			}, }
291a054c627SAkhil Goyal 		}, }
292a054c627SAkhil Goyal 	},
293623326ddSAkhil Goyal 	{	/* SHA1 HMAC */
294623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
295623326ddSAkhil Goyal 		{.sym = {
296623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
297623326ddSAkhil Goyal 			{.auth = {
298623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
299623326ddSAkhil Goyal 				.block_size = 64,
300623326ddSAkhil Goyal 				.key_size = {
301f947fd77SAkhil Goyal 					.min = 1,
302623326ddSAkhil Goyal 					.max = 64,
303f947fd77SAkhil Goyal 					.increment = 1
304623326ddSAkhil Goyal 				},
305623326ddSAkhil Goyal 				.digest_size = {
306e37effdcSHemant Agrawal 					.min = 1,
307623326ddSAkhil Goyal 					.max = 20,
308e37effdcSHemant Agrawal 					.increment = 1
309623326ddSAkhil Goyal 				},
310acf86169SPablo de Lara 				.iv_size = { 0 }
311623326ddSAkhil Goyal 			}, }
312623326ddSAkhil Goyal 		}, }
313623326ddSAkhil Goyal 	},
314a054c627SAkhil Goyal 	{	/* SHA224 */
315a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
316a054c627SAkhil Goyal 		{.sym = {
317a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
318a054c627SAkhil Goyal 			{.auth = {
319a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA224,
320a054c627SAkhil Goyal 				.block_size = 64,
321a054c627SAkhil Goyal 					.key_size = {
322a054c627SAkhil Goyal 					.min = 0,
323a054c627SAkhil Goyal 					.max = 0,
324a054c627SAkhil Goyal 					.increment = 0
325a054c627SAkhil Goyal 				},
326a054c627SAkhil Goyal 				.digest_size = {
327a054c627SAkhil Goyal 					.min = 28,
328a054c627SAkhil Goyal 					.max = 28,
329a054c627SAkhil Goyal 					.increment = 0
330a054c627SAkhil Goyal 				},
331a054c627SAkhil Goyal 				.iv_size = { 0 }
332a054c627SAkhil Goyal 			}, }
333a054c627SAkhil Goyal 		}, }
334a054c627SAkhil Goyal 	},
335623326ddSAkhil Goyal 	{	/* SHA224 HMAC */
336623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
337623326ddSAkhil Goyal 		{.sym = {
338623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
339623326ddSAkhil Goyal 			{.auth = {
340623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
341623326ddSAkhil Goyal 				.block_size = 64,
342623326ddSAkhil Goyal 				.key_size = {
343f947fd77SAkhil Goyal 					.min = 1,
344623326ddSAkhil Goyal 					.max = 64,
345f947fd77SAkhil Goyal 					.increment = 1
346623326ddSAkhil Goyal 				},
347623326ddSAkhil Goyal 				.digest_size = {
348e37effdcSHemant Agrawal 					.min = 1,
349623326ddSAkhil Goyal 					.max = 28,
350e37effdcSHemant Agrawal 					.increment = 1
351623326ddSAkhil Goyal 				},
352acf86169SPablo de Lara 				.iv_size = { 0 }
353623326ddSAkhil Goyal 			}, }
354623326ddSAkhil Goyal 		}, }
355623326ddSAkhil Goyal 	},
356a054c627SAkhil Goyal 	{	/* SHA256 */
357a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
358a054c627SAkhil Goyal 		{.sym = {
359a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
360a054c627SAkhil Goyal 			{.auth = {
361a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA256,
362a054c627SAkhil Goyal 				.block_size = 64,
363a054c627SAkhil Goyal 				.key_size = {
364a054c627SAkhil Goyal 					.min = 0,
365a054c627SAkhil Goyal 					.max = 0,
366a054c627SAkhil Goyal 					.increment = 0
367a054c627SAkhil Goyal 				},
368a054c627SAkhil Goyal 				.digest_size = {
369a054c627SAkhil Goyal 					.min = 32,
370a054c627SAkhil Goyal 					.max = 32,
371a054c627SAkhil Goyal 					.increment = 0
372a054c627SAkhil Goyal 				},
373a054c627SAkhil Goyal 				.iv_size = { 0 }
374a054c627SAkhil Goyal 			}, }
375a054c627SAkhil Goyal 		}, }
376a054c627SAkhil Goyal 	},
377623326ddSAkhil Goyal 	{	/* SHA256 HMAC */
378623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
379623326ddSAkhil Goyal 		{.sym = {
380623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
381623326ddSAkhil Goyal 			{.auth = {
382623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
383623326ddSAkhil Goyal 				.block_size = 64,
384623326ddSAkhil Goyal 				.key_size = {
385f947fd77SAkhil Goyal 					.min = 1,
386623326ddSAkhil Goyal 					.max = 64,
387f947fd77SAkhil Goyal 					.increment = 1
388623326ddSAkhil Goyal 				},
389623326ddSAkhil Goyal 				.digest_size = {
390e37effdcSHemant Agrawal 					.min = 1,
391623326ddSAkhil Goyal 					.max = 32,
392e37effdcSHemant Agrawal 					.increment = 1
393623326ddSAkhil Goyal 				},
394acf86169SPablo de Lara 				.iv_size = { 0 }
395623326ddSAkhil Goyal 			}, }
396623326ddSAkhil Goyal 		}, }
397623326ddSAkhil Goyal 	},
398a054c627SAkhil Goyal 	{	/* SHA384 */
399a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
400a054c627SAkhil Goyal 		{.sym = {
401a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
402a054c627SAkhil Goyal 			{.auth = {
403a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA384,
404a054c627SAkhil Goyal 				.block_size = 64,
405a054c627SAkhil Goyal 				.key_size = {
406a054c627SAkhil Goyal 					.min = 0,
407a054c627SAkhil Goyal 					.max = 0,
408a054c627SAkhil Goyal 					.increment = 0
409a054c627SAkhil Goyal 				},
410a054c627SAkhil Goyal 				.digest_size = {
411a054c627SAkhil Goyal 					.min = 48,
412a054c627SAkhil Goyal 					.max = 48,
413a054c627SAkhil Goyal 					.increment = 0
414a054c627SAkhil Goyal 					},
415a054c627SAkhil Goyal 				.iv_size = { 0 }
416a054c627SAkhil Goyal 			}, }
417a054c627SAkhil Goyal 		}, }
418a054c627SAkhil Goyal 	},
419623326ddSAkhil Goyal 	{	/* SHA384 HMAC */
420623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
421623326ddSAkhil Goyal 		{.sym = {
422623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
423623326ddSAkhil Goyal 			{.auth = {
424623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
425623326ddSAkhil Goyal 				.block_size = 128,
426623326ddSAkhil Goyal 				.key_size = {
427f947fd77SAkhil Goyal 					.min = 1,
428623326ddSAkhil Goyal 					.max = 128,
429f947fd77SAkhil Goyal 					.increment = 1
430623326ddSAkhil Goyal 				},
431623326ddSAkhil Goyal 				.digest_size = {
432e37effdcSHemant Agrawal 					.min = 1,
433623326ddSAkhil Goyal 					.max = 48,
434e37effdcSHemant Agrawal 					.increment = 1
435623326ddSAkhil Goyal 				},
436acf86169SPablo de Lara 				.iv_size = { 0 }
437623326ddSAkhil Goyal 			}, }
438623326ddSAkhil Goyal 		}, }
439623326ddSAkhil Goyal 	},
440a054c627SAkhil Goyal 	{	/* SHA512 */
441a054c627SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
442a054c627SAkhil Goyal 		{.sym = {
443a054c627SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
444a054c627SAkhil Goyal 			{.auth = {
445a054c627SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA512,
446a054c627SAkhil Goyal 				.block_size = 128,
447a054c627SAkhil Goyal 				.key_size = {
448a054c627SAkhil Goyal 					.min = 0,
449a054c627SAkhil Goyal 					.max = 0,
450a054c627SAkhil Goyal 					.increment = 0
451a054c627SAkhil Goyal 				},
452a054c627SAkhil Goyal 				.digest_size = {
453a054c627SAkhil Goyal 					.min = 64,
454a054c627SAkhil Goyal 					.max = 64,
455a054c627SAkhil Goyal 					.increment = 0
456a054c627SAkhil Goyal 				},
457a054c627SAkhil Goyal 				.iv_size = { 0 }
458a054c627SAkhil Goyal 			}, }
459a054c627SAkhil Goyal 		}, }
460a054c627SAkhil Goyal 	},
461623326ddSAkhil Goyal 	{	/* SHA512 HMAC */
462623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
463623326ddSAkhil Goyal 		{.sym = {
464623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
465623326ddSAkhil Goyal 			{.auth = {
466623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
467623326ddSAkhil Goyal 				.block_size = 128,
468623326ddSAkhil Goyal 				.key_size = {
469f947fd77SAkhil Goyal 					.min = 1,
470623326ddSAkhil Goyal 					.max = 128,
471f947fd77SAkhil Goyal 					.increment = 1
472623326ddSAkhil Goyal 				},
473623326ddSAkhil Goyal 				.digest_size = {
474e37effdcSHemant Agrawal 					.min = 1,
475623326ddSAkhil Goyal 					.max = 64,
476e37effdcSHemant Agrawal 					.increment = 1
477623326ddSAkhil Goyal 				},
478acf86169SPablo de Lara 				.iv_size = { 0 }
479623326ddSAkhil Goyal 			}, }
480623326ddSAkhil Goyal 		}, }
481623326ddSAkhil Goyal 	},
48213273250SAkhil Goyal 	{	/* AES GCM */
48313273250SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
48413273250SAkhil Goyal 		{.sym = {
48513273250SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
48613273250SAkhil Goyal 			{.aead = {
48713273250SAkhil Goyal 				.algo = RTE_CRYPTO_AEAD_AES_GCM,
48813273250SAkhil Goyal 				.block_size = 16,
48913273250SAkhil Goyal 				.key_size = {
49013273250SAkhil Goyal 					.min = 16,
49113273250SAkhil Goyal 					.max = 32,
49213273250SAkhil Goyal 					.increment = 8
49313273250SAkhil Goyal 				},
49413273250SAkhil Goyal 				.digest_size = {
49513273250SAkhil Goyal 					.min = 8,
49613273250SAkhil Goyal 					.max = 16,
49713273250SAkhil Goyal 					.increment = 4
49813273250SAkhil Goyal 				},
49913273250SAkhil Goyal 				.aad_size = {
50013273250SAkhil Goyal 					.min = 0,
50113273250SAkhil Goyal 					.max = 240,
50213273250SAkhil Goyal 					.increment = 1
50313273250SAkhil Goyal 				},
50413273250SAkhil Goyal 				.iv_size = {
50513273250SAkhil Goyal 					.min = 12,
50613273250SAkhil Goyal 					.max = 12,
50713273250SAkhil Goyal 					.increment = 0
50813273250SAkhil Goyal 				},
50913273250SAkhil Goyal 			}, }
51013273250SAkhil Goyal 		}, }
51113273250SAkhil Goyal 	},
512caf84d61SAkhil Goyal 	{	/* AES XCBC HMAC */
513caf84d61SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
514caf84d61SAkhil Goyal 		{.sym = {
515caf84d61SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
516caf84d61SAkhil Goyal 			{.auth = {
517caf84d61SAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
518caf84d61SAkhil Goyal 				.block_size = 16,
519caf84d61SAkhil Goyal 				.key_size = {
520caf84d61SAkhil Goyal 					.min = 1,
521caf84d61SAkhil Goyal 					.max = 16,
522caf84d61SAkhil Goyal 					.increment = 1
523caf84d61SAkhil Goyal 				},
524caf84d61SAkhil Goyal 				.digest_size = {
525caf84d61SAkhil Goyal 					.min = 12,
526caf84d61SAkhil Goyal 					.max = 16,
527caf84d61SAkhil Goyal 					.increment = 4
528caf84d61SAkhil Goyal 				},
529caf84d61SAkhil Goyal 				.aad_size = { 0 },
530caf84d61SAkhil Goyal 				.iv_size = { 0 }
531caf84d61SAkhil Goyal 			}, }
532caf84d61SAkhil Goyal 		}, }
533caf84d61SAkhil Goyal 	},
53483087a92SHemant Agrawal 	{	/* AES CMAC */
53583087a92SHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
53683087a92SHemant Agrawal 		{.sym = {
53783087a92SHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
53883087a92SHemant Agrawal 			{.auth = {
53983087a92SHemant Agrawal 				.algo = RTE_CRYPTO_AUTH_AES_CMAC,
54083087a92SHemant Agrawal 				.block_size = 16,
54183087a92SHemant Agrawal 				.key_size = {
54283087a92SHemant Agrawal 					.min = 1,
54383087a92SHemant Agrawal 					.max = 16,
54483087a92SHemant Agrawal 					.increment = 1
54583087a92SHemant Agrawal 				},
54683087a92SHemant Agrawal 				.digest_size = {
5476a9dc839SHemant Agrawal 					.min = 12,
54883087a92SHemant Agrawal 					.max = 16,
54983087a92SHemant Agrawal 					.increment = 4
55083087a92SHemant Agrawal 				},
5516a9dc839SHemant Agrawal 				.aad_size = { 0 },
5526a9dc839SHemant Agrawal 				.iv_size = { 0 }
55383087a92SHemant Agrawal 			}, }
55483087a92SHemant Agrawal 		}, }
55583087a92SHemant Agrawal 	},
556623326ddSAkhil Goyal 	{	/* AES CBC */
557623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
558623326ddSAkhil Goyal 		{.sym = {
559623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
560623326ddSAkhil Goyal 			{.cipher = {
561623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_AES_CBC,
562623326ddSAkhil Goyal 				.block_size = 16,
563623326ddSAkhil Goyal 				.key_size = {
564623326ddSAkhil Goyal 					.min = 16,
565623326ddSAkhil Goyal 					.max = 32,
566623326ddSAkhil Goyal 					.increment = 8
567623326ddSAkhil Goyal 				},
568623326ddSAkhil Goyal 				.iv_size = {
569623326ddSAkhil Goyal 					.min = 16,
570623326ddSAkhil Goyal 					.max = 16,
571623326ddSAkhil Goyal 					.increment = 0
572623326ddSAkhil Goyal 				}
573623326ddSAkhil Goyal 			}, }
574623326ddSAkhil Goyal 		}, }
575623326ddSAkhil Goyal 	},
57613273250SAkhil Goyal 	{	/* AES CTR */
57713273250SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
57813273250SAkhil Goyal 		{.sym = {
57913273250SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
58013273250SAkhil Goyal 			{.cipher = {
58113273250SAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_AES_CTR,
58213273250SAkhil Goyal 				.block_size = 16,
58313273250SAkhil Goyal 				.key_size = {
58413273250SAkhil Goyal 					.min = 16,
58513273250SAkhil Goyal 					.max = 32,
58613273250SAkhil Goyal 					.increment = 8
58713273250SAkhil Goyal 				},
58813273250SAkhil Goyal 				.iv_size = {
58913273250SAkhil Goyal 					.min = 16,
59013273250SAkhil Goyal 					.max = 16,
59113273250SAkhil Goyal 					.increment = 0
59213273250SAkhil Goyal 				},
59313273250SAkhil Goyal 			}, }
59413273250SAkhil Goyal 		}, }
59513273250SAkhil Goyal 	},
596a6e892f4SAkhil Goyal 	{	/* DES CBC */
597a6e892f4SAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
598a6e892f4SAkhil Goyal 		{.sym = {
599a6e892f4SAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
600a6e892f4SAkhil Goyal 			{.cipher = {
601a6e892f4SAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_DES_CBC,
602a6e892f4SAkhil Goyal 				.block_size = 8,
603a6e892f4SAkhil Goyal 				.key_size = {
604a6e892f4SAkhil Goyal 					.min = 8,
605a6e892f4SAkhil Goyal 					.max = 8,
606a6e892f4SAkhil Goyal 					.increment = 0
607a6e892f4SAkhil Goyal 				},
608a6e892f4SAkhil Goyal 				.iv_size = {
609a6e892f4SAkhil Goyal 					.min = 8,
610a6e892f4SAkhil Goyal 					.max = 8,
611a6e892f4SAkhil Goyal 					.increment = 0
612a6e892f4SAkhil Goyal 				}
613a6e892f4SAkhil Goyal 			}, }
614a6e892f4SAkhil Goyal 		}, }
615a6e892f4SAkhil Goyal 	},
616623326ddSAkhil Goyal 	{	/* 3DES CBC */
617623326ddSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
618623326ddSAkhil Goyal 		{.sym = {
619623326ddSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
620623326ddSAkhil Goyal 			{.cipher = {
621623326ddSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_3DES_CBC,
622623326ddSAkhil Goyal 				.block_size = 8,
623623326ddSAkhil Goyal 				.key_size = {
624623326ddSAkhil Goyal 					.min = 16,
625623326ddSAkhil Goyal 					.max = 24,
626623326ddSAkhil Goyal 					.increment = 8
627623326ddSAkhil Goyal 				},
628623326ddSAkhil Goyal 				.iv_size = {
629623326ddSAkhil Goyal 					.min = 8,
630623326ddSAkhil Goyal 					.max = 8,
631623326ddSAkhil Goyal 					.increment = 0
632623326ddSAkhil Goyal 				}
633623326ddSAkhil Goyal 			}, }
634623326ddSAkhil Goyal 		}, }
635623326ddSAkhil Goyal 	},
6369ecbe824SHemant Agrawal 	{	/* SNOW 3G (UIA2) */
6379ecbe824SHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
6389ecbe824SHemant Agrawal 		{.sym = {
6399ecbe824SHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
6409ecbe824SHemant Agrawal 			{.auth = {
6419ecbe824SHemant Agrawal 				.algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
6429ecbe824SHemant Agrawal 				.block_size = 16,
6439ecbe824SHemant Agrawal 				.key_size = {
6449ecbe824SHemant Agrawal 					.min = 16,
6459ecbe824SHemant Agrawal 					.max = 16,
6469ecbe824SHemant Agrawal 					.increment = 0
6479ecbe824SHemant Agrawal 				},
6489ecbe824SHemant Agrawal 				.digest_size = {
6499ecbe824SHemant Agrawal 					.min = 4,
6509ecbe824SHemant Agrawal 					.max = 4,
6519ecbe824SHemant Agrawal 					.increment = 0
6529ecbe824SHemant Agrawal 				},
6539ecbe824SHemant Agrawal 				.iv_size = {
6549ecbe824SHemant Agrawal 					.min = 16,
6559ecbe824SHemant Agrawal 					.max = 16,
6569ecbe824SHemant Agrawal 					.increment = 0
6579ecbe824SHemant Agrawal 				}
6589ecbe824SHemant Agrawal 			}, }
6599ecbe824SHemant Agrawal 		}, }
6609ecbe824SHemant Agrawal 	},
6619ecbe824SHemant Agrawal 	{	/* SNOW 3G (UEA2) */
6629ecbe824SHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
6639ecbe824SHemant Agrawal 		{.sym = {
6649ecbe824SHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
6659ecbe824SHemant Agrawal 			{.cipher = {
6669ecbe824SHemant Agrawal 				.algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
6679ecbe824SHemant Agrawal 				.block_size = 16,
6689ecbe824SHemant Agrawal 				.key_size = {
6699ecbe824SHemant Agrawal 					.min = 16,
6709ecbe824SHemant Agrawal 					.max = 16,
6719ecbe824SHemant Agrawal 					.increment = 0
6729ecbe824SHemant Agrawal 				},
6739ecbe824SHemant Agrawal 				.iv_size = {
6749ecbe824SHemant Agrawal 					.min = 16,
6759ecbe824SHemant Agrawal 					.max = 16,
6769ecbe824SHemant Agrawal 					.increment = 0
6779ecbe824SHemant Agrawal 				}
6789ecbe824SHemant Agrawal 			}, }
6799ecbe824SHemant Agrawal 		}, }
6809ecbe824SHemant Agrawal 	},
681b69ee138SHemant Agrawal 	{	/* ZUC (EEA3) */
682b69ee138SHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
683b69ee138SHemant Agrawal 		{.sym = {
684b69ee138SHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
685b69ee138SHemant Agrawal 			{.cipher = {
686b69ee138SHemant Agrawal 				.algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
687b69ee138SHemant Agrawal 				.block_size = 16,
688b69ee138SHemant Agrawal 				.key_size = {
689b69ee138SHemant Agrawal 					.min = 16,
690b69ee138SHemant Agrawal 					.max = 16,
691b69ee138SHemant Agrawal 					.increment = 0
692b69ee138SHemant Agrawal 				},
693b69ee138SHemant Agrawal 				.iv_size = {
694b69ee138SHemant Agrawal 					.min = 16,
695b69ee138SHemant Agrawal 					.max = 16,
696b69ee138SHemant Agrawal 					.increment = 0
697b69ee138SHemant Agrawal 				}
698b69ee138SHemant Agrawal 			}, }
699b69ee138SHemant Agrawal 		}, }
700b69ee138SHemant Agrawal 	},
701b69ee138SHemant Agrawal 	{	/* ZUC (EIA3) */
702b69ee138SHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
703b69ee138SHemant Agrawal 		{.sym = {
704b69ee138SHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
705b69ee138SHemant Agrawal 			{.auth = {
706b69ee138SHemant Agrawal 				.algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
707b69ee138SHemant Agrawal 				.block_size = 16,
708b69ee138SHemant Agrawal 				.key_size = {
709b69ee138SHemant Agrawal 					.min = 16,
710b69ee138SHemant Agrawal 					.max = 16,
711b69ee138SHemant Agrawal 					.increment = 0
712b69ee138SHemant Agrawal 				},
713b69ee138SHemant Agrawal 				.digest_size = {
714b69ee138SHemant Agrawal 					.min = 4,
715b69ee138SHemant Agrawal 					.max = 4,
716b69ee138SHemant Agrawal 					.increment = 0
717b69ee138SHemant Agrawal 				},
718b69ee138SHemant Agrawal 				.iv_size = {
719b69ee138SHemant Agrawal 					.min = 16,
720b69ee138SHemant Agrawal 					.max = 16,
721b69ee138SHemant Agrawal 					.increment = 0
722b69ee138SHemant Agrawal 				}
723b69ee138SHemant Agrawal 			}, }
724b69ee138SHemant Agrawal 		}, }
725b69ee138SHemant Agrawal 	},
726623326ddSAkhil Goyal 	RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
727623326ddSAkhil Goyal };
7280a23d4b6SAkhil Goyal 
729bef594ecSAkhil Goyal static const struct rte_cryptodev_capabilities dpaa2_pdcp_capabilities[] = {
730bef594ecSAkhil Goyal 	{	/* SNOW 3G (UIA2) */
731bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
732bef594ecSAkhil Goyal 		{.sym = {
733bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
734bef594ecSAkhil Goyal 			{.auth = {
735bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
736bef594ecSAkhil Goyal 				.block_size = 16,
737bef594ecSAkhil Goyal 				.key_size = {
738bef594ecSAkhil Goyal 					.min = 16,
739bef594ecSAkhil Goyal 					.max = 16,
740bef594ecSAkhil Goyal 					.increment = 0
741bef594ecSAkhil Goyal 				},
742bef594ecSAkhil Goyal 				.digest_size = {
743bef594ecSAkhil Goyal 					.min = 4,
744bef594ecSAkhil Goyal 					.max = 4,
745bef594ecSAkhil Goyal 					.increment = 0
746bef594ecSAkhil Goyal 				},
747bef594ecSAkhil Goyal 				.iv_size = {
748bef594ecSAkhil Goyal 					.min = 16,
749bef594ecSAkhil Goyal 					.max = 16,
750bef594ecSAkhil Goyal 					.increment = 0
751bef594ecSAkhil Goyal 				}
752bef594ecSAkhil Goyal 			}, }
753bef594ecSAkhil Goyal 		}, }
754bef594ecSAkhil Goyal 	},
755bef594ecSAkhil Goyal 	{	/* SNOW 3G (UEA2) */
756bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
757bef594ecSAkhil Goyal 		{.sym = {
758bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
759bef594ecSAkhil Goyal 			{.cipher = {
760bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
761bef594ecSAkhil Goyal 				.block_size = 16,
762bef594ecSAkhil Goyal 				.key_size = {
763bef594ecSAkhil Goyal 					.min = 16,
764bef594ecSAkhil Goyal 					.max = 16,
765bef594ecSAkhil Goyal 					.increment = 0
766bef594ecSAkhil Goyal 				},
767bef594ecSAkhil Goyal 				.iv_size = {
768bef594ecSAkhil Goyal 					.min = 16,
769bef594ecSAkhil Goyal 					.max = 16,
770bef594ecSAkhil Goyal 					.increment = 0
771bef594ecSAkhil Goyal 				}
772bef594ecSAkhil Goyal 			}, }
773bef594ecSAkhil Goyal 		}, }
774bef594ecSAkhil Goyal 	},
775bef594ecSAkhil Goyal 	{	/* AES CTR */
776bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
777bef594ecSAkhil Goyal 		{.sym = {
778bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
779bef594ecSAkhil Goyal 			{.cipher = {
780bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_AES_CTR,
781bef594ecSAkhil Goyal 				.block_size = 16,
782bef594ecSAkhil Goyal 				.key_size = {
783bef594ecSAkhil Goyal 					.min = 16,
784bef594ecSAkhil Goyal 					.max = 32,
785bef594ecSAkhil Goyal 					.increment = 8
786bef594ecSAkhil Goyal 				},
787bef594ecSAkhil Goyal 				.iv_size = {
788bef594ecSAkhil Goyal 					.min = 16,
789bef594ecSAkhil Goyal 					.max = 16,
790bef594ecSAkhil Goyal 					.increment = 0
791bef594ecSAkhil Goyal 				}
792bef594ecSAkhil Goyal 			}, }
793bef594ecSAkhil Goyal 		}, }
794bef594ecSAkhil Goyal 	},
795bef594ecSAkhil Goyal 	{	/* NULL (AUTH) */
796bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
797bef594ecSAkhil Goyal 		{.sym = {
798bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
799bef594ecSAkhil Goyal 			{.auth = {
800bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_NULL,
801bef594ecSAkhil Goyal 				.block_size = 1,
802bef594ecSAkhil Goyal 				.key_size = {
803bef594ecSAkhil Goyal 					.min = 0,
804bef594ecSAkhil Goyal 					.max = 0,
805bef594ecSAkhil Goyal 					.increment = 0
806bef594ecSAkhil Goyal 				},
807bef594ecSAkhil Goyal 				.digest_size = {
808bef594ecSAkhil Goyal 					.min = 0,
809bef594ecSAkhil Goyal 					.max = 0,
810bef594ecSAkhil Goyal 					.increment = 0
811bef594ecSAkhil Goyal 				},
812bef594ecSAkhil Goyal 				.iv_size = { 0 }
813bef594ecSAkhil Goyal 			}, },
814bef594ecSAkhil Goyal 		}, },
815bef594ecSAkhil Goyal 	},
816bef594ecSAkhil Goyal 	{	/* NULL (CIPHER) */
817bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
818bef594ecSAkhil Goyal 		{.sym = {
819bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
820bef594ecSAkhil Goyal 			{.cipher = {
821bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_NULL,
822bef594ecSAkhil Goyal 				.block_size = 1,
823bef594ecSAkhil Goyal 				.key_size = {
824bef594ecSAkhil Goyal 					.min = 0,
825bef594ecSAkhil Goyal 					.max = 0,
826bef594ecSAkhil Goyal 					.increment = 0
827bef594ecSAkhil Goyal 				},
828bef594ecSAkhil Goyal 				.iv_size = {
829bef594ecSAkhil Goyal 					.min = 0,
830bef594ecSAkhil Goyal 					.max = 0,
831bef594ecSAkhil Goyal 					.increment = 0
832bef594ecSAkhil Goyal 				}
833bef594ecSAkhil Goyal 			}, },
834bef594ecSAkhil Goyal 		}, }
835bef594ecSAkhil Goyal 	},
836bef594ecSAkhil Goyal 	{	/* ZUC (EEA3) */
837bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
838bef594ecSAkhil Goyal 		{.sym = {
839bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
840bef594ecSAkhil Goyal 			{.cipher = {
841bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
842bef594ecSAkhil Goyal 				.block_size = 16,
843bef594ecSAkhil Goyal 				.key_size = {
844bef594ecSAkhil Goyal 					.min = 16,
845bef594ecSAkhil Goyal 					.max = 16,
846bef594ecSAkhil Goyal 					.increment = 0
847bef594ecSAkhil Goyal 				},
848bef594ecSAkhil Goyal 				.iv_size = {
849bef594ecSAkhil Goyal 					.min = 16,
850bef594ecSAkhil Goyal 					.max = 16,
851bef594ecSAkhil Goyal 					.increment = 0
852bef594ecSAkhil Goyal 				}
853bef594ecSAkhil Goyal 			}, }
854bef594ecSAkhil Goyal 		}, }
855bef594ecSAkhil Goyal 	},
856bef594ecSAkhil Goyal 	{	/* ZUC (EIA3) */
857bef594ecSAkhil Goyal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
858bef594ecSAkhil Goyal 		{.sym = {
859bef594ecSAkhil Goyal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
860bef594ecSAkhil Goyal 			{.auth = {
861bef594ecSAkhil Goyal 				.algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
862bef594ecSAkhil Goyal 				.block_size = 16,
863bef594ecSAkhil Goyal 				.key_size = {
864bef594ecSAkhil Goyal 					.min = 16,
865bef594ecSAkhil Goyal 					.max = 16,
866bef594ecSAkhil Goyal 					.increment = 0
867bef594ecSAkhil Goyal 				},
868bef594ecSAkhil Goyal 				.digest_size = {
869bef594ecSAkhil Goyal 					.min = 4,
870bef594ecSAkhil Goyal 					.max = 4,
871bef594ecSAkhil Goyal 					.increment = 0
872bef594ecSAkhil Goyal 				},
873bef594ecSAkhil Goyal 				.iv_size = {
874bef594ecSAkhil Goyal 					.min = 16,
875bef594ecSAkhil Goyal 					.max = 16,
876bef594ecSAkhil Goyal 					.increment = 0
877bef594ecSAkhil Goyal 				}
878bef594ecSAkhil Goyal 			}, }
879bef594ecSAkhil Goyal 		}, }
880bef594ecSAkhil Goyal 	},
8814a2694aeSHemant Agrawal 	{	/* NULL (AUTH) */
8824a2694aeSHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
8834a2694aeSHemant Agrawal 		{.sym = {
8844a2694aeSHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
8854a2694aeSHemant Agrawal 			{.auth = {
8864a2694aeSHemant Agrawal 				.algo = RTE_CRYPTO_AUTH_NULL,
8874a2694aeSHemant Agrawal 				.block_size = 1,
8884a2694aeSHemant Agrawal 				.key_size = {
8894a2694aeSHemant Agrawal 					.min = 0,
8904a2694aeSHemant Agrawal 					.max = 0,
8914a2694aeSHemant Agrawal 					.increment = 0
8924a2694aeSHemant Agrawal 				},
8934a2694aeSHemant Agrawal 				.digest_size = {
8944a2694aeSHemant Agrawal 					.min = 0,
8954a2694aeSHemant Agrawal 					.max = 0,
8964a2694aeSHemant Agrawal 					.increment = 0
8974a2694aeSHemant Agrawal 				},
8984a2694aeSHemant Agrawal 			}, },
8994a2694aeSHemant Agrawal 		}, },
9004a2694aeSHemant Agrawal 	},
9014a2694aeSHemant Agrawal 	{	/* NULL (CIPHER) */
9024a2694aeSHemant Agrawal 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
9034a2694aeSHemant Agrawal 		{.sym = {
9044a2694aeSHemant Agrawal 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
9054a2694aeSHemant Agrawal 			{.cipher = {
9064a2694aeSHemant Agrawal 				.algo = RTE_CRYPTO_CIPHER_NULL,
9074a2694aeSHemant Agrawal 				.block_size = 1,
9084a2694aeSHemant Agrawal 				.key_size = {
9094a2694aeSHemant Agrawal 					.min = 0,
9104a2694aeSHemant Agrawal 					.max = 0,
9114a2694aeSHemant Agrawal 					.increment = 0
9124a2694aeSHemant Agrawal 				},
9134a2694aeSHemant Agrawal 				.iv_size = {
9144a2694aeSHemant Agrawal 					.min = 0,
9154a2694aeSHemant Agrawal 					.max = 0,
9164a2694aeSHemant Agrawal 					.increment = 0
9174a2694aeSHemant Agrawal 				}
9184a2694aeSHemant Agrawal 			}, },
9194a2694aeSHemant Agrawal 		}, }
9204a2694aeSHemant Agrawal 	},
921bef594ecSAkhil Goyal 	RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
922bef594ecSAkhil Goyal };
923bef594ecSAkhil Goyal 
9240a23d4b6SAkhil Goyal static const struct rte_security_capability dpaa2_sec_security_cap[] = {
9250a23d4b6SAkhil Goyal 	{ /* IPsec Lookaside Protocol offload ESP Transport Egress */
9260a23d4b6SAkhil Goyal 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
9270a23d4b6SAkhil Goyal 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
9280a23d4b6SAkhil Goyal 		.ipsec = {
9290a23d4b6SAkhil Goyal 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
9300a23d4b6SAkhil Goyal 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
9310a23d4b6SAkhil Goyal 			.direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
932dc44fed3SHemant Agrawal 			.options = {
93371bcc761SHemant Agrawal 				.udp_encap = 1,
934dc44fed3SHemant Agrawal 				.copy_df = 1,
935dc44fed3SHemant Agrawal 				.copy_dscp = 1,
936*4cd3b988SHemant Agrawal 				.dec_ttl = 1,
937d775d91dSHemant Agrawal 				.esn = 1,
938dc44fed3SHemant Agrawal 			},
939f6ac17d2SHemant Agrawal 			.replay_win_sz_max = 1024
9400a23d4b6SAkhil Goyal 		},
9410a23d4b6SAkhil Goyal 		.crypto_capabilities = dpaa2_sec_capabilities
9420a23d4b6SAkhil Goyal 	},
9430a23d4b6SAkhil Goyal 	{ /* IPsec Lookaside Protocol offload ESP Tunnel Ingress */
9440a23d4b6SAkhil Goyal 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
9450a23d4b6SAkhil Goyal 		.protocol = RTE_SECURITY_PROTOCOL_IPSEC,
9460a23d4b6SAkhil Goyal 		.ipsec = {
9470a23d4b6SAkhil Goyal 			.proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
9480a23d4b6SAkhil Goyal 			.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
9490a23d4b6SAkhil Goyal 			.direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
950dc44fed3SHemant Agrawal 			.options = {
95171bcc761SHemant Agrawal 				.iv_gen_disable = 1,
95271bcc761SHemant Agrawal 				.udp_encap = 1,
953dc44fed3SHemant Agrawal 				.copy_df = 1,
954dc44fed3SHemant Agrawal 				.copy_dscp = 1,
955*4cd3b988SHemant Agrawal 				.dec_ttl = 1,
956d775d91dSHemant Agrawal 				.esn = 1,
957dc44fed3SHemant Agrawal 			},
958f6ac17d2SHemant Agrawal 			.replay_win_sz_max = 1024
9590a23d4b6SAkhil Goyal 		},
9600a23d4b6SAkhil Goyal 		.crypto_capabilities = dpaa2_sec_capabilities
9610a23d4b6SAkhil Goyal 	},
962bef594ecSAkhil Goyal 	{ /* PDCP Lookaside Protocol offload Data */
963bef594ecSAkhil Goyal 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
964bef594ecSAkhil Goyal 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
965bef594ecSAkhil Goyal 		.pdcp = {
966bef594ecSAkhil Goyal 			.domain = RTE_SECURITY_PDCP_MODE_DATA,
967bef594ecSAkhil Goyal 			.capa_flags = 0
968bef594ecSAkhil Goyal 		},
969bef594ecSAkhil Goyal 		.crypto_capabilities = dpaa2_pdcp_capabilities
970bef594ecSAkhil Goyal 	},
971bef594ecSAkhil Goyal 	{ /* PDCP Lookaside Protocol offload Control */
972bef594ecSAkhil Goyal 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
973bef594ecSAkhil Goyal 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
974bef594ecSAkhil Goyal 		.pdcp = {
975bef594ecSAkhil Goyal 			.domain = RTE_SECURITY_PDCP_MODE_CONTROL,
976bef594ecSAkhil Goyal 			.capa_flags = 0
977bef594ecSAkhil Goyal 		},
978bef594ecSAkhil Goyal 		.crypto_capabilities = dpaa2_pdcp_capabilities
979bef594ecSAkhil Goyal 	},
9803d1037e9SGagandeep Singh 	{ /* PDCP Lookaside Protocol offload Short MAC */
9813d1037e9SGagandeep Singh 		.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
9823d1037e9SGagandeep Singh 		.protocol = RTE_SECURITY_PROTOCOL_PDCP,
9833d1037e9SGagandeep Singh 		.pdcp = {
9843d1037e9SGagandeep Singh 			.domain = RTE_SECURITY_PDCP_MODE_SHORT_MAC,
9853d1037e9SGagandeep Singh 			.capa_flags = 0
9863d1037e9SGagandeep Singh 		},
9873d1037e9SGagandeep Singh 		.crypto_capabilities = dpaa2_pdcp_capabilities
9883d1037e9SGagandeep Singh 	},
9890a23d4b6SAkhil Goyal 	{
9900a23d4b6SAkhil Goyal 		.action = RTE_SECURITY_ACTION_TYPE_NONE
9910a23d4b6SAkhil Goyal 	}
9920a23d4b6SAkhil Goyal };
9930a23d4b6SAkhil Goyal /**
9940a23d4b6SAkhil Goyal  * Checksum
9950a23d4b6SAkhil Goyal  *
9960a23d4b6SAkhil Goyal  * @param buffer calculate chksum for buffer
9970a23d4b6SAkhil Goyal  * @param len    buffer length
9980a23d4b6SAkhil Goyal  *
9990a23d4b6SAkhil Goyal  * @return checksum value in host cpu order
10000a23d4b6SAkhil Goyal  */
10010a23d4b6SAkhil Goyal static inline uint16_t
calc_chksum(void * buffer,int len)10020a23d4b6SAkhil Goyal calc_chksum(void *buffer, int len)
10030a23d4b6SAkhil Goyal {
10040a23d4b6SAkhil Goyal 	uint16_t *buf = (uint16_t *)buffer;
10050a23d4b6SAkhil Goyal 	uint32_t sum = 0;
10060a23d4b6SAkhil Goyal 	uint16_t result;
10070a23d4b6SAkhil Goyal 
10080a23d4b6SAkhil Goyal 	for (sum = 0; len > 1; len -= 2)
10090a23d4b6SAkhil Goyal 		sum += *buf++;
10100a23d4b6SAkhil Goyal 
10110a23d4b6SAkhil Goyal 	if (len == 1)
10120a23d4b6SAkhil Goyal 		sum += *(unsigned char *)buf;
10130a23d4b6SAkhil Goyal 
10140a23d4b6SAkhil Goyal 	sum = (sum >> 16) + (sum & 0xFFFF);
10150a23d4b6SAkhil Goyal 	sum += (sum >> 16);
10160a23d4b6SAkhil Goyal 	result = ~sum;
10170a23d4b6SAkhil Goyal 
10180a23d4b6SAkhil Goyal 	return  result;
10190a23d4b6SAkhil Goyal }
10200a23d4b6SAkhil Goyal 
10214a81d34aSGagandeep Singh int
10224a81d34aSGagandeep Singh dpaa2_sec_configure_raw_dp_ctx(struct rte_cryptodev *dev, uint16_t qp_id,
10234a81d34aSGagandeep Singh 	struct rte_crypto_raw_dp_ctx *raw_dp_ctx,
10244a81d34aSGagandeep Singh 	enum rte_crypto_op_sess_type sess_type,
10254a81d34aSGagandeep Singh 	union rte_cryptodev_session_ctx session_ctx, uint8_t is_update);
10264a81d34aSGagandeep Singh 
10274a81d34aSGagandeep Singh int
10284a81d34aSGagandeep Singh dpaa2_sec_get_dp_ctx_size(struct rte_cryptodev *dev);
10294a81d34aSGagandeep Singh 
10304a81d34aSGagandeep Singh 
1031b28f28aeSDharmik Thakkar #endif /* _DPAA2_SEC_PMD_PRIVATE_H_ */
1032