crypto/octeontx2: discover capabilities
[dpdk.git] / drivers / crypto / octeontx2 / otx2_cryptodev_capabilities.c
index 3eb3d85..9e18c4e 100644 (file)
 #include <rte_cryptodev.h>
 
 #include "otx2_cryptodev_capabilities.h"
+#include "otx2_mbox.h"
 
-static const struct
-rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
-       /* Symmetric capabilities */
-       {       /* NULL (AUTH) */
-               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
-               {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_NULL,
-                               .block_size = 1,
-                               .key_size = {
-                                       .min = 0,
-                                       .max = 0,
-                                       .increment = 0
-                               },
-                               .digest_size = {
-                                       .min = 0,
-                                       .max = 0,
-                                       .increment = 0
-                               },
-                       }, },
-               }, },
-       },
-       {       /* AES GMAC (AUTH) */
-               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
-               {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_AES_GMAC,
-                               .block_size = 16,
-                               .key_size = {
-                                       .min = 16,
-                                       .max = 32,
-                                       .increment = 8
-                               },
-                               .digest_size = {
-                                       .min = 8,
-                                       .max = 16,
-                                       .increment = 4
-                               },
-                               .iv_size = {
-                                       .min = 12,
-                                       .max = 12,
-                                       .increment = 0
-                               }
-                       }, }
+#define CPT_EGRP_GET(hw_caps, name, egrp) do { \
+       if ((hw_caps[CPT_ENG_TYPE_SE].name) &&  \
+           (hw_caps[CPT_ENG_TYPE_IE].name))    \
+               *egrp = OTX2_CPT_EGRP_SE_IE;    \
+       else if (hw_caps[CPT_ENG_TYPE_SE].name) \
+               *egrp = OTX2_CPT_EGRP_SE;       \
+       else if (hw_caps[CPT_ENG_TYPE_AE].name) \
+               *egrp = OTX2_CPT_EGRP_AE;       \
+       else                                    \
+               *egrp = OTX2_CPT_EGRP_MAX;      \
+} while (0)
+
+#define CPT_CAPS_ADD(hw_caps, name) do {                               \
+       enum otx2_cpt_egrp egrp;                                        \
+       CPT_EGRP_GET(hw_caps, name, &egrp);                             \
+       if (egrp < OTX2_CPT_EGRP_MAX)                                   \
+               cpt_caps_add(caps_##name, RTE_DIM(caps_##name));        \
+} while (0)
+
+#define OTX2_CPT_MAX_CAPS 34
+
+static struct rte_cryptodev_capabilities otx2_cpt_caps[OTX2_CPT_MAX_CAPS];
+
+static const struct rte_cryptodev_capabilities caps_mul[] = {
+       {       /* RSA */
+               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
+               {.asym = {
+                       .xform_capa = {
+                               .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
+                               .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
+                                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
+                                       (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
+                                       (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
+                               {.modlen = {
+                                       .min = 17,
+                                       .max = 1024,
+                                       .increment = 1
+                               }, }
+                       }
                }, }
        },
-       {       /* KASUMI (F9) */
-               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
-               {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
-                               .block_size = 8,
-                               .key_size = {
-                                       .min = 16,
-                                       .max = 16,
-                                       .increment = 0
-                               },
-                               .digest_size = {
-                                       .min = 4,
-                                       .max = 4,
-                                       .increment = 0
-                               },
-                       }, }
+       {       /* MOD_EXP */
+               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
+               {.asym = {
+                       .xform_capa = {
+                               .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
+                               .op_types = 0,
+                               {.modlen = {
+                                       .min = 17,
+                                       .max = 1024,
+                                       .increment = 1
+                               }, }
+                       }
                }, }
        },
-       {       /* MD5 */
-               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
-               {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_MD5,
-                               .block_size = 64,
-                               .key_size = {
-                                       .min = 0,
-                                       .max = 0,
-                                       .increment = 0
-                               },
-                               .digest_size = {
-                                       .min = 16,
-                                       .max = 16,
-                                       .increment = 0
-                               },
-                       }, }
-               }, }
+       {       /* ECDSA */
+               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
+               {.asym = {
+                       .xform_capa = {
+                               .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
+                               .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
+                                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
+                               }
+                       },
+               }
        },
-       {       /* MD5 HMAC */
-               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
-               {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
-                               .block_size = 64,
-                               .key_size = {
-                                       .min = 8,
-                                       .max = 64,
-                                       .increment = 8
-                               },
-                               .digest_size = {
-                                       .min = 16,
-                                       .max = 16,
-                                       .increment = 0
-                               },
-                       }, }
-               }, }
+       {       /* ECPM */
+               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
+               {.asym = {
+                       .xform_capa = {
+                               .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
+                               .op_types = 0
+                               }
+                       },
+               }
        },
