1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (C) 2019 Marvell International Ltd.
5 #include <rte_cryptodev.h>
7 #include "otx2_cryptodev_capabilities.h"
10 #define CPT_EGRP_GET(hw_caps, name, egrp) do { \
11 if ((hw_caps[CPT_ENG_TYPE_SE].name) && \
12 (hw_caps[CPT_ENG_TYPE_IE].name)) \
13 *egrp = OTX2_CPT_EGRP_SE_IE; \
14 else if (hw_caps[CPT_ENG_TYPE_SE].name) \
15 *egrp = OTX2_CPT_EGRP_SE; \
16 else if (hw_caps[CPT_ENG_TYPE_AE].name) \
17 *egrp = OTX2_CPT_EGRP_AE; \
19 *egrp = OTX2_CPT_EGRP_MAX; \
22 #define CPT_CAPS_ADD(hw_caps, name) do { \
23 enum otx2_cpt_egrp egrp; \
24 CPT_EGRP_GET(hw_caps, name, &egrp); \
25 if (egrp < OTX2_CPT_EGRP_MAX) \
26 cpt_caps_add(caps_##name, RTE_DIM(caps_##name)); \
29 #define OTX2_CPT_MAX_CAPS 34
31 static struct rte_cryptodev_capabilities otx2_cpt_caps[OTX2_CPT_MAX_CAPS];
33 static const struct rte_cryptodev_capabilities caps_mul[] = {
35 .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
38 .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
39 .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
40 (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
41 (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
42 (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
52 .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
55 .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
66 .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
69 .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
70 .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
71 (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
77 .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
80 .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
88 static const struct rte_cryptodev_capabilities caps_sha1_sha2[] = {
90 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
92 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
94 .algo = RTE_CRYPTO_AUTH_SHA1,
110 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
112 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
114 .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
130 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
132 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
134 .algo = RTE_CRYPTO_AUTH_SHA224,
150 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
152 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
154 .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
170 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
172 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
174 .algo = RTE_CRYPTO_AUTH_SHA256,
190 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
192 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
194 .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
210 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
212 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
214 .algo = RTE_CRYPTO_AUTH_SHA384,
230 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
232 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
234 .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
250 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
252 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
254 .algo = RTE_CRYPTO_AUTH_SHA512,
270 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
272 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
274 .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
290 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
292 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
294 .algo = RTE_CRYPTO_AUTH_MD5,
310 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
312 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
314 .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
331 static const struct rte_cryptodev_capabilities caps_zuc_snow3g[] = {
332 { /* SNOW 3G (UEA2) */
333 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
335 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
337 .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
353 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
355 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
357 .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
372 { /* SNOW 3G (UIA2) */
373 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
375 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
377 .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
398 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
400 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
402 .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
424 static const struct rte_cryptodev_capabilities caps_aes[] = {
425 { /* AES GMAC (AUTH) */
426 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
428 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
430 .algo = RTE_CRYPTO_AUTH_AES_GMAC,
451 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
453 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
455 .algo = RTE_CRYPTO_CIPHER_AES_CBC,
471 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
473 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
475 .algo = RTE_CRYPTO_CIPHER_AES_CTR,
491 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
493 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
495 .algo = RTE_CRYPTO_CIPHER_AES_XTS,
511 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
513 .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
515 .algo = RTE_CRYPTO_AEAD_AES_GCM,
542 static const struct rte_cryptodev_capabilities caps_kasumi[] = {
544 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
546 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
548 .algo = RTE_CRYPTO_CIPHER_KASUMI_F8,
564 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
566 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
568 .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
585 static const struct rte_cryptodev_capabilities caps_des[] = {
587 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
589 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
591 .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
607 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
609 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
611 .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
627 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
629 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
631 .algo = RTE_CRYPTO_CIPHER_DES_CBC,
648 static const struct rte_cryptodev_capabilities caps_null[] = {
650 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
652 .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
654 .algo = RTE_CRYPTO_AUTH_NULL,
669 { /* NULL (CIPHER) */
670 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
672 .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
674 .algo = RTE_CRYPTO_CIPHER_NULL,
691 static const struct rte_cryptodev_capabilities caps_end[] = {
692 RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
696 cpt_caps_add(const struct rte_cryptodev_capabilities *caps, int nb_caps)
700 if (cur_pos + nb_caps > OTX2_CPT_MAX_CAPS)
703 memcpy(&otx2_cpt_caps[cur_pos], caps, nb_caps * sizeof(caps[0]));
707 const struct rte_cryptodev_capabilities *
708 otx2_cpt_capabilities_get(union cpt_eng_caps *hw_caps)
711 CPT_CAPS_ADD(hw_caps, mul);
712 CPT_CAPS_ADD(hw_caps, sha1_sha2);
713 CPT_CAPS_ADD(hw_caps, zuc_snow3g);
714 CPT_CAPS_ADD(hw_caps, aes);
715 CPT_CAPS_ADD(hw_caps, kasumi);
716 CPT_CAPS_ADD(hw_caps, des);
718 cpt_caps_add(caps_null, RTE_DIM(caps_null));
719 cpt_caps_add(caps_end, RTE_DIM(caps_end));
721 return otx2_cpt_caps;