Add functions of cryptodev create and destroy.<br /> <br />Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn> <br />---<br /> drivers/crypto/zsda/zsda_sym_pmd.c | 129 +++++++++++++++++++++++++++++<br /> drivers/crypto/zsda/zsda_sym_pmd.h |   4 +<br /> 2 files changed, 133 insertions(+)<br /> <br />diff --git a/drivers/crypto/zsda/zsda_sym_pmd.c b/drivers/crypto/zsda/zsda_sym_pmd.c<br />index decc3bfb3c..34d46f2972 100644<br />--- a/drivers/crypto/zsda/zsda_sym_pmd.c<br />+++ b/drivers/crypto/zsda/zsda_sym_pmd.c<br />@@ -307,3 +307,132 @@ static struct rte_cryptodev_ops crypto_zsda_ops = {<br />     .sym_session_configure = zsda_sym_session_configure,<br />     .sym_session_clear = zsda_sym_session_clear,<br /> };<br />+<br />+static uint16_t<br />+zsda_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,<br />+                  uint16_t nb_ops)<br />+{<br />+    return zsda_enqueue_op_burst((struct zsda_qp *)qp, (void **)ops,<br />+                     nb_ops);<br />+}<br />+<br />+static uint16_t<br />+zsda_sym_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,<br />+                  uint16_t nb_ops)<br />+{<br />+    return zsda_dequeue_op_burst((struct zsda_qp *)qp, (void **)ops,<br />+                     nb_ops);<br />+}<br />+<br />+static const char zsda_sym_drv_name[] = RTE_STR(CRYPTODEV_NAME_ZSDA_SYM_PMD);<br />+static const struct rte_driver cryptodev_zsda_sym_driver = {<br />+    .name = zsda_sym_drv_name, .alias = zsda_sym_drv_name};<br />+<br />+int<br />+zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev)<br />+{<br />+    struct zsda_device_info *dev_info =<br />+        &zsda_devs[zsda_pci_dev->zsda_dev_id];<br />+<br />+    struct rte_cryptodev_pmd_init_params init_params = {<br />+        .name = "",<br />+        .socket_id = (int)rte_socket_id(),<br />+        .private_data_size = sizeof(struct zsda_sym_dev_private)};<br />+<br />+    char name[RTE_CRYPTODEV_NAME_MAX_LEN];<br />+    char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN];<br />+    struct rte_cryptodev *cryptodev;<br />+    struct zsda_sym_dev_private *sym_priv;<br />+    const struct rte_cryptodev_capabilities *capabilities;<br />+    uint64_t capa_size;<br />+<br />+    init_params.max_nb_queue_pairs = zsda_sym_max_nb_qps();<br />+    snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s", zsda_pci_dev->name,<br />+         "sym_encrypt");<br />+    ZSDA_LOG(DEBUG, "Creating ZSDA SYM device %s", name);<br />+<br />+    if (rte_eal_process_type() != RTE_PROC_PRIMARY)<br />+        return ZSDA_SUCCESS;<br />+<br />+    dev_info->sym_rte_dev.driver = &cryptodev_zsda_sym_driver;<br />+    dev_info->sym_rte_dev.numa_node = dev_info->pci_dev->device.numa_node;<br />+    dev_info->sym_rte_dev.devargs = NULL;<br />+<br />+    cryptodev = rte_cryptodev_pmd_create(name, &(dev_info->sym_rte_dev),<br />+                         &init_params);<br />+<br />+    if (cryptodev == NULL)<br />+        return -ENODEV;<br />+<br />+    dev_info->sym_rte_dev.name = cryptodev->data->name;<br />+    cryptodev->driver_id = zsda_sym_driver_id;<br />+<br />+    cryptodev->dev_ops = &crypto_zsda_ops;<br />+<br />+    cryptodev->enqueue_burst = zsda_sym_pmd_enqueue_op_burst;<br />+    cryptodev->dequeue_burst = zsda_sym_pmd_dequeue_op_burst;<br />+<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 />+<br />+    sym_priv = cryptodev->data->dev_private;<br />+    sym_priv->zsda_pci_dev = zsda_pci_dev;<br />+    capabilities = zsda_crypto_sym_capabilities;<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_priv->capa_mz = rte_memzone_lookup(capa_memz_name);<br />+    if (sym_priv->capa_mz == NULL)<br />+        sym_priv->capa_mz = rte_memzone_reserve(<br />+            capa_memz_name, capa_size, rte_socket_id(), 0);<br />+<br />+    if (sym_priv->capa_mz == NULL) {<br />+        ZSDA_LOG(ERR, E_MALLOC);<br />+        goto error;<br />+    }<br />+<br />+    memcpy(sym_priv->capa_mz->addr, capabilities, capa_size);<br />+    sym_priv->zsda_dev_capabilities = sym_priv->capa_mz->addr;<br />+<br />+    zsda_pci_dev->sym_dev = sym_priv;<br />+<br />+    return ZSDA_SUCCESS;<br />+<br />+error:<br />+<br />+    rte_cryptodev_pmd_destroy(cryptodev);<br />+    memset(&dev_info->sym_rte_dev, 0, sizeof(dev_info->sym_rte_dev));<br />+<br />+    return -EFAULT;<br />+}<br />+<br />+int<br />+zsda_sym_dev_destroy(struct zsda_pci_device *zsda_pci_dev)<br />+{<br />+    struct rte_cryptodev *cryptodev;<br />+<br />+    if (zsda_pci_dev == NULL)<br />+        return -ENODEV;<br />+    if (zsda_pci_dev->sym_dev == NULL)<br />+        return ZSDA_SUCCESS;<br />+    if (rte_eal_process_type() == RTE_PROC_PRIMARY)<br />+        rte_memzone_free(zsda_pci_dev->sym_dev->capa_mz);<br />+<br />+    cryptodev = rte_cryptodev_pmd_get_dev(zsda_pci_dev->zsda_dev_id);<br />+<br />+    rte_cryptodev_pmd_destroy(cryptodev);<br />+    zsda_devs[zsda_pci_dev->zsda_dev_id].sym_rte_dev.name = NULL;<br />+    zsda_pci_dev->sym_dev = NULL;<br />+<br />+    return ZSDA_SUCCESS;<br />+}<br />+<br />+static struct cryptodev_driver zsda_crypto_drv;<br />+RTE_PMD_REGISTER_CRYPTO_DRIVER(zsda_crypto_drv, cryptodev_zsda_sym_driver,<br />+                   zsda_sym_driver_id);<br />diff --git a/drivers/crypto/zsda/zsda_sym_pmd.h b/drivers/crypto/zsda/zsda_sym_pmd.h<br />index a71b55f8fc..5186feb37e 100644<br />--- a/drivers/crypto/zsda/zsda_sym_pmd.h<br />+++ b/drivers/crypto/zsda/zsda_sym_pmd.h<br />@@ -26,4 +26,8 @@ struct zsda_sym_dev_private {<br />     /* Shared memzone for storing capabilities */<br /> };<br />  <br />+int zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev);<br />+<br />+int zsda_sym_dev_destroy(struct zsda_pci_device *zsda_pci_dev);<br />+<br /> #endif /* _ZSDA_SYM_PMD_H_ */<br />--  <br />2.27.0<br />