+};
+
+static const struct rte_cryptodev_capabilities caps_sha1_sha2[] = {
        {       /* SHA1 */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -147,9 +119,9 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 20,
+                                       .min = 12,
                                        .max = 20,
-                                       .increment = 0
+                                       .increment = 8
                                },
                        }, }
                }, }
@@ -227,9 +199,9 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 32,
+                                       .min = 16,
                                        .max = 32,
-                                       .increment = 0
+                                       .increment = 16
                                },
                        }, }
                }, }
@@ -267,9 +239,9 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 48,
+                                       .min = 24,
                                        .max = 48,
-                                       .increment = 0
+                                       .increment = 24
                                        },
                        }, }
                }, }
@@ -307,28 +279,66 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 64,
+                                       .min = 32,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 32
                                },
                        }, }
                }, }
        },
-       {       /* SNOW 3G (UIA2) */
+       {       /* MD5 */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
                        .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
                        {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
-                               .block_size = 16,
+                               .algo = RTE_CRYPTO_AUTH_MD5,
+                               .block_size = 64,
                                .key_size = {
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
+                               },
+                               .digest_size = {
                                        .min = 16,
                                        .max = 16,
                                        .increment = 0
                                },
+                       }, }
+               }, }
+       },
+       {       /* MD5 HMAC */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
+                               .block_size = 64,
+                               .key_size = {
+                                       .min = 8,
+                                       .max = 64,
+                                       .increment = 8
+                               },
                                .digest_size = {
-                                       .min = 4,
-                                       .max = 4,
+                                       .min = 12,
+                                       .max = 16,
+                                       .increment = 4
+                               },
+                       }, }
+               }, }
+       },
+};
+
+static const struct rte_cryptodev_capabilities caps_zuc_snow3g[] = {
+       {       /* SNOW 3G (UEA2) */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
+                               .block_size = 16,
+                               .key_size = {
+                                       .min = 16,
+                                       .max = 16,
                                        .increment = 0
                                },
                                .iv_size = {
@@ -339,23 +349,18 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                        }, }
                }, }
        },
