> diff --git a/drivers/common/zsda/zsda_qp.c b/drivers/common/zsda/zsda_qp.c > index 0ef7cac585..a5f00d8ab6 100644 > --- a/drivers/common/zsda/zsda_qp.c > +++ b/drivers/common/zsda/zsda_qp.c > @@ -15,6 +15,9 @@ static uint8_t zsda_num_used_qps; > static struct ring_size zsda_qp_hw_ring_size[ZSDA_MAX_SERVICES] = { > [ZSDA_SERVICE_COMPRESSION] = {32, 16}, > [ZSDA_SERVICE_DECOMPRESSION] = {32, 16}, > + [ZSDA_SERVICE_CRYPRO_ENCRY] = {128, 16},
Fix CRYPRO -> CRYPTO > + [ZSDA_SERVICE_CRYPTO_DECRY] = {128, 16}, > + [ZSDA_SERVICE_HASH_ENCODE] = {32, 16}, > }; > > static const uint8_t crc8_table[256] = { > @@ -480,6 +483,12 @@ zsda_nb_qps_get(const struct zsda_pci_device > *zsda_pci_dev) > zsda_num_qps_get(zsda_pci_dev, ZSDA_SERVICE_COMPRESSION); > zsda_nb_qps.decomp = > zsda_num_qps_get(zsda_pci_dev, ZSDA_SERVICE_DECOMPRESSION); > + zsda_nb_qps.encrypt = > + zsda_num_qps_get(zsda_pci_dev, ZSDA_SERVICE_CRYPRO_ENCRY); > + zsda_nb_qps.decrypt = > + zsda_num_qps_get(zsda_pci_dev, ZSDA_SERVICE_CRYPTO_DECRY); > + zsda_nb_qps.hash = > + zsda_num_qps_get(zsda_pci_dev, ZSDA_SERVICE_HASH_ENCODE); > } > > int > diff --git a/drivers/common/zsda/zsda_qp_common.h > b/drivers/common/zsda/zsda_qp_common.h > index 941278c6d2..911b3a07a3 100644 > --- a/drivers/common/zsda/zsda_qp_common.h > +++ b/drivers/common/zsda/zsda_qp_common.h > @@ -24,9 +24,12 @@ > enum zsda_service_type { > ZSDA_SERVICE_COMPRESSION = 0, > ZSDA_SERVICE_DECOMPRESSION = 1, > + ZSDA_SERVICE_CRYPRO_ENCRY = 2, > + ZSDA_SERVICE_CRYPTO_DECRY = 3, > + ZSDA_SERVICE_HASH_ENCODE = 6, > ZSDA_SERVICE_INVALID, > }; > -#define ZSDA_MAX_SERVICES (2) > +#define ZSDA_MAX_SERVICES (ZSDA_SERVICE_INVALID) > > #define ZSDA_CSR_READ32(addr) rte_read32((addr)) > #define ZSDA_CSR_WRITE32(addr, value) rte_write32((value), (addr)) > diff --git a/drivers/crypto/zsda/zsda_crypto_pmd.c > b/drivers/crypto/zsda/zsda_crypto_pmd.c > new file mode 100644 > index 0000000000..99acfa3418 > --- /dev/null > +++ b/drivers/crypto/zsda/zsda_crypto_pmd.c > @@ -0,0 +1,115 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2025 ZTE Corporation > + */ > + > +#include <rte_cryptodev.h> > + > +#include "zsda_crypto_pmd.h" > + > +uint8_t zsda_crypto_driver_id; > + > +static struct rte_cryptodev_ops crypto_zsda_ops = { > + .dev_configure = NULL, > + .dev_start = NULL, > + .dev_stop = NULL, > + .dev_close = NULL, > + .dev_infos_get = NULL, > + > + .stats_get = NULL, > + .stats_reset = NULL, > + .queue_pair_setup = NULL, > + .queue_pair_release = NULL, > + > + .sym_session_get_size = NULL, > + .sym_session_configure = NULL, > + .sym_session_clear = NULL, > +}; > + > +static const char zsda_crypto_drv_name[] = > RTE_STR(CRYPTODEV_NAME_ZSDA_PMD); > +static const struct rte_driver cryptodev_zsda_crypto_driver = { > + .name = zsda_crypto_drv_name, > + .alias = zsda_crypto_drv_name > +}; > + > +int > +zsda_crypto_dev_create(struct zsda_pci_device *zsda_pci_dev) > +{ > + struct zsda_device_info *dev_info = > + &zsda_devs[zsda_pci_dev->zsda_dev_id]; > + > + struct rte_cryptodev_pmd_init_params init_params = { > + .name = "", > + .socket_id = (int)rte_socket_id(), > + .private_data_size = sizeof(struct zsda_crypto_dev_private) > + }; > + > + char name[RTE_CRYPTODEV_NAME_MAX_LEN]; > + struct rte_cryptodev *cryptodev; > + struct zsda_crypto_dev_private *crypto_dev_priv; > + > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > + return ZSDA_SUCCESS; > + > + snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s", zsda_pci_dev- > >name, > + "crypto"); > + ZSDA_LOG(DEBUG, "Creating ZSDA crypto device %s", name); > + > + dev_info->crypto_rte_dev.driver = &cryptodev_zsda_crypto_driver; > + dev_info->crypto_rte_dev.numa_node = dev_info->pci_dev- > >device.numa_node; > + > + cryptodev = rte_cryptodev_pmd_create(name, &(dev_info->crypto_rte_dev), > + &init_params); > + > + if (cryptodev == NULL) { > + ZSDA_LOG(ERR, "Failed! rte_cryptodev_pmd_create"); > + goto error; > + } > + > + dev_info->crypto_rte_dev.name = cryptodev->data->name; > + cryptodev->driver_id = zsda_crypto_driver_id; > + > + cryptodev->dev_ops = &crypto_zsda_ops; > + > + cryptodev->enqueue_burst = NULL; > + cryptodev->dequeue_burst = NULL; > + cryptodev->feature_flags = 0; > + > + crypto_dev_priv = cryptodev->data->dev_private; > + crypto_dev_priv->zsda_pci_dev = zsda_pci_dev; > + crypto_dev_priv->cryptodev = cryptodev; > + > + zsda_pci_dev->crypto_dev_priv = crypto_dev_priv; > + > + return ZSDA_SUCCESS; > + > +error: > + > + rte_cryptodev_pmd_destroy(cryptodev); > + memset(&dev_info->crypto_rte_dev, 0, sizeof(dev_info->crypto_rte_dev)); > + > + return -EFAULT; > +} > + > +void > +zsda_crypto_dev_destroy(struct zsda_pci_device *zsda_pci_dev) > +{ > + struct zsda_crypto_dev_private *crypto_dev_priv; > + > + if (zsda_pci_dev == NULL) > + return; > + > + crypto_dev_priv = zsda_pci_dev->crypto_dev_priv; > + if (crypto_dev_priv == NULL) > + return; > + > + if (rte_eal_process_type() == RTE_PROC_PRIMARY) > + rte_memzone_free(crypto_dev_priv->capa_mz); > + > + rte_cryptodev_pmd_destroy(crypto_dev_priv->cryptodev); > + zsda_devs[zsda_pci_dev->zsda_dev_id].crypto_rte_dev.name = NULL; > + zsda_pci_dev->crypto_dev_priv = NULL; > +} > + > +static struct cryptodev_driver zsda_crypto_drv; > +RTE_PMD_REGISTER_CRYPTO_DRIVER(zsda_crypto_drv, > cryptodev_zsda_crypto_driver, > + zsda_crypto_driver_id); > diff --git a/drivers/crypto/zsda/zsda_crypto_pmd.h > b/drivers/crypto/zsda/zsda_crypto_pmd.h > new file mode 100644 > index 0000000000..1b17735d40 > --- /dev/null > +++ b/drivers/crypto/zsda/zsda_crypto_pmd.h > @@ -0,0 +1,49 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2025 ZTE Corporation > + */ > + > +#ifndef _ZSDA_CRYPTO_PMD_H_ > +#define _ZSDA_CRYPTO_PMD_H_ > + > +#include "cryptodev_pmd.h" > + > +#include "zsda_qp.h" > + > +/** ZSDA Crypto PMD driver name */ > +#define CRYPTODEV_NAME_ZSDA_PMD crypto_zsda > +#define ZSDA_CIPHER_KEY_MAX_LEN 64 > + > +#define ZSDA_OPC_EC_AES_XTS_256 0x0 /* Encry AES-XTS-256 */ > +#define ZSDA_OPC_EC_AES_XTS_512 0x01 /* Encry AES-XTS-512 */ > +#define ZSDA_OPC_EC_SM4_XTS_256 0x02 /* Encry SM4-XTS-256 */ > +#define ZSDA_OPC_DC_AES_XTS_256 0x08 /* Decry AES-XTS-256 */ > +#define ZSDA_OPC_DC_AES_XTS_512 0x09 /* Decry AES-XTS-512 */ > +#define ZSDA_OPC_DC_SM4_XTS_256 0x0A /* Decry SM4-XTS-256 */ > +#define ZSDA_OPC_HASH_SHA1 0x20 /* Hash-SHA1 */ > +#define ZSDA_OPC_HASH_SHA2_224 0x21 /* Hash-SHA2-224 */ > +#define ZSDA_OPC_HASH_SHA2_256 0x22 /* Hash-SHA2-256 */ > +#define ZSDA_OPC_HASH_SHA2_384 0x23 /* Hash-SHA2-384 */ > +#define ZSDA_OPC_HASH_SHA2_512 0x24 /* Hash-SHA2-512 */ > +#define ZSDA_OPC_HASH_SM3 0x25 /* Hash-SM3 */ Please also send a separate patch outside this series to move the compress specific defines from common to compress directory > + > + > +/** private data structure for a ZSDA device. > + * This ZSDA device is a device offering only symmetric crypto service, > + * there can be one of these on each zsda_pci_device (VF). > + */ > +struct zsda_crypto_dev_private { > + struct zsda_pci_device *zsda_pci_dev; > + /* The zsda pci device hosting the service */ > + struct rte_cryptodev *cryptodev; > + /* The pointer to this crypto device structure */ > + const struct rte_cryptodev_capabilities *zsda_crypto_capabilities; > + /* ZSDA device crypto capabilities */ > + const struct rte_memzone *capa_mz; > + /* Shared memzone for storing capabilities */ /* means comment is added before the variable. /**< is used to denote comment after the variable. However, this is not an exposed structure, but it is a good practice to follow this convention. > +}; > + > +int zsda_crypto_dev_create(struct zsda_pci_device *zsda_pci_dev); > + > +void zsda_crypto_dev_destroy(struct zsda_pci_device *zsda_pci_dev); > + > +#endif /* _ZSDA_CRYPTO_PMD_H_ */ > -- > 2.27.0