Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com>
---
 drivers/net/dpaa2/base/dpaa2_hw_dpio.c | 45 ++++++++++++++++++++++++++++++++++
 drivers/net/dpaa2/base/dpaa2_hw_dpio.h |  3 +++
 2 files changed, 48 insertions(+)

diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c 
b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
index 4a0a638..9c6eb96 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
@@ -275,6 +275,51 @@ static inline struct dpaa2_dpio_dev 
*dpaa2_get_qbman_swp(void)
 }
 
 int
+dpaa2_affine_qbman_swp_sec(void)
+{
+       unsigned lcore_id = rte_lcore_id();
+       uint64_t tid = syscall(SYS_gettid);
+
+       if (lcore_id == LCORE_ID_ANY)
+               lcore_id = rte_get_master_lcore();
+       /* if the core id is not supported */
+       else if (lcore_id >= RTE_MAX_LCORE)
+               return -1;
+
+       if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
+               PMD_DRV_LOG(INFO, "DPAA Portal=0x%x (%d) is being shared"
+                           " between thread %lu and current  %lu",
+                           dpaa2_io_portal[lcore_id].sec_dpio_dev,
+                           dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
+                           dpaa2_io_portal[lcore_id].sec_tid,
+                           tid);
+               RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
+                       = dpaa2_io_portal[lcore_id].sec_dpio_dev;
+               rte_atomic16_inc(&dpaa2_io_portal
+                                [lcore_id].sec_dpio_dev->ref_count);
+               dpaa2_io_portal[lcore_id].sec_tid = tid;
+
+               PMD_DRV_LOG(DEBUG, "Old Portal=0x%x (%d) affined thread - %lu",
+                           dpaa2_io_portal[lcore_id].sec_dpio_dev,
+                           dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
+                           tid);
+               return 0;
+       }
+
+       /* Populate the dpaa2_io_portal structure */
+       dpaa2_io_portal[lcore_id].sec_dpio_dev = dpaa2_get_qbman_swp();
+
+       if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
+               RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
+                       = dpaa2_io_portal[lcore_id].sec_dpio_dev;
+               dpaa2_io_portal[lcore_id].sec_tid = tid;
+               return 0;
+       } else {
+               return -1;
+       }
+}
+
+int
 dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
                         struct vfio_device_info *obj_info,
                int object_id)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h 
b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
index d90b900..8480ce3 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
@@ -57,6 +57,9 @@ struct dpaa2_io_portal_t {
 /* Affine a DPIO portal to current processing thread */
 int dpaa2_affine_qbman_swp(void);
 
+/* Affine additional DPIO portal to current crypto processing thread */
+int dpaa2_affine_qbman_swp_sec(void);
+
 /* create dpio device */
 int dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
                             struct vfio_device_info *obj_info,
-- 
1.9.1

Reply via email to