-       {       /* ZUC (EIA3) */
+       {       /* ZUC (EEA3) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
-                       {.auth = {
-                               .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
                                .block_size = 16,
                                .key_size = {
                                        .min = 16,
                                        .max = 16,
                                        .increment = 0
                                },
-                               .digest_size = {
-                                       .min = 4,
-                                       .max = 4,
-                                       .increment = 0
-                               },
                                .iv_size = {
                                        .min = 16,
                                        .max = 16,
@@ -364,61 +369,79 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                        }, }
                }, }
        },
-       {       /* NULL (CIPHER) */
+       {       /* SNOW 3G (UIA2) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
-                       {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_NULL,
-                               .block_size = 1,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
+                               .block_size = 16,
                                .key_size = {
-                                       .min = 0,
-                                       .max = 0,
+                                       .min = 16,
+                                       .max = 16,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 4,
+                                       .max = 4,
                                        .increment = 0
                                },
                                .iv_size = {
-                                       .min = 0,
-                                       .max = 0,
+                                       .min = 16,
+                                       .max = 16,
                                        .increment = 0
                                }
-                       }, },
+                       }, }
                }, }
        },
-       {       /* 3DES CBC */
+       {       /* ZUC (EIA3) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
-                       {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
-                               .block_size = 8,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
+                               .block_size = 16,
                                .key_size = {
-                                       .min = 24,
-                                       .max = 24,
+                                       .min = 16,
+                                       .max = 16,
+                                       .increment = 0
+                               },
+                               .digest_size = {
+                                       .min = 4,
+                                       .max = 4,
                                        .increment = 0
                                },
                                .iv_size = {
-                                       .min = 8,
+                                       .min = 16,
                                        .max = 16,
-                                       .increment = 8
+                                       .increment = 0
                                }
                        }, }
                }, }
        },
-       {       /* 3DES ECB */
+};
+
+static const struct rte_cryptodev_capabilities caps_aes[] = {
+       {       /* AES GMAC (AUTH) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
-                       {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
-                               .block_size = 8,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_AES_GMAC,
+                               .block_size = 16,
                                .key_size = {
-                                       .min = 24,
-                                       .max = 24,
-                                       .increment = 0
+                                       .min = 16,
+                                       .max = 32,
+                                       .increment = 8
+                               },
+                               .digest_size = {
+                                       .min = 8,
+                                       .max = 16,
+                                       .increment = 4
                                },
                                .iv_size = {
-                                       .min = 0,
-                                       .max = 0,
+                                       .min = 12,
+                                       .max = 12,
                                        .increment = 0
                                }
                        }, }
@@ -484,26 +507,39 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                        }, }
                }, }
        },
-       {       /* DES CBC */
+       {       /* AES GCM */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
-                       {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_DES_CBC,
-                               .block_size = 8,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
+                       {.aead = {
+                               .algo = RTE_CRYPTO_AEAD_AES_GCM,
+                               .block_size = 16,
                                .key_size = {
-                                       .min = 8,
-                                       .max = 8,
-                                       .increment = 0
+                                       .min = 16,
+                                       .max = 32,
+                                       .increment = 8
+                               },
+                               .digest_size = {
+                                       .min = 4,
+                                       .max = 16,
+                                       .increment = 1
+                               },
+                               .aad_size = {
+                                       .min = 0,
+                                       .max = 1024,
+                                       .increment = 1
                                },
                                .iv_size = {
-                                       .min = 8,
-                                       .max = 8,
+                                       .min = 12,
+                                       .max = 12,
                                        .increment = 0
                                }
                        }, }
                }, }
        },
+};
+
+static const struct rte_cryptodev_capabilities caps_kasumi[] = {
        {       /* KASUMI (F8) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
@@ -524,137 +560,163 @@ rte_cryptodev_capabilities otx2_cpt_capabilities[] = {
                        }, }
                }, }
        },
-       {       /* SNOW 3G (UEA2) */
+       {       /* KASUMI (F9) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
-                       {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
-                               .block_size = 16,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
+                               .block_size = 8,
                                .key_size = {
                                        .min = 16,
                                        .max = 16,
                                        .increment = 0
                                },
+                               .digest_size = {
+                                       .min = 4,
+                                       .max = 4,
+                                       .increment = 0
+                               },
+                       }, }
+               }, }
+       },
+};
+
+static const struct rte_cryptodev_capabilities caps_des[] = {
+       {       /* 3DES CBC */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
+                               .block_size = 8,
+                               .key_size = {
+                                       .min = 24,
+                                       .max = 24,
+                                       .increment = 0
+                               },
                                .iv_size = {
-                                       .min = 16,
+                                       .min = 8,
                                        .max = 16,
+                                       .increment = 8
+                               }
+                       }, }
+               }, }
+       },
+       {       /* 3DES ECB */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
+                               .block_size = 8,
+                               .key_size = {
+                                       .min = 24,
+                                       .max = 24,
+                                       .increment = 0
+                               },
+                               .iv_size = {
+                                       .min = 0,
+                                       .max = 0,
                                        .increment = 0
                                }
                        }, }
                }, }
        },
