From: Dekel Peled <dek...@mellanox.com>

Add compile option HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR, and matching
dest_tir flag in device configuration structure.
Add glue function pointer dv_create_flow_action_dest_devx_tir, and
function mlx5_glue_dv_create_flow_action_dest_devx_tir(),
to invoke API mlx5dv_dr_action_create_dest_devx_tir();

Signed-off-by: Dekel Peled <dek...@mellanox.com>
Acked-by: Matan Azrad <ma...@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
---
 drivers/net/mlx5/Makefile    |  5 +++++
 drivers/net/mlx5/meson.build |  2 ++
 drivers/net/mlx5/mlx5.c      |  3 +++
 drivers/net/mlx5/mlx5.h      |  1 +
 drivers/net/mlx5/mlx5_glue.c | 14 ++++++++++++++
 drivers/net/mlx5/mlx5_glue.h |  1 +
 6 files changed, 26 insertions(+)

diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile
index 76d40b1..dbb2a4e 100644
--- a/drivers/net/mlx5/Makefile
+++ b/drivers/net/mlx5/Makefile
@@ -178,6 +178,11 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
                func mlx5dv_devx_obj_query_async \
                $(AUTOCONF_OUTPUT)
        $Q sh -- '$<' '$@' \
+               HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR \
+               infiniband/mlx5dv.h \
+               func mlx5dv_dr_action_create_dest_devx_tir \
+               $(AUTOCONF_OUTPUT)
+       $Q sh -- '$<' '$@' \
                HAVE_ETHTOOL_LINK_MODE_25G \
                /usr/include/linux/ethtool.h \
                enum ETHTOOL_LINK_MODE_25000baseCR_Full_BIT \
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index ed42641..62b41ca 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -124,6 +124,8 @@ if build
                'MLX5DV_FLOW_ACTION_COUNTERS_DEVX' ],
                [ 'HAVE_IBV_DEVX_ASYNC', 'infiniband/mlx5dv.h',
                'mlx5dv_devx_obj_query_async' ],
+               [ 'HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR', 'infiniband/mlx5dv.h',
+               'mlx5dv_dr_action_create_dest_devx_tir' ],
                [ 'HAVE_MLX5DV_DR', 'infiniband/mlx5dv.h',
                'MLX5DV_DR_DOMAIN_TYPE_NIC_RX' ],
                [ 'HAVE_MLX5DV_DR_ESWITCH', 'infiniband/mlx5dv.h',
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 365246b..3209c3c 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1423,6 +1423,9 @@ struct mlx5_dev_spawn_data {
        if (!sh)
                return NULL;
        config.devx = sh->devx;
+#ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR
+       config.dest_tir = 1;
+#endif
 #ifdef HAVE_IBV_MLX5_MOD_SWP
        dv_attr.comp_mask |= MLX5DV_CONTEXT_MASK_SWP;
 #endif
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 738c55b..7041bbc 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -236,6 +236,7 @@ struct mlx5_dev_config {
        unsigned int dv_flow_en:1; /* Enable DV flow. */
        unsigned int swp:1; /* Tx generic tunnel checksum and TSO offload. */
        unsigned int devx:1; /* Whether devx interface is available or not. */
+       unsigned int dest_tir:1; /* Whether advanced DR API is available. */
        struct {
                unsigned int enabled:1; /* Whether MPRQ is enabled. */
                unsigned int stride_num_n; /* Number of strides. */
diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c
index 05474a0..50c369a 100644
--- a/drivers/net/mlx5/mlx5_glue.c
+++ b/drivers/net/mlx5/mlx5_glue.c
@@ -628,6 +628,18 @@
 }
 
 static void *
+mlx5_glue_dv_create_flow_action_dest_devx_tir(void *tir)
+{
+#ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR
+       return mlx5dv_dr_action_create_dest_devx_tir(tir);
+#else
+       (void)tir;
+       errno = ENOTSUP;
+       return NULL;
+#endif
+}
+
+static void *
 mlx5_glue_dv_create_flow_action_modify_header
                                        (struct ibv_context *ctx,
                                         enum mlx5dv_flow_table_type ft_type,
@@ -1020,6 +1032,8 @@
                mlx5_glue_dv_create_flow_action_counter,
        .dv_create_flow_action_dest_ibv_qp =
                mlx5_glue_dv_create_flow_action_dest_ibv_qp,
+       .dv_create_flow_action_dest_devx_tir =
+               mlx5_glue_dv_create_flow_action_dest_devx_tir,
        .dv_create_flow_action_modify_header =
                mlx5_glue_dv_create_flow_action_modify_header,
        .dv_create_flow_action_packet_reformat =
diff --git a/drivers/net/mlx5/mlx5_glue.h b/drivers/net/mlx5/mlx5_glue.h
index d5c7523..f8e2b9a 100644
--- a/drivers/net/mlx5/mlx5_glue.h
+++ b/drivers/net/mlx5/mlx5_glue.h
@@ -187,6 +187,7 @@ struct mlx5_glue {
                          size_t num_actions, void *actions[]);
        void *(*dv_create_flow_action_counter)(void *obj, uint32_t  offset);
        void *(*dv_create_flow_action_dest_ibv_qp)(void *qp);
+       void *(*dv_create_flow_action_dest_devx_tir)(void *tir);
        void *(*dv_create_flow_action_modify_header)
                (struct ibv_context *ctx, enum mlx5dv_flow_table_type ft_type,
                 void *domain, uint64_t flags, size_t actions_sz,
-- 
1.8.3.1

Reply via email to