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