-       {       /* ZUC (EEA3) */
+       {       /* DES CBC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
                        .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
                        {.cipher = {
-                               .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
-                               .block_size = 16,
+                               .algo = RTE_CRYPTO_CIPHER_DES_CBC,
+                               .block_size = 8,
                                .key_size = {
-                                       .min = 16,
-                                       .max = 16,
+                                       .min = 8,
+                                       .max = 8,
                                        .increment = 0
                                },
                                .iv_size = {
-                                       .min = 16,
-                                       .max = 16,
+                                       .min = 8,
+                                       .max = 8,
                                        .increment = 0
                                }
                        }, }
                }, }
        },
-       {       /* AES GCM */
+};
+
+static const struct rte_cryptodev_capabilities caps_null[] = {
+       {       /* NULL (AUTH) */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
-                       .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
-                       {.aead = {
-                               .algo = RTE_CRYPTO_AEAD_AES_GCM,
-                               .block_size = 16,
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
+                       {.auth = {
+                               .algo = RTE_CRYPTO_AUTH_NULL,
+                               .block_size = 1,
                                .key_size = {
-                                       .min = 16,
-                                       .max = 32,
-                                       .increment = 8
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
                                },
                                .digest_size = {
-                                       .min = 4,
-                                       .max = 16,
-                                       .increment = 1
+                                       .min = 0,
+                                       .max = 0,
+                                       .increment = 0
                                },
-                               .aad_size = {
+                       }, },
+               }, },
+       },
+       {       /* NULL (CIPHER) */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_NULL,
+                               .block_size = 1,
+                               .key_size = {
                                        .min = 0,
-                                       .max = 1024,
-                                       .increment = 1
+                                       .max = 0,
+                                       .increment = 0
                                },
                                .iv_size = {
-                                       .min = 12,
-                                       .max = 12,
+                                       .min = 0,
+                                       .max = 0,
                                        .increment = 0
                                }
-                       }, }
+                       }, },
                }, }
        },
-       /* End of symmetric capabilities */
+};
 
-       /* Asymmetric capabilities */
-       {       /* RSA */
-               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
-               {.asym = {
-                       .xform_capa = {
-                               .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
-                               .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
-                                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
-                                       (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
-                                       (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
-                               {.modlen = {
-                                       .min = 17,
-                                       .max = 1024,
-                                       .increment = 1
-                               }, }
-                       }
-               }, }
-       },
-       {       /* MOD_EXP */
-               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
-               {.asym = {
-                       .xform_capa = {
-                               .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
-                               .op_types = 0,
-                               {.modlen = {
-                                       .min = 17,
-                                       .max = 1024,
-                                       .increment = 1
-                               }, }
-                       }
-               }, }
-       },
-       {       /* ECDSA */
-               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
-               {.asym = {
-                       .xform_capa = {
-                               .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
-                               .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
-                                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
-                               }
-                       },
-               }
-       },
-       {       /* ECPM */
-               .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
-               {.asym = {
-                       .xform_capa = {
-                               .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
-                               .op_types = 0
-                               }
-                       },
-               }
-       },
-       /* End of asymmetric capabilities */
+static const struct rte_cryptodev_capabilities caps_end[] = {
        RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
 };
 
+static void
+cpt_caps_add(const struct rte_cryptodev_capabilities *caps, int nb_caps)
+{
+       static int cur_pos;
+
+       if (cur_pos + nb_caps > OTX2_CPT_MAX_CAPS)
+               return;
+
+       memcpy(&otx2_cpt_caps[cur_pos], caps, nb_caps * sizeof(caps[0]));
+       cur_pos += nb_caps;
+}
+
 const struct rte_cryptodev_capabilities *
-otx2_cpt_capabilities_get(void)
+otx2_cpt_capabilities_get(union cpt_eng_caps *hw_caps)
 {
-       return otx2_cpt_capabilities;
+
+       CPT_CAPS_ADD(hw_caps, mul);
+       CPT_CAPS_ADD(hw_caps, sha1_sha2);
+       CPT_CAPS_ADD(hw_caps, zuc_snow3g);
+       CPT_CAPS_ADD(hw_caps, aes);
+       CPT_CAPS_ADD(hw_caps, kasumi);
+       CPT_CAPS_ADD(hw_caps, des);
+
+       cpt_caps_add(caps_null, RTE_DIM(caps_null));
+       cpt_caps_add(caps_end, RTE_DIM(caps_end));
+
+       return otx2_cpt_caps;
 }