Add crypto capabilities scope for zsda device.<br /> <br />Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn> <br />---<br /> doc/guides/cryptodevs/features/zsda.ini     |  51 +++++++++<br /> doc/guides/cryptodevs/zsda.rst              |  26 +++++<br /> doc/guides/rel_notes/release_25_07.rst      |   8 ++<br /> drivers/crypto/zsda/zsda_sym_capabilities.h | 111 ++++++++++++++++++++<br /> drivers/crypto/zsda/zsda_sym_pmd.c          |  29 ++++-<br /> 5 files changed, 224 insertions(+), 1 deletion(-)<br /> create mode 100644 doc/guides/cryptodevs/features/zsda.ini<br /> create mode 100644 drivers/crypto/zsda/zsda_sym_capabilities.h<br /> <br />diff --git a/doc/guides/cryptodevs/features/zsda.ini b/doc/guides/cryptodevs/features/zsda.ini<br />new file mode 100644<br />index 0000000000..b0f10f8de9<br />--- /dev/null<br />+++ b/doc/guides/cryptodevs/features/zsda.ini<br />@@ -0,0 +1,51 @@<br />+;<br />+; Supported features of the 'zsda' crypto driver.<br />+;<br />+; Refer to default.ini for the full list of available PMD features.<br />+;<br />+[Features]<br />+Symmetric crypto       = Y<br />+HW Accelerated         = Y<br />+In Place SGL           = Y<br />+OOP SGL In SGL Out     = Y<br />+OOP SGL In LB  Out     = Y<br />+OOP LB  In SGL Out     = Y<br />+OOP LB  In LB  Out     = Y<br />+<br />+;<br />+; Supported crypto algorithms of the 'zsda' crypto driver.<br />+;<br />+[Cipher]<br />+AES XTS (128)  = Y<br />+AES XTS (256)  = Y<br />+SM4 XTS        = Y<br />+<br />+;<br />+; Supported authentication algorithms of the 'zsda' crypto driver.<br />+;<br />+[Auth]<br />+SHA1         = Y<br />+SHA224       = Y<br />+SHA256       = Y<br />+SHA384       = Y<br />+SHA512       = Y<br />+SM3          = Y<br />+<br />+<br />+;<br />+; Supported AEAD algorithms of the 'zsda' crypto driver.<br />+;<br />+[AEAD]<br />+<br />+<br />+;<br />+; Supported Asymmetric algorithms of the 'zsda' crypto driver.<br />+;<br />+[Asymmetric]<br />+<br />+<br />+;<br />+; Supported Operating systems of the 'zsda' crypto driver.<br />+;<br />+[OS]<br />+Linux = Y<br />diff --git a/doc/guides/cryptodevs/zsda.rst b/doc/guides/cryptodevs/zsda.rst<br />index 0a7aeb2d50..2b7de0422d 100644<br />--- a/doc/guides/cryptodevs/zsda.rst<br />+++ b/doc/guides/cryptodevs/zsda.rst<br />@@ -13,14 +13,40 @@ support for the following hardware accelerator devices:<br /> Features<br /> --------<br />  <br />+The ZSDA SYM PMD has support for:<br />+<br />+Cipher algorithms:<br />+<br />+* ``RTE_CRYPTO_CIPHER_AES_XTS``<br />+* ``RTE_CRYPTO_CIPHER_SM4_XTS``<br />+<br />+Hash algorithms:<br />+<br />+* ``RTE_CRYPTO_AUTH_SHA1``<br />+* ``RTE_CRYPTO_AUTH_SHA224``<br />+* ``RTE_CRYPTO_AUTH_SHA256``<br />+* ``RTE_CRYPTO_AUTH_SHA384``<br />+* ``RTE_CRYPTO_AUTH_SHA512``<br />+* ``RTE_CRYPTO_AUTH_SM3``<br />+<br />  <br /> Limitations<br /> -----------<br />  <br />+* Only supports the session-oriented API implementation (session-less APIs are<br />+  not supported).<br />+* No BSD and Windows support.<br />+* Queue-pairs are thread-safe on Intel CPUs but Queues are not (that is, within<br />+  a single queue-pair all enqueues to the TX queue must be done from one thread<br />+  and all dequeues from the RX queue must be done from one thread, but enqueues<br />+  and dequeues may be done in different threads.)<br />+<br />  <br /> Installation<br /> ------------<br />  <br />+The ZSDA crypto service is built by default with a standard DPDK build.<br />+<br />  <br /> Testing<br /> -------<br />diff --git a/doc/guides/rel_notes/release_25_07.rst b/doc/guides/rel_notes/release_25_07.rst<br />index 093b85d206..8cd5d53ef3 100644<br />--- a/doc/guides/rel_notes/release_25_07.rst<br />+++ b/doc/guides/rel_notes/release_25_07.rst<br />@@ -56,6 +56,14 @@ New Features<br />      =======================================================<br />  <br />  <br />+* **Added ZTE Storage Data Accelerator (ZSDA) crypto driver.**<br />+<br />+  Added a crypto driver for ZSDA devices<br />+  to support some encrypt, decrypt and hash algorithm.<br />+<br />+  See the :doc:`../cryptodevs/zsda` guide for more details on the new driver.<br />+<br />+<br /> Removed Items<br /> -------------<br />  <br />diff --git a/drivers/crypto/zsda/zsda_sym_capabilities.h b/drivers/crypto/zsda/zsda_sym_capabilities.h<br />new file mode 100644<br />index 0000000000..3c890f8fa7<br />--- /dev/null<br />+++ b/drivers/crypto/zsda/zsda_sym_capabilities.h<br />@@ -0,0 +1,111 @@<br />+/* SPDX-License-Identifier: BSD-3-Clause<br />+ * Copyright(c) 2025 ZTE Corporation<br />+ */<br />+<br />+#ifndef _ZSDA_SYM_CAPABILITIES_H_<br />+#define _ZSDA_SYM_CAPABILITIES_H_<br />+<br />+static const struct rte_cryptodev_capabilities zsda_crypto_sym_capabilities[] = {<br />+    {/* SHA1 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SHA1,<br />+                .block_size = 64,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 20, .max = 20, .increment = 2},<br />+                .iv_size = {0} },<br />+            }    },<br />+        }<br />+    },<br />+    {/* SHA224 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SHA224,<br />+                .block_size = 64,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 28, .max = 28, .increment = 0},<br />+                .iv_size = {0} },<br />+            }    },<br />+        }<br />+    },<br />+    {/* SHA256 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SHA256,<br />+                .block_size = 64,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 32, .max = 32, .increment = 0},<br />+                .iv_size = {0} },<br />+            } },<br />+        }<br />+    },<br />+    {/* SHA384 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SHA384,<br />+                .block_size = 128,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 48, .max = 48, .increment = 0},<br />+                .iv_size = {0} },<br />+            } },<br />+        }<br />+    },<br />+    {/* SHA512 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SHA512,<br />+                .block_size = 128,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 64, .max = 64, .increment = 0},<br />+                .iv_size = {0} },<br />+            } },<br />+        }<br />+    },<br />+    {/* SM3 */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,<br />+            { .auth = {<br />+                .algo = RTE_CRYPTO_AUTH_SM3,<br />+                .block_size = 64,<br />+                .key_size = {.min = 0, .max = 0, .increment = 0},<br />+                .digest_size = {.min = 32, .max = 32, .increment = 0},<br />+                .iv_size = {0} },<br />+            } },<br />+        }<br />+    },<br />+    {/* AES XTS */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,<br />+            { .cipher = {<br />+                .algo = RTE_CRYPTO_CIPHER_AES_XTS,<br />+                .block_size = 16,<br />+                .key_size = {.min = 32, .max = 64, .increment = 32},<br />+                .iv_size = {.min = 16, .max = 16, .increment = 0} },<br />+            } },<br />+        }<br />+    },<br />+    {/* SM4 XTS */<br />+        .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,<br />+        { .sym = {<br />+            .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,<br />+            { .cipher = {<br />+                .algo = RTE_CRYPTO_CIPHER_SM4_XTS,<br />+                .block_size = 16,<br />+                .key_size = {.min = 32, .max = 32, .increment = 0},<br />+                .iv_size = {.min = 16, .max = 16, .increment = 0} },<br />+            } },<br />+        }<br />+    }<br />+};<br />+#endif /* _ZSDA_SYM_CAPABILITIES_H_ */<br />diff --git a/drivers/crypto/zsda/zsda_sym_pmd.c b/drivers/crypto/zsda/zsda_sym_pmd.c<br />index 4b9905b1be..96fbadcfb2 100644<br />--- a/drivers/crypto/zsda/zsda_sym_pmd.c<br />+++ b/drivers/crypto/zsda/zsda_sym_pmd.c<br />@@ -7,6 +7,7 @@<br /> #include "zsda_sym_pmd.h" <br /> #include "zsda_sym_session.h" <br /> #include "zsda_sym.h" <br />+#include "zsda_sym_capabilities.h" <br />  <br /> uint8_t zsda_sym_driver_id;<br />  <br />@@ -265,8 +266,11 @@ zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev)<br />     };<br />  <br />     char name[RTE_CRYPTODEV_NAME_MAX_LEN];<br />+    char capa_memz_name[RTE_COMPRESSDEV_NAME_MAX_LEN];<br />     struct rte_cryptodev *cryptodev;<br />     struct zsda_sym_dev_private *sym_dev_priv;<br />+    const struct rte_cryptodev_capabilities *capabilities;<br />+    uint64_t capa_size;<br />  <br />     if (rte_eal_process_type() != RTE_PROC_PRIMARY)<br />         return ZSDA_SUCCESS;<br />@@ -293,11 +297,34 @@ zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev)<br />  <br />     cryptodev->enqueue_burst = zsda_sym_pmd_enqueue_op_burst;<br />     cryptodev->dequeue_burst = zsda_sym_pmd_dequeue_op_burst;<br />-    cryptodev->feature_flags = 0;<br />+    cryptodev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |<br />+                   RTE_CRYPTODEV_FF_SYM_SESSIONLESS |<br />+                   RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT |<br />+                   RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT |<br />+                   RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |<br />+                   RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT |<br />+                   RTE_CRYPTODEV_FF_HW_ACCELERATED;<br />+    capabilities = zsda_crypto_sym_capabilities;<br />  <br />     sym_dev_priv = cryptodev->data->dev_private;<br />     sym_dev_priv->zsda_pci_dev = zsda_pci_dev;<br />     sym_dev_priv->cryptodev = cryptodev;<br />+    capa_size = sizeof(zsda_crypto_sym_capabilities);<br />+<br />+    snprintf(capa_memz_name, RTE_CRYPTODEV_NAME_MAX_LEN, "ZSDA_SYM_CAPA");<br />+<br />+    sym_dev_priv->capa_mz = rte_memzone_lookup(capa_memz_name);<br />+    if (sym_dev_priv->capa_mz == NULL)<br />+        sym_dev_priv->capa_mz = rte_memzone_reserve(<br />+            capa_memz_name, capa_size, rte_socket_id(), 0);<br />+<br />+    if (sym_dev_priv->capa_mz == NULL) {<br />+        ZSDA_LOG(ERR, "Failed! sym_dev_priv->capa_mz");<br />+        goto error;<br />+    }<br />+<br />+    memcpy(sym_dev_priv->capa_mz->addr, capabilities, capa_size);<br />+    sym_dev_priv->zsda_dev_capabilities = sym_dev_priv->capa_mz->addr;<br />  <br />     zsda_pci_dev->sym_dev_priv = sym_dev_priv;<br />  <br />--  <br />2.27.0<br />