Add functions of compressdev create and destroy.<br /> <br />Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn> <br />---<br /> drivers/compress/zsda/zsda_comp_pmd.c | 119 ++++++++++++++++++++++++++<br /> drivers/compress/zsda/zsda_comp_pmd.h |   4 +<br /> 2 files changed, 123 insertions(+)<br /> <br />diff --git a/drivers/compress/zsda/zsda_comp_pmd.c b/drivers/compress/zsda/zsda_comp_pmd.c<br />index d651116e3d..78c7ee01da 100644<br />--- a/drivers/compress/zsda/zsda_comp_pmd.c<br />+++ b/drivers/compress/zsda/zsda_comp_pmd.c<br />@@ -343,3 +343,122 @@ static struct rte_compressdev_ops compress_zsda_ops = {<br />     .private_xform_create = zsda_comp_private_xform_create,<br />     .private_xform_free = zsda_comp_private_xform_free<br /> };<br />+<br />+/* An rte_driver is needed in the registration of the device with compressdev.<br />+ * The actual zsda pci's rte_driver can't be used as its name represents<br />+ * the whole pci device with all services. Think of this as a holder for a name<br />+ * for the compression part of the pci device.<br />+ */<br />+static const char zsda_comp_drv_name[] = RTE_STR(COMPRESSDEV_NAME_ZSDA_PMD);<br />+static const struct rte_driver compdev_zsda_driver = {<br />+    .name = zsda_comp_drv_name, .alias = zsda_comp_drv_name};<br />+<br />+static uint16_t<br />+zsda_comp_pmd_enqueue_op_burst(void *qp, struct rte_comp_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_comp_pmd_dequeue_op_burst(void *qp, struct rte_comp_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 />+int<br />+zsda_comp_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_compressdev_pmd_init_params init_params = {<br />+        .name = "",<br />+        .socket_id = (int)rte_socket_id(),<br />+    };<br />+<br />+    char name[RTE_COMPRESSDEV_NAME_MAX_LEN];<br />+    char capa_memz_name[RTE_COMPRESSDEV_NAME_MAX_LEN];<br />+    struct rte_compressdev *compressdev;<br />+    struct zsda_comp_dev_private *comp_dev;<br />+    const struct rte_compressdev_capabilities *capabilities;<br />+    uint16_t capa_size = sizeof(struct rte_compressdev_capabilities);<br />+<br />+    snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s",<br />+         zsda_pci_dev->name, "comp");<br />+<br />+    if (rte_eal_process_type() != RTE_PROC_PRIMARY)<br />+        return 0;<br />+<br />+    dev_info->comp_rte_dev.driver = &compdev_zsda_driver;<br />+    dev_info->comp_rte_dev.numa_node = dev_info->pci_dev->device.numa_node;<br />+    dev_info->comp_rte_dev.devargs = NULL;<br />+<br />+    compressdev = rte_compressdev_pmd_create(<br />+        name, &(dev_info->comp_rte_dev),<br />+        sizeof(struct zsda_comp_dev_private), &init_params);<br />+<br />+    if (compressdev == NULL)<br />+        return -ENODEV;<br />+<br />+    compressdev->dev_ops = &compress_zsda_ops;<br />+<br />+    compressdev->enqueue_burst = zsda_comp_pmd_enqueue_op_burst;<br />+    compressdev->dequeue_burst = zsda_comp_pmd_dequeue_op_burst;<br />+<br />+    compressdev->feature_flags = RTE_COMPDEV_FF_HW_ACCELERATED;<br />+<br />+    snprintf(capa_memz_name, RTE_COMPRESSDEV_NAME_MAX_LEN,<br />+         "ZSDA_COMP_CAPA");<br />+<br />+    comp_dev = compressdev->data->dev_private;<br />+    comp_dev->zsda_pci_dev = zsda_pci_dev;<br />+    comp_dev->compressdev = compressdev;<br />+    capabilities = zsda_comp_capabilities;<br />+<br />+    comp_dev->capa_mz = rte_memzone_lookup(capa_memz_name);<br />+    if (comp_dev->capa_mz == NULL) {<br />+        comp_dev->capa_mz = rte_memzone_reserve(<br />+            capa_memz_name, capa_size, rte_socket_id(), 0);<br />+    }<br />+    if (comp_dev->capa_mz == NULL) {<br />+        ZSDA_LOG(DEBUG, E_MALLOC);<br />+        memset(&dev_info->comp_rte_dev, 0,<br />+               sizeof(dev_info->comp_rte_dev));<br />+        rte_compressdev_pmd_destroy(compressdev);<br />+        return -EFAULT;<br />+    }<br />+<br />+    memcpy(comp_dev->capa_mz->addr, capabilities, capa_size);<br />+    comp_dev->zsda_dev_capabilities = comp_dev->capa_mz->addr;<br />+<br />+    zsda_pci_dev->comp_dev = comp_dev;<br />+<br />+    return ZSDA_SUCCESS;<br />+}<br />+<br />+int<br />+zsda_comp_dev_destroy(struct zsda_pci_device *zsda_pci_dev)<br />+{<br />+    struct zsda_comp_dev_private *comp_dev;<br />+<br />+    if (zsda_pci_dev == NULL)<br />+        return -ENODEV;<br />+<br />+    comp_dev = zsda_pci_dev->comp_dev;<br />+    if (comp_dev == NULL)<br />+        return ZSDA_SUCCESS;<br />+<br />+    if (rte_eal_process_type() == RTE_PROC_PRIMARY)<br />+        rte_memzone_free(zsda_pci_dev->comp_dev->capa_mz);<br />+<br />+    zsda_comp_dev_close(comp_dev->compressdev);<br />+<br />+    rte_compressdev_pmd_destroy(comp_dev->compressdev);<br />+    zsda_pci_dev->comp_dev = NULL;<br />+<br />+    return ZSDA_SUCCESS;<br />+}<br />diff --git a/drivers/compress/zsda/zsda_comp_pmd.h b/drivers/compress/zsda/zsda_comp_pmd.h<br />index f096878d09..da91cf06c3 100644<br />--- a/drivers/compress/zsda/zsda_comp_pmd.h<br />+++ b/drivers/compress/zsda/zsda_comp_pmd.h<br />@@ -27,4 +27,8 @@ struct zsda_comp_dev_private {<br />     /* Shared memzone for storing capabilities */<br /> };<br />  <br />+int zsda_comp_dev_create(struct zsda_pci_device *zsda_pci_dev);<br />+<br />+int zsda_comp_dev_destroy(struct zsda_pci_device *zsda_pci_dev);<br />+<br /> #endif /* _ZSDA_COMP_PMD_H_ */<br />--  <br />2.27.0<br />