Add crypto dequeue datapath configuration for zsda device. Signed-off-by: Hanxiao Li --- 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 0256d7e167..1224f2938a 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 2868480b17..8ceb27e076 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 6f46c71e52..44c4521ba3 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