From: Tejasree Kondoj <kondoj.tejas...@caviumnetworks.com>

Signed-off-by: Ankur Dwivedi <ankur.dwiv...@caviumnetworks.com>
Signed-off-by: Anoob Joseph <anoob.jos...@caviumnetworks.com>
Signed-off-by: Murthy NSSR <nidadavolu.mur...@caviumnetworks.com>
Signed-off-by: Nithin Dabilpuram <nithin.dabilpu...@caviumnetworks.com>
Signed-off-by: Ragothaman Jayaraman <rjayara...@caviumnetworks.com>
Signed-off-by: Srisivasubramanian S <ssriniva...@caviumnetworks.com>
Signed-off-by: Tejasree Kondoj <kondoj.tejas...@caviumnetworks.com>
---
 drivers/crypto/octeontx/otx_cryptodev_hw_access.h | 18 +++++++++++++++
 drivers/crypto/octeontx/otx_cryptodev_ops.c       | 27 ++++++++++++++++++++++-
 2 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h 
b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
index cff09b2..f2d7ee7 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
+++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
@@ -191,6 +191,15 @@ otx_cpt_read_vq_doorbell(struct cpt_vf *cptvf)
        return vqx_dbell.s.dbell_cnt;
 }
 
+static __rte_always_inline void
+otx_cpt_ring_dbell(struct cpt_instance *instance, uint16_t count)
+{
+       struct cpt_vf *cptvf = (struct cpt_vf *)instance;
+       /* Memory barrier to flush pending writes */
+       rte_smp_wmb();
+       otx_cpt_write_vq_doorbell(cptvf, count);
+}
+
 static __rte_always_inline void *
 get_cpt_inst(struct command_queue *cqueue)
 {
@@ -241,7 +250,16 @@ mark_cpt_inst(struct cpt_instance *instance)
                queue->idx = 0;
                queue->cchunk = cchunk;
        }
+}
 
+static __rte_always_inline uint8_t
+check_nb_command_id(struct cpt_request_info *user_req,
+               struct cpt_instance *instance)
+{
+       /* Required for dequeue operation. Adding a dummy routine for now */
+       RTE_SET_USED(user_req);
+       RTE_SET_USED(instance);
+       return 0;
 }
 
 #endif /* _OTX_CRYPTODEV_HW_ACCESS_H_ */
diff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c 
b/drivers/crypto/octeontx/otx_cryptodev_ops.c
index 438208c..b20cbe0 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c
+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c
@@ -345,6 +345,31 @@ otx_cpt_session_clear(struct rte_cryptodev *dev,
        }
 }
 
+static uint16_t
+otx_cpt_pkt_enqueue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)
+{
+       struct cpt_instance *instance = (struct cpt_instance *)qptr;
+       uint16_t count = 0;
+       int ret;
+       struct cpt_vf *cptvf = (struct cpt_vf *)instance;
+       struct pending_queue *pqueue = &cptvf->pqueue;
+
+       count = DEFAULT_CMD_QLEN - pqueue->pending_count;
+       if (nb_ops > count)
+               nb_ops = count;
+
+       count = 0;
+       while (likely(count < nb_ops)) {
+               ret = cpt_pmd_crypto_operation(instance, ops[count], pqueue,
+                                               otx_cryptodev_driver_id);
+               if (unlikely(ret))
+                       break;
+               count++;
+       }
+       otx_cpt_ring_dbell(instance, count);
+       return count;
+}
+
 static struct rte_cryptodev_ops cptvf_ops = {
        /* Device related operations */
        .dev_configure = otx_cpt_dev_config,
@@ -436,7 +461,7 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)
 
        c_dev->dev_ops = &cptvf_ops;
 
-       c_dev->enqueue_burst = NULL;
+       c_dev->enqueue_burst = otx_cpt_pkt_enqueue;
        c_dev->dequeue_burst = NULL;
 
        c_dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
-- 
2.7.4

Reply via email to