From: root <root@localhost.localdomain>

Add crypto dequeue datapath configuration for zsda device.

Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn>
---
 drivers/crypto/zsda/zsda_sym.c     | 16 ++++++++++++++++
 drivers/crypto/zsda/zsda_sym.h     |  2 ++
 drivers/crypto/zsda/zsda_sym_pmd.c | 12 ++++++++++--
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/zsda/zsda_sym.c b/drivers/crypto/zsda/zsda_sym.c
index 3ad90eb34c..139cbaaff1 100644
--- a/drivers/crypto/zsda/zsda_sym.c
+++ b/drivers/crypto/zsda/zsda_sym.c
@@ -254,3 +254,19 @@ zsda_hash_wqe_build(void *op_in, const struct zsda_queue *queue,
 
     return ret;
 }
+
+int
+zsda_crypto_callback(void *cookie_in, struct zsda_cqe *cqe)
+{
+    struct zsda_op_cookie *tmp_cookie = cookie_in;
+    struct rte_crypto_op *op = tmp_cookie->op;
+
+    if (!(CQE_ERR0(cqe->err0) || CQE_ERR1(cqe->err1)))
+        op->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
+    else {
+        op->status = RTE_CRYPTO_OP_STATUS_ERROR;
+        return ZSDA_FAILED;
+    }
+
+    return ZSDA_SUCCESS;
+}
diff --git a/drivers/crypto/zsda/zsda_sym.h b/drivers/crypto/zsda/zsda_sym.h
index c68bf8e2ed..cfbe8aa032 100644
--- a/drivers/crypto/zsda/zsda_sym.h
+++ b/drivers/crypto/zsda/zsda_sym.h
@@ -42,4 +42,6 @@ int zsda_cipher_wqe_build(void *op_in, const struct zsda_queue *queue,
 int zsda_hash_wqe_build(void *op_in, const struct zsda_queue *queue,
                void **op_cookies, const uint16_t new_tail);
 
+int zsda_crypto_callback(void *cookie_in, struct zsda_cqe *cqe);
+
 #endif /* _ZSDA_SYM_H_ */
diff --git a/drivers/crypto/zsda/zsda_sym_pmd.c b/drivers/crypto/zsda/zsda_sym_pmd.c
index 4ebadc5b0e..a3d0bac7a0 100644
--- a/drivers/crypto/zsda/zsda_sym_pmd.c
+++ b/drivers/crypto/zsda/zsda_sym_pmd.c
@@ -144,7 +144,7 @@ zsda_sym_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
     task_q_info.nb_des = nb_des;
     task_q_info.socket_id = socket_id;
     task_q_info.qp_id = qp_id;
-    task_q_info.rx_cb = NULL;
+    task_q_info.rx_cb = zsda_crypto_callback;
 
     task_q_info.type = ZSDA_SERVICE_SYMMETRIC_ENCRYPT;
     task_q_info.service_str = "sym_encrypt";
@@ -241,6 +241,14 @@ zsda_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,
                      nb_ops);
 }
 
+static uint16_t
+zsda_sym_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,
+                  uint16_t nb_ops)
+{
+    return zsda_dequeue_burst((struct zsda_qp *)qp, (void **)ops,
+                     nb_ops);
+}
+
 int
 zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev)
 {
@@ -280,7 +288,7 @@ zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev)
     cryptodev->dev_ops = &crypto_zsda_ops;
 
     cryptodev->enqueue_burst = zsda_sym_pmd_enqueue_op_burst;
-    cryptodev->dequeue_burst = NULL;
+    cryptodev->dequeue_burst = zsda_sym_pmd_dequeue_op_burst;
     cryptodev->feature_flags = 0;
 
     sym_dev_priv = cryptodev->data->dev_private;
-- 
2.27.0