xref: /dpdk/drivers/common/mlx5/linux/mlx5_glue.c (revision 27595cd83053b2d39634a159d6709b3ce3cdf3b0)
172f75660SOphir Munk /* SPDX-License-Identifier: BSD-3-Clause
272f75660SOphir Munk  * Copyright 2018 6WIND S.A.
372f75660SOphir Munk  * Copyright 2018 Mellanox Technologies, Ltd
472f75660SOphir Munk  */
572f75660SOphir Munk 
672f75660SOphir Munk #include <errno.h>
772f75660SOphir Munk #include <stdalign.h>
872f75660SOphir Munk #include <stddef.h>
972f75660SOphir Munk #include <stdint.h>
1072f75660SOphir Munk #include <stdlib.h>
1172f75660SOphir Munk /*
1272f75660SOphir Munk  * Not needed by this file; included to work around the lack of off_t
1372f75660SOphir Munk  * definition for mlx5dv.h with unpatched rdma-core versions.
1472f75660SOphir Munk  */
1572f75660SOphir Munk #include <sys/types.h>
1672f75660SOphir Munk 
1772f75660SOphir Munk #include "mlx5_glue.h"
1872f75660SOphir Munk 
1972f75660SOphir Munk static int
mlx5_glue_fork_init(void)2072f75660SOphir Munk mlx5_glue_fork_init(void)
2172f75660SOphir Munk {
2242f113c5SErez Ferber #ifdef HAVE_IBV_FORK_UNNEEDED
2342f113c5SErez Ferber 	if (ibv_is_fork_initialized() == IBV_FORK_UNNEEDED)
2442f113c5SErez Ferber 		return 0; /* ibv_fork_init() not needed */
2542f113c5SErez Ferber #endif
2672f75660SOphir Munk 	return ibv_fork_init();
2772f75660SOphir Munk }
2872f75660SOphir Munk 
2972f75660SOphir Munk static struct ibv_pd *
mlx5_glue_alloc_pd(struct ibv_context * context)3072f75660SOphir Munk mlx5_glue_alloc_pd(struct ibv_context *context)
3172f75660SOphir Munk {
3272f75660SOphir Munk 	return ibv_alloc_pd(context);
3372f75660SOphir Munk }
3472f75660SOphir Munk 
3572f75660SOphir Munk static int
mlx5_glue_dealloc_pd(struct ibv_pd * pd)3672f75660SOphir Munk mlx5_glue_dealloc_pd(struct ibv_pd *pd)
3772f75660SOphir Munk {
3872f75660SOphir Munk 	return ibv_dealloc_pd(pd);
3972f75660SOphir Munk }
4072f75660SOphir Munk 
410777921aSMichael Baum static struct ibv_pd *
mlx5_glue_import_pd(struct ibv_context * context,uint32_t pd_handle)420777921aSMichael Baum mlx5_glue_import_pd(struct ibv_context *context, uint32_t pd_handle)
430777921aSMichael Baum {
440777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR
450777921aSMichael Baum 	return ibv_import_pd(context, pd_handle);
460777921aSMichael Baum #else
470777921aSMichael Baum 	(void)context;
480777921aSMichael Baum 	(void)pd_handle;
490777921aSMichael Baum 	errno = ENOTSUP;
500777921aSMichael Baum 	return NULL;
510777921aSMichael Baum #endif
520777921aSMichael Baum }
530777921aSMichael Baum 
540777921aSMichael Baum static int
mlx5_glue_unimport_pd(struct ibv_pd * pd)550777921aSMichael Baum mlx5_glue_unimport_pd(struct ibv_pd *pd)
560777921aSMichael Baum {
570777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR
580777921aSMichael Baum 	ibv_unimport_pd(pd);
590777921aSMichael Baum 	return 0;
600777921aSMichael Baum #else
610777921aSMichael Baum 	(void)pd;
620777921aSMichael Baum 	errno = ENOTSUP;
630777921aSMichael Baum 	return -errno;
640777921aSMichael Baum #endif
650777921aSMichael Baum }
660777921aSMichael Baum 
6772f75660SOphir Munk static struct ibv_device **
mlx5_glue_get_device_list(int * num_devices)6872f75660SOphir Munk mlx5_glue_get_device_list(int *num_devices)
6972f75660SOphir Munk {
7072f75660SOphir Munk 	return ibv_get_device_list(num_devices);
7172f75660SOphir Munk }
7272f75660SOphir Munk 
7372f75660SOphir Munk static void
mlx5_glue_free_device_list(struct ibv_device ** list)7472f75660SOphir Munk mlx5_glue_free_device_list(struct ibv_device **list)
7572f75660SOphir Munk {
7672f75660SOphir Munk 	ibv_free_device_list(list);
7772f75660SOphir Munk }
7872f75660SOphir Munk 
7972f75660SOphir Munk static struct ibv_context *
mlx5_glue_open_device(struct ibv_device * device)8072f75660SOphir Munk mlx5_glue_open_device(struct ibv_device *device)
8172f75660SOphir Munk {
8272f75660SOphir Munk 	return ibv_open_device(device);
8372f75660SOphir Munk }
8472f75660SOphir Munk 
850777921aSMichael Baum static struct ibv_context *
mlx5_glue_import_device(int cmd_fd)860777921aSMichael Baum mlx5_glue_import_device(int cmd_fd)
870777921aSMichael Baum {
880777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR
890777921aSMichael Baum 	return ibv_import_device(cmd_fd);
900777921aSMichael Baum #else
910777921aSMichael Baum 	(void)cmd_fd;
920777921aSMichael Baum 	errno = ENOTSUP;
930777921aSMichael Baum 	return NULL;
940777921aSMichael Baum #endif
950777921aSMichael Baum }
960777921aSMichael Baum 
9772f75660SOphir Munk static int
mlx5_glue_close_device(struct ibv_context * context)9872f75660SOphir Munk mlx5_glue_close_device(struct ibv_context *context)
9972f75660SOphir Munk {
10072f75660SOphir Munk 	return ibv_close_device(context);
10172f75660SOphir Munk }
10272f75660SOphir Munk 
10372f75660SOphir Munk static int
mlx5_glue_query_device(struct ibv_context * context,struct ibv_device_attr * device_attr)10472f75660SOphir Munk mlx5_glue_query_device(struct ibv_context *context,
10572f75660SOphir Munk 		       struct ibv_device_attr *device_attr)
10672f75660SOphir Munk {
10772f75660SOphir Munk 	return ibv_query_device(context, device_attr);
10872f75660SOphir Munk }
10972f75660SOphir Munk 
11072f75660SOphir Munk static int
mlx5_glue_query_device_ex(struct ibv_context * context,const struct ibv_query_device_ex_input * input,struct ibv_device_attr_ex * attr)11172f75660SOphir Munk mlx5_glue_query_device_ex(struct ibv_context *context,
11272f75660SOphir Munk 			  const struct ibv_query_device_ex_input *input,
11372f75660SOphir Munk 			  struct ibv_device_attr_ex *attr)
11472f75660SOphir Munk {
11572f75660SOphir Munk 	return ibv_query_device_ex(context, input, attr);
11672f75660SOphir Munk }
11772f75660SOphir Munk 
118dfceca7eSAlex Vesker static const char *
mlx5_glue_get_device_name(struct ibv_device * device)119dfceca7eSAlex Vesker mlx5_glue_get_device_name(struct ibv_device *device)
120dfceca7eSAlex Vesker {
121dfceca7eSAlex Vesker 	return ibv_get_device_name(device);
122dfceca7eSAlex Vesker }
123dfceca7eSAlex Vesker 
12472f75660SOphir Munk static int
mlx5_glue_query_rt_values_ex(struct ibv_context * context,struct ibv_values_ex * values)12572f75660SOphir Munk mlx5_glue_query_rt_values_ex(struct ibv_context *context,
12672f75660SOphir Munk 			  struct ibv_values_ex *values)
12772f75660SOphir Munk {
12872f75660SOphir Munk 	return ibv_query_rt_values_ex(context, values);
12972f75660SOphir Munk }
13072f75660SOphir Munk 
13172f75660SOphir Munk static int
mlx5_glue_query_port(struct ibv_context * context,uint8_t port_num,struct ibv_port_attr * port_attr)13272f75660SOphir Munk mlx5_glue_query_port(struct ibv_context *context, uint8_t port_num,
13372f75660SOphir Munk 		     struct ibv_port_attr *port_attr)
13472f75660SOphir Munk {
13572f75660SOphir Munk 	return ibv_query_port(context, port_num, port_attr);
13672f75660SOphir Munk }
13772f75660SOphir Munk 
13872f75660SOphir Munk static struct ibv_comp_channel *
mlx5_glue_create_comp_channel(struct ibv_context * context)13972f75660SOphir Munk mlx5_glue_create_comp_channel(struct ibv_context *context)
14072f75660SOphir Munk {
14172f75660SOphir Munk 	return ibv_create_comp_channel(context);
14272f75660SOphir Munk }
14372f75660SOphir Munk 
14472f75660SOphir Munk static int
mlx5_glue_destroy_comp_channel(struct ibv_comp_channel * channel)14572f75660SOphir Munk mlx5_glue_destroy_comp_channel(struct ibv_comp_channel *channel)
14672f75660SOphir Munk {
14772f75660SOphir Munk 	return ibv_destroy_comp_channel(channel);
14872f75660SOphir Munk }
14972f75660SOphir Munk 
15072f75660SOphir Munk static struct ibv_cq *
mlx5_glue_create_cq(struct ibv_context * context,int cqe,void * cq_context,struct ibv_comp_channel * channel,int comp_vector)15172f75660SOphir Munk mlx5_glue_create_cq(struct ibv_context *context, int cqe, void *cq_context,
15272f75660SOphir Munk 		    struct ibv_comp_channel *channel, int comp_vector)
15372f75660SOphir Munk {
15472f75660SOphir Munk 	return ibv_create_cq(context, cqe, cq_context, channel, comp_vector);
15572f75660SOphir Munk }
15672f75660SOphir Munk 
15772f75660SOphir Munk static int
mlx5_glue_destroy_cq(struct ibv_cq * cq)15872f75660SOphir Munk mlx5_glue_destroy_cq(struct ibv_cq *cq)
15972f75660SOphir Munk {
16072f75660SOphir Munk 	return ibv_destroy_cq(cq);
16172f75660SOphir Munk }
16272f75660SOphir Munk 
16372f75660SOphir Munk static int
mlx5_glue_get_cq_event(struct ibv_comp_channel * channel,struct ibv_cq ** cq,void ** cq_context)16472f75660SOphir Munk mlx5_glue_get_cq_event(struct ibv_comp_channel *channel, struct ibv_cq **cq,
16572f75660SOphir Munk 		       void **cq_context)
16672f75660SOphir Munk {
16772f75660SOphir Munk 	return ibv_get_cq_event(channel, cq, cq_context);
16872f75660SOphir Munk }
16972f75660SOphir Munk 
17072f75660SOphir Munk static void
mlx5_glue_ack_cq_events(struct ibv_cq * cq,unsigned int nevents)17172f75660SOphir Munk mlx5_glue_ack_cq_events(struct ibv_cq *cq, unsigned int nevents)
17272f75660SOphir Munk {
17372f75660SOphir Munk 	ibv_ack_cq_events(cq, nevents);
17472f75660SOphir Munk }
17572f75660SOphir Munk 
17672f75660SOphir Munk static struct ibv_rwq_ind_table *
mlx5_glue_create_rwq_ind_table(struct ibv_context * context,struct ibv_rwq_ind_table_init_attr * init_attr)17772f75660SOphir Munk mlx5_glue_create_rwq_ind_table(struct ibv_context *context,
17872f75660SOphir Munk 			       struct ibv_rwq_ind_table_init_attr *init_attr)
17972f75660SOphir Munk {
18072f75660SOphir Munk 	return ibv_create_rwq_ind_table(context, init_attr);
18172f75660SOphir Munk }
18272f75660SOphir Munk 
18372f75660SOphir Munk static int
mlx5_glue_destroy_rwq_ind_table(struct ibv_rwq_ind_table * rwq_ind_table)18472f75660SOphir Munk mlx5_glue_destroy_rwq_ind_table(struct ibv_rwq_ind_table *rwq_ind_table)
18572f75660SOphir Munk {
18672f75660SOphir Munk 	return ibv_destroy_rwq_ind_table(rwq_ind_table);
18772f75660SOphir Munk }
18872f75660SOphir Munk 
18972f75660SOphir Munk static struct ibv_wq *
mlx5_glue_create_wq(struct ibv_context * context,struct ibv_wq_init_attr * wq_init_attr)19072f75660SOphir Munk mlx5_glue_create_wq(struct ibv_context *context,
19172f75660SOphir Munk 		    struct ibv_wq_init_attr *wq_init_attr)
19272f75660SOphir Munk {
19372f75660SOphir Munk 	return ibv_create_wq(context, wq_init_attr);
19472f75660SOphir Munk }
19572f75660SOphir Munk 
19672f75660SOphir Munk static int
mlx5_glue_destroy_wq(struct ibv_wq * wq)19772f75660SOphir Munk mlx5_glue_destroy_wq(struct ibv_wq *wq)
19872f75660SOphir Munk {
19972f75660SOphir Munk 	return ibv_destroy_wq(wq);
20072f75660SOphir Munk }
20172f75660SOphir Munk static int
mlx5_glue_modify_wq(struct ibv_wq * wq,struct ibv_wq_attr * wq_attr)20272f75660SOphir Munk mlx5_glue_modify_wq(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr)
20372f75660SOphir Munk {
20472f75660SOphir Munk 	return ibv_modify_wq(wq, wq_attr);
20572f75660SOphir Munk }
20672f75660SOphir Munk 
20772f75660SOphir Munk static struct ibv_flow *
mlx5_glue_create_flow(struct ibv_qp * qp,struct ibv_flow_attr * flow)20872f75660SOphir Munk mlx5_glue_create_flow(struct ibv_qp *qp, struct ibv_flow_attr *flow)
20972f75660SOphir Munk {
21072f75660SOphir Munk 	return ibv_create_flow(qp, flow);
21172f75660SOphir Munk }
21272f75660SOphir Munk 
21372f75660SOphir Munk static int
mlx5_glue_destroy_flow(struct ibv_flow * flow_id)21472f75660SOphir Munk mlx5_glue_destroy_flow(struct ibv_flow *flow_id)
21572f75660SOphir Munk {
21672f75660SOphir Munk 	return ibv_destroy_flow(flow_id);
21772f75660SOphir Munk }
21872f75660SOphir Munk 
21972f75660SOphir Munk static int
mlx5_glue_destroy_flow_action(void * action)22072f75660SOphir Munk mlx5_glue_destroy_flow_action(void *action)
22172f75660SOphir Munk {
22272f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
22372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
22472f75660SOphir Munk 	return mlx5dv_dr_action_destroy(action);
22572f75660SOphir Munk #else
22672f75660SOphir Munk 	struct mlx5dv_flow_action_attr *attr = action;
22772f75660SOphir Munk 	int res = 0;
22872f75660SOphir Munk 	switch (attr->type) {
22972f75660SOphir Munk 	case MLX5DV_FLOW_ACTION_TAG:
23072f75660SOphir Munk 		break;
23172f75660SOphir Munk 	default:
23272f75660SOphir Munk 		res = ibv_destroy_flow_action(attr->action);
23372f75660SOphir Munk 		break;
23472f75660SOphir Munk 	}
235cdb034a8SOphir Munk 	free(action);
23672f75660SOphir Munk 	return res;
23772f75660SOphir Munk #endif
23872f75660SOphir Munk #else
23972f75660SOphir Munk 	(void)action;
24072f75660SOphir Munk 	return -ENOTSUP;
24172f75660SOphir Munk #endif
24272f75660SOphir Munk }
24372f75660SOphir Munk 
24472f75660SOphir Munk static struct ibv_qp *
mlx5_glue_create_qp(struct ibv_pd * pd,struct ibv_qp_init_attr * qp_init_attr)24572f75660SOphir Munk mlx5_glue_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *qp_init_attr)
24672f75660SOphir Munk {
24772f75660SOphir Munk 	return ibv_create_qp(pd, qp_init_attr);
24872f75660SOphir Munk }
24972f75660SOphir Munk 
25072f75660SOphir Munk static struct ibv_qp *
mlx5_glue_create_qp_ex(struct ibv_context * context,struct ibv_qp_init_attr_ex * qp_init_attr_ex)25172f75660SOphir Munk mlx5_glue_create_qp_ex(struct ibv_context *context,
25272f75660SOphir Munk 		       struct ibv_qp_init_attr_ex *qp_init_attr_ex)
25372f75660SOphir Munk {
25472f75660SOphir Munk 	return ibv_create_qp_ex(context, qp_init_attr_ex);
25572f75660SOphir Munk }
25672f75660SOphir Munk 
25772f75660SOphir Munk static int
mlx5_glue_destroy_qp(struct ibv_qp * qp)25872f75660SOphir Munk mlx5_glue_destroy_qp(struct ibv_qp *qp)
25972f75660SOphir Munk {
26072f75660SOphir Munk 	return ibv_destroy_qp(qp);
26172f75660SOphir Munk }
26272f75660SOphir Munk 
26372f75660SOphir Munk static int
mlx5_glue_modify_qp(struct ibv_qp * qp,struct ibv_qp_attr * attr,int attr_mask)26472f75660SOphir Munk mlx5_glue_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr, int attr_mask)
26572f75660SOphir Munk {
26672f75660SOphir Munk 	return ibv_modify_qp(qp, attr, attr_mask);
26772f75660SOphir Munk }
26872f75660SOphir Munk 
26972f75660SOphir Munk static struct ibv_mr *
mlx5_glue_reg_mr(struct ibv_pd * pd,void * addr,size_t length,int access)27072f75660SOphir Munk mlx5_glue_reg_mr(struct ibv_pd *pd, void *addr, size_t length, int access)
27172f75660SOphir Munk {
27272f75660SOphir Munk 	return ibv_reg_mr(pd, addr, length, access);
27372f75660SOphir Munk }
27472f75660SOphir Munk 
27572f75660SOphir Munk static struct ibv_mr *
mlx5_glue_reg_mr_iova(struct ibv_pd * pd,void * addr,size_t length,uint64_t iova,int access)2766ebd062eSMichael Baum mlx5_glue_reg_mr_iova(struct ibv_pd *pd, void *addr, size_t length,
2776ebd062eSMichael Baum 		      uint64_t iova, int access)
2786ebd062eSMichael Baum {
2796ebd062eSMichael Baum #ifdef HAVE_MLX5_IBV_REG_MR_IOVA
2806ebd062eSMichael Baum 		return ibv_reg_mr_iova(pd, addr, length, iova, access);
2816ebd062eSMichael Baum #else
2826ebd062eSMichael Baum 	(void)pd;
2836ebd062eSMichael Baum 	(void)addr;
2846ebd062eSMichael Baum 	(void)length;
2856ebd062eSMichael Baum 	(void)iova;
2866ebd062eSMichael Baum 	(void)access;
2876ebd062eSMichael Baum 	errno = ENOTSUP;
2886ebd062eSMichael Baum 	return NULL;
2896ebd062eSMichael Baum #endif
2906ebd062eSMichael Baum }
2916ebd062eSMichael Baum 
2926ebd062eSMichael Baum static struct ibv_mr *
mlx5_glue_alloc_null_mr(struct ibv_pd * pd)29372f75660SOphir Munk mlx5_glue_alloc_null_mr(struct ibv_pd *pd)
29472f75660SOphir Munk {
29572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
29672f75660SOphir Munk 	return ibv_alloc_null_mr(pd);
29772f75660SOphir Munk #else
29872f75660SOphir Munk 	(void)pd;
29972f75660SOphir Munk 	errno = ENOTSUP;
30072f75660SOphir Munk 	return NULL;
30172f75660SOphir Munk #endif
30272f75660SOphir Munk }
30372f75660SOphir Munk 
30472f75660SOphir Munk static int
mlx5_glue_dereg_mr(struct ibv_mr * mr)30572f75660SOphir Munk mlx5_glue_dereg_mr(struct ibv_mr *mr)
30672f75660SOphir Munk {
30772f75660SOphir Munk 	return ibv_dereg_mr(mr);
30872f75660SOphir Munk }
30972f75660SOphir Munk 
31072f75660SOphir Munk static struct ibv_counter_set *
mlx5_glue_create_counter_set(struct ibv_context * context,struct ibv_counter_set_init_attr * init_attr)31172f75660SOphir Munk mlx5_glue_create_counter_set(struct ibv_context *context,
31272f75660SOphir Munk 			     struct ibv_counter_set_init_attr *init_attr)
31372f75660SOphir Munk {
31472f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
31572f75660SOphir Munk 	(void)context;
31672f75660SOphir Munk 	(void)init_attr;
31772f75660SOphir Munk 	return NULL;
31872f75660SOphir Munk #else
31972f75660SOphir Munk 	return ibv_create_counter_set(context, init_attr);
32072f75660SOphir Munk #endif
32172f75660SOphir Munk }
32272f75660SOphir Munk 
32372f75660SOphir Munk static int
mlx5_glue_destroy_counter_set(struct ibv_counter_set * cs)32472f75660SOphir Munk mlx5_glue_destroy_counter_set(struct ibv_counter_set *cs)
32572f75660SOphir Munk {
32672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
32772f75660SOphir Munk 	(void)cs;
32872f75660SOphir Munk 	return -ENOTSUP;
32972f75660SOphir Munk #else
33072f75660SOphir Munk 	return ibv_destroy_counter_set(cs);
33172f75660SOphir Munk #endif
33272f75660SOphir Munk }
33372f75660SOphir Munk 
33472f75660SOphir Munk static int
mlx5_glue_describe_counter_set(struct ibv_context * context,uint16_t counter_set_id,struct ibv_counter_set_description * cs_desc)33572f75660SOphir Munk mlx5_glue_describe_counter_set(struct ibv_context *context,
33672f75660SOphir Munk 			       uint16_t counter_set_id,
33772f75660SOphir Munk 			       struct ibv_counter_set_description *cs_desc)
33872f75660SOphir Munk {
33972f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
34072f75660SOphir Munk 	(void)context;
34172f75660SOphir Munk 	(void)counter_set_id;
34272f75660SOphir Munk 	(void)cs_desc;
34372f75660SOphir Munk 	return -ENOTSUP;
34472f75660SOphir Munk #else
34572f75660SOphir Munk 	return ibv_describe_counter_set(context, counter_set_id, cs_desc);
34672f75660SOphir Munk #endif
34772f75660SOphir Munk }
34872f75660SOphir Munk 
34972f75660SOphir Munk static int
mlx5_glue_query_counter_set(struct ibv_query_counter_set_attr * query_attr,struct ibv_counter_set_data * cs_data)35072f75660SOphir Munk mlx5_glue_query_counter_set(struct ibv_query_counter_set_attr *query_attr,
35172f75660SOphir Munk 			    struct ibv_counter_set_data *cs_data)
35272f75660SOphir Munk {
35372f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
35472f75660SOphir Munk 	(void)query_attr;
35572f75660SOphir Munk 	(void)cs_data;
35672f75660SOphir Munk 	return -ENOTSUP;
35772f75660SOphir Munk #else
35872f75660SOphir Munk 	return ibv_query_counter_set(query_attr, cs_data);
35972f75660SOphir Munk #endif
36072f75660SOphir Munk }
36172f75660SOphir Munk 
36272f75660SOphir Munk static struct ibv_counters *
mlx5_glue_create_counters(struct ibv_context * context,struct ibv_counters_init_attr * init_attr)36372f75660SOphir Munk mlx5_glue_create_counters(struct ibv_context *context,
36472f75660SOphir Munk 			  struct ibv_counters_init_attr *init_attr)
36572f75660SOphir Munk {
36672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
36772f75660SOphir Munk 	(void)context;
36872f75660SOphir Munk 	(void)init_attr;
36972f75660SOphir Munk 	errno = ENOTSUP;
37072f75660SOphir Munk 	return NULL;
37172f75660SOphir Munk #else
37272f75660SOphir Munk 	return ibv_create_counters(context, init_attr);
37372f75660SOphir Munk #endif
37472f75660SOphir Munk }
37572f75660SOphir Munk 
37672f75660SOphir Munk static int
mlx5_glue_destroy_counters(struct ibv_counters * counters)37772f75660SOphir Munk mlx5_glue_destroy_counters(struct ibv_counters *counters)
37872f75660SOphir Munk {
37972f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
38072f75660SOphir Munk 	(void)counters;
38172f75660SOphir Munk 	return -ENOTSUP;
38272f75660SOphir Munk #else
38372f75660SOphir Munk 	return ibv_destroy_counters(counters);
38472f75660SOphir Munk #endif
38572f75660SOphir Munk }
38672f75660SOphir Munk 
38772f75660SOphir Munk static int
mlx5_glue_attach_counters(struct ibv_counters * counters,struct ibv_counter_attach_attr * attr,struct ibv_flow * flow)38872f75660SOphir Munk mlx5_glue_attach_counters(struct ibv_counters *counters,
38972f75660SOphir Munk 			  struct ibv_counter_attach_attr *attr,
39072f75660SOphir Munk 			  struct ibv_flow *flow)
39172f75660SOphir Munk {
39272f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
39372f75660SOphir Munk 	(void)counters;
39472f75660SOphir Munk 	(void)attr;
39572f75660SOphir Munk 	(void)flow;
39672f75660SOphir Munk 	return -ENOTSUP;
39772f75660SOphir Munk #else
39872f75660SOphir Munk 	return ibv_attach_counters_point_flow(counters, attr, flow);
39972f75660SOphir Munk #endif
40072f75660SOphir Munk }
40172f75660SOphir Munk 
40272f75660SOphir Munk static int
mlx5_glue_query_counters(struct ibv_counters * counters,uint64_t * counters_value,uint32_t ncounters,uint32_t flags)40372f75660SOphir Munk mlx5_glue_query_counters(struct ibv_counters *counters,
40472f75660SOphir Munk 			 uint64_t *counters_value,
40572f75660SOphir Munk 			 uint32_t ncounters,
40672f75660SOphir Munk 			 uint32_t flags)
40772f75660SOphir Munk {
40872f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
40972f75660SOphir Munk 	(void)counters;
41072f75660SOphir Munk 	(void)counters_value;
41172f75660SOphir Munk 	(void)ncounters;
41272f75660SOphir Munk 	(void)flags;
41372f75660SOphir Munk 	return -ENOTSUP;
41472f75660SOphir Munk #else
41572f75660SOphir Munk 	return ibv_read_counters(counters, counters_value, ncounters, flags);
41672f75660SOphir Munk #endif
41772f75660SOphir Munk }
41872f75660SOphir Munk 
41972f75660SOphir Munk static void
mlx5_glue_ack_async_event(struct ibv_async_event * event)42072f75660SOphir Munk mlx5_glue_ack_async_event(struct ibv_async_event *event)
42172f75660SOphir Munk {
42272f75660SOphir Munk 	ibv_ack_async_event(event);
42372f75660SOphir Munk }
42472f75660SOphir Munk 
42572f75660SOphir Munk static int
mlx5_glue_get_async_event(struct ibv_context * context,struct ibv_async_event * event)42672f75660SOphir Munk mlx5_glue_get_async_event(struct ibv_context *context,
42772f75660SOphir Munk 			  struct ibv_async_event *event)
42872f75660SOphir Munk {
42972f75660SOphir Munk 	return ibv_get_async_event(context, event);
43072f75660SOphir Munk }
43172f75660SOphir Munk 
43272f75660SOphir Munk static const char *
mlx5_glue_port_state_str(enum ibv_port_state port_state)43372f75660SOphir Munk mlx5_glue_port_state_str(enum ibv_port_state port_state)
43472f75660SOphir Munk {
43572f75660SOphir Munk 	return ibv_port_state_str(port_state);
43672f75660SOphir Munk }
43772f75660SOphir Munk 
43872f75660SOphir Munk static struct ibv_cq *
mlx5_glue_cq_ex_to_cq(struct ibv_cq_ex * cq)43972f75660SOphir Munk mlx5_glue_cq_ex_to_cq(struct ibv_cq_ex *cq)
44072f75660SOphir Munk {
44172f75660SOphir Munk 	return ibv_cq_ex_to_cq(cq);
44272f75660SOphir Munk }
44372f75660SOphir Munk 
44472f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_action_dest_flow_tbl(void * tbl)44572f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl)
44672f75660SOphir Munk {
44772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
44872f75660SOphir Munk 	return mlx5dv_dr_action_create_dest_table(tbl);
44972f75660SOphir Munk #else
45072f75660SOphir Munk 	(void)tbl;
45172f75660SOphir Munk 	errno = ENOTSUP;
45272f75660SOphir Munk 	return NULL;
45372f75660SOphir Munk #endif
45472f75660SOphir Munk }
45572f75660SOphir Munk 
45672f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_action_dest_port(void * domain,uint32_t port)45772f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_port(void *domain, uint32_t port)
45872f75660SOphir Munk {
4590fd928bbSViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_CREATE_DEST_IB_PORT
46072f75660SOphir Munk 	return mlx5dv_dr_action_create_dest_ib_port(domain, port);
46172f75660SOphir Munk #else
46272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH
46372f75660SOphir Munk 	return mlx5dv_dr_action_create_dest_vport(domain, port);
46472f75660SOphir Munk #else
46572f75660SOphir Munk 	(void)domain;
46672f75660SOphir Munk 	(void)port;
46772f75660SOphir Munk 	errno = ENOTSUP;
46872f75660SOphir Munk 	return NULL;
46972f75660SOphir Munk #endif
47072f75660SOphir Munk #endif
47172f75660SOphir Munk }
47272f75660SOphir Munk 
47372f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_action_drop(void)47472f75660SOphir Munk mlx5_glue_dr_create_flow_action_drop(void)
47572f75660SOphir Munk {
47672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH
47772f75660SOphir Munk 	return mlx5dv_dr_action_create_drop();
47872f75660SOphir Munk #else
47972f75660SOphir Munk 	errno = ENOTSUP;
48072f75660SOphir Munk 	return NULL;
48172f75660SOphir Munk #endif
48272f75660SOphir Munk }
48372f75660SOphir Munk 
48472f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_action_push_vlan(struct mlx5dv_dr_domain * domain,rte_be32_t vlan_tag)48572f75660SOphir Munk mlx5_glue_dr_create_flow_action_push_vlan(struct mlx5dv_dr_domain *domain,
48672f75660SOphir Munk 					  rte_be32_t vlan_tag)
48772f75660SOphir Munk {
48872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN
48972f75660SOphir Munk 	return mlx5dv_dr_action_create_push_vlan(domain, vlan_tag);
49072f75660SOphir Munk #else
49172f75660SOphir Munk 	(void)domain;
49272f75660SOphir Munk 	(void)vlan_tag;
49372f75660SOphir Munk 	errno = ENOTSUP;
49472f75660SOphir Munk 	return NULL;
49572f75660SOphir Munk #endif
49672f75660SOphir Munk }
49772f75660SOphir Munk 
49872f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_action_pop_vlan(void)49972f75660SOphir Munk mlx5_glue_dr_create_flow_action_pop_vlan(void)
50072f75660SOphir Munk {
50172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN
50272f75660SOphir Munk 	return mlx5dv_dr_action_create_pop_vlan();
50372f75660SOphir Munk #else
50472f75660SOphir Munk 	errno = ENOTSUP;
50572f75660SOphir Munk 	return NULL;
50672f75660SOphir Munk #endif
50772f75660SOphir Munk }
50872f75660SOphir Munk 
50972f75660SOphir Munk static void *
mlx5_glue_dr_create_flow_tbl(void * domain,uint32_t level)51072f75660SOphir Munk mlx5_glue_dr_create_flow_tbl(void *domain, uint32_t level)
51172f75660SOphir Munk {
51272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
51372f75660SOphir Munk 	return mlx5dv_dr_table_create(domain, level);
51472f75660SOphir Munk #else
51572f75660SOphir Munk 	(void)domain;
51672f75660SOphir Munk 	(void)level;
51772f75660SOphir Munk 	errno = ENOTSUP;
51872f75660SOphir Munk 	return NULL;
51972f75660SOphir Munk #endif
52072f75660SOphir Munk }
52172f75660SOphir Munk 
52272f75660SOphir Munk static int
mlx5_glue_dr_destroy_flow_tbl(void * tbl)52372f75660SOphir Munk mlx5_glue_dr_destroy_flow_tbl(void *tbl)
52472f75660SOphir Munk {
52572f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
52672f75660SOphir Munk 	return mlx5dv_dr_table_destroy(tbl);
52772f75660SOphir Munk #else
52872f75660SOphir Munk 	(void)tbl;
52972f75660SOphir Munk 	errno = ENOTSUP;
53072f75660SOphir Munk 	return errno;
53172f75660SOphir Munk #endif
53272f75660SOphir Munk }
53372f75660SOphir Munk 
53472f75660SOphir Munk static void *
mlx5_glue_dr_create_domain(struct ibv_context * ctx,enum mlx5dv_dr_domain_type domain)53572f75660SOphir Munk mlx5_glue_dr_create_domain(struct ibv_context *ctx,
53672f75660SOphir Munk 			   enum  mlx5dv_dr_domain_type domain)
53772f75660SOphir Munk {
53872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
53972f75660SOphir Munk 	return mlx5dv_dr_domain_create(ctx, domain);
54072f75660SOphir Munk #else
54172f75660SOphir Munk 	(void)ctx;
54272f75660SOphir Munk 	(void)domain;
54372f75660SOphir Munk 	errno = ENOTSUP;
54472f75660SOphir Munk 	return NULL;
54572f75660SOphir Munk #endif
54672f75660SOphir Munk }
54772f75660SOphir Munk 
54872f75660SOphir Munk static int
mlx5_glue_dr_destroy_domain(void * domain)54972f75660SOphir Munk mlx5_glue_dr_destroy_domain(void *domain)
55072f75660SOphir Munk {
55172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
55272f75660SOphir Munk 	return mlx5dv_dr_domain_destroy(domain);
55372f75660SOphir Munk #else
55472f75660SOphir Munk 	(void)domain;
55572f75660SOphir Munk 	errno = ENOTSUP;
55672f75660SOphir Munk 	return errno;
55772f75660SOphir Munk #endif
55872f75660SOphir Munk }
55972f75660SOphir Munk 
5606e0cd74aSBing Zhao static int
mlx5_glue_dr_sync_domain(void * domain,uint32_t flags)5616e0cd74aSBing Zhao mlx5_glue_dr_sync_domain(void *domain, uint32_t flags)
5626e0cd74aSBing Zhao {
5636e0cd74aSBing Zhao #ifdef HAVE_MLX5DV_DR
5646e0cd74aSBing Zhao 	return mlx5dv_dr_domain_sync(domain, flags);
5656e0cd74aSBing Zhao #else
5666e0cd74aSBing Zhao 	(void)domain;
5676e0cd74aSBing Zhao 	(void)flags;
5686e0cd74aSBing Zhao 	errno = ENOTSUP;
5696e0cd74aSBing Zhao 	return errno;
5706e0cd74aSBing Zhao #endif
5716e0cd74aSBing Zhao }
5726e0cd74aSBing Zhao 
57372f75660SOphir Munk static struct ibv_cq_ex *
mlx5_glue_dv_create_cq(struct ibv_context * context,struct ibv_cq_init_attr_ex * cq_attr,struct mlx5dv_cq_init_attr * mlx5_cq_attr)57472f75660SOphir Munk mlx5_glue_dv_create_cq(struct ibv_context *context,
57572f75660SOphir Munk 		       struct ibv_cq_init_attr_ex *cq_attr,
57672f75660SOphir Munk 		       struct mlx5dv_cq_init_attr *mlx5_cq_attr)
57772f75660SOphir Munk {
57872f75660SOphir Munk 	return mlx5dv_create_cq(context, cq_attr, mlx5_cq_attr);
57972f75660SOphir Munk }
58072f75660SOphir Munk 
58172f75660SOphir Munk static struct ibv_wq *
mlx5_glue_dv_create_wq(struct ibv_context * context,struct ibv_wq_init_attr * wq_attr,struct mlx5dv_wq_init_attr * mlx5_wq_attr)58272f75660SOphir Munk mlx5_glue_dv_create_wq(struct ibv_context *context,
58372f75660SOphir Munk 		       struct ibv_wq_init_attr *wq_attr,
58472f75660SOphir Munk 		       struct mlx5dv_wq_init_attr *mlx5_wq_attr)
58572f75660SOphir Munk {
58672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT
58772f75660SOphir Munk 	(void)context;
58872f75660SOphir Munk 	(void)wq_attr;
58972f75660SOphir Munk 	(void)mlx5_wq_attr;
59072f75660SOphir Munk 	errno = ENOTSUP;
59172f75660SOphir Munk 	return NULL;
59272f75660SOphir Munk #else
59372f75660SOphir Munk 	return mlx5dv_create_wq(context, wq_attr, mlx5_wq_attr);
59472f75660SOphir Munk #endif
59572f75660SOphir Munk }
59672f75660SOphir Munk 
59772f75660SOphir Munk static int
mlx5_glue_dv_query_device(struct ibv_context * ctx,struct mlx5dv_context * attrs_out)59872f75660SOphir Munk mlx5_glue_dv_query_device(struct ibv_context *ctx,
59972f75660SOphir Munk 			  struct mlx5dv_context *attrs_out)
60072f75660SOphir Munk {
60172f75660SOphir Munk 	return mlx5dv_query_device(ctx, attrs_out);
60272f75660SOphir Munk }
60372f75660SOphir Munk 
60472f75660SOphir Munk static int
mlx5_glue_dv_set_context_attr(struct ibv_context * ibv_ctx,enum mlx5dv_set_ctx_attr_type type,void * attr)60572f75660SOphir Munk mlx5_glue_dv_set_context_attr(struct ibv_context *ibv_ctx,
60672f75660SOphir Munk 			      enum mlx5dv_set_ctx_attr_type type, void *attr)
60772f75660SOphir Munk {
60872f75660SOphir Munk 	return mlx5dv_set_context_attr(ibv_ctx, type, attr);
60972f75660SOphir Munk }
61072f75660SOphir Munk 
61172f75660SOphir Munk static int
mlx5_glue_dv_init_obj(struct mlx5dv_obj * obj,uint64_t obj_type)61272f75660SOphir Munk mlx5_glue_dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type)
61372f75660SOphir Munk {
61472f75660SOphir Munk 	return mlx5dv_init_obj(obj, obj_type);
61572f75660SOphir Munk }
61672f75660SOphir Munk 
61772f75660SOphir Munk static struct ibv_qp *
mlx5_glue_dv_create_qp(struct ibv_context * context,struct ibv_qp_init_attr_ex * qp_init_attr_ex,struct mlx5dv_qp_init_attr * dv_qp_init_attr)61872f75660SOphir Munk mlx5_glue_dv_create_qp(struct ibv_context *context,
61972f75660SOphir Munk 		       struct ibv_qp_init_attr_ex *qp_init_attr_ex,
62072f75660SOphir Munk 		       struct mlx5dv_qp_init_attr *dv_qp_init_attr)
62172f75660SOphir Munk {
62272f75660SOphir Munk #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
62372f75660SOphir Munk 	return mlx5dv_create_qp(context, qp_init_attr_ex, dv_qp_init_attr);
62472f75660SOphir Munk #else
62572f75660SOphir Munk 	(void)context;
62672f75660SOphir Munk 	(void)qp_init_attr_ex;
62772f75660SOphir Munk 	(void)dv_qp_init_attr;
62872f75660SOphir Munk 	errno = ENOTSUP;
62972f75660SOphir Munk 	return NULL;
63072f75660SOphir Munk #endif
63172f75660SOphir Munk }
63272f75660SOphir Munk 
63372f75660SOphir Munk static void *
__mlx5_glue_dv_create_flow_matcher(struct ibv_context * context,struct mlx5dv_flow_matcher_attr * matcher_attr)634dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_matcher(struct ibv_context *context,
635dfceca7eSAlex Vesker 		struct mlx5dv_flow_matcher_attr *matcher_attr)
636dfceca7eSAlex Vesker {
637dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT
638dfceca7eSAlex Vesker 	return mlx5dv_create_flow_matcher(context, matcher_attr);
639dfceca7eSAlex Vesker #else
640dfceca7eSAlex Vesker 	(void)context;
641dfceca7eSAlex Vesker 	(void)matcher_attr;
642dfceca7eSAlex Vesker 	errno = ENOTSUP;
643dfceca7eSAlex Vesker 	return NULL;
644dfceca7eSAlex Vesker #endif
645dfceca7eSAlex Vesker }
646dfceca7eSAlex Vesker 
647dfceca7eSAlex Vesker static void *
mlx5_glue_dv_create_flow_matcher(struct ibv_context * context,struct mlx5dv_flow_matcher_attr * matcher_attr,void * tbl)64872f75660SOphir Munk mlx5_glue_dv_create_flow_matcher(struct ibv_context *context,
64972f75660SOphir Munk 				 struct mlx5dv_flow_matcher_attr *matcher_attr,
65072f75660SOphir Munk 				 void *tbl)
65172f75660SOphir Munk {
65272f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
65372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
65472f75660SOphir Munk 	(void)context;
65572f75660SOphir Munk 	return mlx5dv_dr_matcher_create(tbl, matcher_attr->priority,
65672f75660SOphir Munk 					matcher_attr->match_criteria_enable,
65772f75660SOphir Munk 					matcher_attr->match_mask);
65872f75660SOphir Munk #else
65972f75660SOphir Munk 	(void)tbl;
660dfceca7eSAlex Vesker 	return __mlx5_glue_dv_create_flow_matcher(context, matcher_attr);
66172f75660SOphir Munk #endif
66272f75660SOphir Munk #else
66372f75660SOphir Munk 	(void)context;
66472f75660SOphir Munk 	(void)matcher_attr;
66572f75660SOphir Munk 	(void)tbl;
66672f75660SOphir Munk 	errno = ENOTSUP;
66772f75660SOphir Munk 	return NULL;
66872f75660SOphir Munk #endif
66972f75660SOphir Munk }
67072f75660SOphir Munk 
67172f75660SOphir Munk static void *
__mlx5_glue_dv_create_flow(void * matcher,void * match_value,size_t num_actions,void * actions)672dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow(void *matcher,
673dfceca7eSAlex Vesker 			   void *match_value,
674dfceca7eSAlex Vesker 			   size_t num_actions,
675dfceca7eSAlex Vesker 			   void *actions)
676dfceca7eSAlex Vesker {
677dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT
678dfceca7eSAlex Vesker 	return mlx5dv_create_flow(matcher,
679dfceca7eSAlex Vesker 				  match_value,
680dfceca7eSAlex Vesker 				  num_actions,
681dfceca7eSAlex Vesker 				  (struct mlx5dv_flow_action_attr *)actions);
682dfceca7eSAlex Vesker #else
683dfceca7eSAlex Vesker 	(void)matcher;
684dfceca7eSAlex Vesker 	(void)match_value;
685dfceca7eSAlex Vesker 	(void)num_actions;
686dfceca7eSAlex Vesker 	(void)actions;
687dfceca7eSAlex Vesker 	return NULL;
688dfceca7eSAlex Vesker #endif
689dfceca7eSAlex Vesker }
690dfceca7eSAlex Vesker 
691dfceca7eSAlex Vesker static void *
mlx5_glue_dv_create_flow(void * matcher,void * match_value,size_t num_actions,void * actions[])69272f75660SOphir Munk mlx5_glue_dv_create_flow(void *matcher,
69372f75660SOphir Munk 			 void *match_value,
69472f75660SOphir Munk 			 size_t num_actions,
69572f75660SOphir Munk 			 void *actions[])
69672f75660SOphir Munk {
69772f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
69872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
69972f75660SOphir Munk 	return mlx5dv_dr_rule_create(matcher, match_value, num_actions,
70072f75660SOphir Munk 				     (struct mlx5dv_dr_action **)actions);
70172f75660SOphir Munk #else
70243e73483SThomas Monjalon 	size_t i;
70372f75660SOphir Munk 	struct mlx5dv_flow_action_attr actions_attr[8];
70472f75660SOphir Munk 
70572f75660SOphir Munk 	if (num_actions > 8)
70672f75660SOphir Munk 		return NULL;
70743e73483SThomas Monjalon 	for (i = 0; i < num_actions; i++)
70872f75660SOphir Munk 		actions_attr[i] =
70972f75660SOphir Munk 			*((struct mlx5dv_flow_action_attr *)(actions[i]));
710dfceca7eSAlex Vesker 	return __mlx5_glue_dv_create_flow(matcher, match_value,
71172f75660SOphir Munk 					  num_actions, actions_attr);
71272f75660SOphir Munk #endif
71372f75660SOphir Munk #else
71472f75660SOphir Munk 	(void)matcher;
71572f75660SOphir Munk 	(void)match_value;
71672f75660SOphir Munk 	(void)num_actions;
71772f75660SOphir Munk 	(void)actions;
71872f75660SOphir Munk 	return NULL;
71972f75660SOphir Munk #endif
72072f75660SOphir Munk }
72172f75660SOphir Munk 
72272f75660SOphir Munk static void *
mlx5_glue_dv_create_flow_action_counter(void * counter_obj,uint32_t offset)72372f75660SOphir Munk mlx5_glue_dv_create_flow_action_counter(void *counter_obj, uint32_t offset)
72472f75660SOphir Munk {
72572f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
72672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
72772f75660SOphir Munk 	return mlx5dv_dr_action_create_flow_counter(counter_obj, offset);
72872f75660SOphir Munk #else
72972f75660SOphir Munk 	struct mlx5dv_flow_action_attr *action;
73072f75660SOphir Munk 
73172f75660SOphir Munk 	(void)offset;
732cdb034a8SOphir Munk 	action = malloc(sizeof(*action));
73372f75660SOphir Munk 	if (!action)
73472f75660SOphir Munk 		return NULL;
73572f75660SOphir Munk 	action->type = MLX5DV_FLOW_ACTION_COUNTERS_DEVX;
73672f75660SOphir Munk 	action->obj = counter_obj;
73772f75660SOphir Munk 	return action;
73872f75660SOphir Munk #endif
73972f75660SOphir Munk #else
74072f75660SOphir Munk 	(void)counter_obj;
74172f75660SOphir Munk 	(void)offset;
74272f75660SOphir Munk 	errno = ENOTSUP;
74372f75660SOphir Munk 	return NULL;
74472f75660SOphir Munk #endif
74572f75660SOphir Munk }
74672f75660SOphir Munk 
74772f75660SOphir Munk static void *
mlx5_glue_dv_create_flow_action_dest_ibv_qp(void * qp)74872f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp)
74972f75660SOphir Munk {
75072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
75172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
75272f75660SOphir Munk 	return mlx5dv_dr_action_create_dest_ibv_qp(qp);
75372f75660SOphir Munk #else
75472f75660SOphir Munk 	struct mlx5dv_flow_action_attr *action;
75572f75660SOphir Munk 
756cdb034a8SOphir Munk 	action = malloc(sizeof(*action));
75772f75660SOphir Munk 	if (!action)
75872f75660SOphir Munk 		return NULL;
75972f75660SOphir Munk 	action->type = MLX5DV_FLOW_ACTION_DEST_IBV_QP;
76072f75660SOphir Munk 	action->obj = qp;
76172f75660SOphir Munk 	return action;
76272f75660SOphir Munk #endif
76372f75660SOphir Munk #else
76472f75660SOphir Munk 	(void)qp;
76572f75660SOphir Munk 	errno = ENOTSUP;
76672f75660SOphir Munk 	return NULL;
76772f75660SOphir Munk #endif
76872f75660SOphir Munk }
76972f75660SOphir Munk 
77072f75660SOphir Munk static void *
mlx5_glue_dv_create_flow_action_dest_devx_tir(void * tir)77172f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_devx_tir(void *tir)
77272f75660SOphir Munk {
77372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR
77472f75660SOphir Munk 	return mlx5dv_dr_action_create_dest_devx_tir(tir);
77572f75660SOphir Munk #else
77672f75660SOphir Munk 	(void)tir;
77772f75660SOphir Munk 	errno = ENOTSUP;
77872f75660SOphir Munk 	return NULL;
77972f75660SOphir Munk #endif
78072f75660SOphir Munk }
78172f75660SOphir Munk 
78272f75660SOphir Munk static void *
__mlx5_glue_dv_create_flow_action_modify_header(struct ibv_context * ctx,size_t actions_sz,uint64_t actions[],enum mlx5dv_flow_table_type ft_type)783dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_modify_header
784dfceca7eSAlex Vesker 					(struct ibv_context *ctx,
785dfceca7eSAlex Vesker 					 size_t actions_sz,
786dfceca7eSAlex Vesker 					 uint64_t actions[],
787dfceca7eSAlex Vesker 					 enum mlx5dv_flow_table_type ft_type)
788dfceca7eSAlex Vesker {
789dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT
790dfceca7eSAlex Vesker 	return mlx5dv_create_flow_action_modify_header
791dfceca7eSAlex Vesker 		(ctx, actions_sz, actions, ft_type);
792dfceca7eSAlex Vesker #else
793dfceca7eSAlex Vesker 	(void)ctx;
794dfceca7eSAlex Vesker 	(void)ft_type;
795dfceca7eSAlex Vesker 	(void)actions_sz;
796dfceca7eSAlex Vesker 	(void)actions;
797dfceca7eSAlex Vesker 	errno = ENOTSUP;
798dfceca7eSAlex Vesker 	return NULL;
799dfceca7eSAlex Vesker #endif
800dfceca7eSAlex Vesker }
801dfceca7eSAlex Vesker 
802dfceca7eSAlex Vesker static void *
mlx5_glue_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,uint64_t actions[])80372f75660SOphir Munk mlx5_glue_dv_create_flow_action_modify_header
80472f75660SOphir Munk 					(struct ibv_context *ctx,
80572f75660SOphir Munk 					 enum mlx5dv_flow_table_type ft_type,
80672f75660SOphir Munk 					 void *domain, uint64_t flags,
80772f75660SOphir Munk 					 size_t actions_sz,
80872f75660SOphir Munk 					 uint64_t actions[])
80972f75660SOphir Munk {
81072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
81172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
81272f75660SOphir Munk 	(void)ctx;
81372f75660SOphir Munk 	(void)ft_type;
81472f75660SOphir Munk 	return mlx5dv_dr_action_create_modify_header(domain, flags, actions_sz,
81572f75660SOphir Munk 						     (__be64 *)actions);
81672f75660SOphir Munk #else
81772f75660SOphir Munk 	struct mlx5dv_flow_action_attr *action;
81872f75660SOphir Munk 
81972f75660SOphir Munk 	(void)domain;
82072f75660SOphir Munk 	(void)flags;
821cdb034a8SOphir Munk 	action = malloc(sizeof(*action));
82272f75660SOphir Munk 	if (!action)
82372f75660SOphir Munk 		return NULL;
82472f75660SOphir Munk 	action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION;
825dfceca7eSAlex Vesker 	action->action = __mlx5_glue_dv_create_flow_action_modify_header
82672f75660SOphir Munk 		(ctx, actions_sz, actions, ft_type);
82772f75660SOphir Munk 	return action;
82872f75660SOphir Munk #endif
82972f75660SOphir Munk #else
83072f75660SOphir Munk 	(void)ctx;
83172f75660SOphir Munk 	(void)ft_type;
83272f75660SOphir Munk 	(void)domain;
83372f75660SOphir Munk 	(void)flags;
83472f75660SOphir Munk 	(void)actions_sz;
83572f75660SOphir Munk 	(void)actions;
83672f75660SOphir Munk 	errno = ENOTSUP;
83772f75660SOphir Munk 	return NULL;
83872f75660SOphir Munk #endif
83972f75660SOphir Munk }
84072f75660SOphir Munk 
84172f75660SOphir Munk static void *
__mlx5_glue_dv_create_flow_action_packet_reformat(struct ibv_context * ctx,size_t data_sz,void * data,enum mlx5dv_flow_action_packet_reformat_type reformat_type,enum mlx5dv_flow_table_type ft_type)842dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_packet_reformat
843dfceca7eSAlex Vesker 		(struct ibv_context *ctx,
844dfceca7eSAlex Vesker 		 size_t data_sz, void *data,
845dfceca7eSAlex Vesker 		 enum mlx5dv_flow_action_packet_reformat_type reformat_type,
846dfceca7eSAlex Vesker 		 enum mlx5dv_flow_table_type ft_type)
847dfceca7eSAlex Vesker {
848dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT
849dfceca7eSAlex Vesker 	return mlx5dv_create_flow_action_packet_reformat
850dfceca7eSAlex Vesker 		(ctx, data_sz, data, reformat_type, ft_type);
851dfceca7eSAlex Vesker #else
852dfceca7eSAlex Vesker 	(void)ctx;
853dfceca7eSAlex Vesker 	(void)reformat_type;
854dfceca7eSAlex Vesker 	(void)ft_type;
855dfceca7eSAlex Vesker 	(void)data_sz;
856dfceca7eSAlex Vesker 	(void)data;
857dfceca7eSAlex Vesker 	errno = ENOTSUP;
858dfceca7eSAlex Vesker 	return NULL;
859dfceca7eSAlex Vesker #endif
860dfceca7eSAlex Vesker }
861dfceca7eSAlex Vesker 
862dfceca7eSAlex Vesker static void *
mlx5_glue_dv_create_flow_action_packet_reformat(struct ibv_context * ctx,enum mlx5dv_flow_action_packet_reformat_type reformat_type,enum mlx5dv_flow_table_type ft_type,struct mlx5dv_dr_domain * domain,uint32_t flags,size_t data_sz,void * data)86372f75660SOphir Munk mlx5_glue_dv_create_flow_action_packet_reformat
86472f75660SOphir Munk 		(struct ibv_context *ctx,
86572f75660SOphir Munk 		 enum mlx5dv_flow_action_packet_reformat_type reformat_type,
86672f75660SOphir Munk 		 enum mlx5dv_flow_table_type ft_type,
86772f75660SOphir Munk 		 struct mlx5dv_dr_domain *domain,
86872f75660SOphir Munk 		 uint32_t flags, size_t data_sz, void *data)
86972f75660SOphir Munk {
87072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
87172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
87272f75660SOphir Munk 	(void)ctx;
87372f75660SOphir Munk 	(void)ft_type;
87472f75660SOphir Munk 	return mlx5dv_dr_action_create_packet_reformat(domain, flags,
87572f75660SOphir Munk 						       reformat_type, data_sz,
87672f75660SOphir Munk 						       data);
87772f75660SOphir Munk #else
87872f75660SOphir Munk 	(void)domain;
87972f75660SOphir Munk 	(void)flags;
88072f75660SOphir Munk 	struct mlx5dv_flow_action_attr *action;
88172f75660SOphir Munk 
882cdb034a8SOphir Munk 	action = malloc(sizeof(*action));
88372f75660SOphir Munk 	if (!action)
88472f75660SOphir Munk 		return NULL;
88572f75660SOphir Munk 	action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION;
886dfceca7eSAlex Vesker 	action->action = __mlx5_glue_dv_create_flow_action_packet_reformat
88772f75660SOphir Munk 		(ctx, data_sz, data, reformat_type, ft_type);
88872f75660SOphir Munk 	return action;
88972f75660SOphir Munk #endif
89072f75660SOphir Munk #else
89172f75660SOphir Munk 	(void)ctx;
89272f75660SOphir Munk 	(void)reformat_type;
89372f75660SOphir Munk 	(void)ft_type;
89472f75660SOphir Munk 	(void)domain;
89572f75660SOphir Munk 	(void)flags;
89672f75660SOphir Munk 	(void)data_sz;
89772f75660SOphir Munk 	(void)data;
89872f75660SOphir Munk 	errno = ENOTSUP;
89972f75660SOphir Munk 	return NULL;
90072f75660SOphir Munk #endif
90172f75660SOphir Munk }
90272f75660SOphir Munk 
90372f75660SOphir Munk static void *
mlx5_glue_dv_create_flow_action_tag(uint32_t tag)90472f75660SOphir Munk mlx5_glue_dv_create_flow_action_tag(uint32_t tag)
90572f75660SOphir Munk {
90672f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
90772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
90872f75660SOphir Munk 	return mlx5dv_dr_action_create_tag(tag);
909ed5d2365SMichael Baum #else /* HAVE_MLX5DV_DR */
91072f75660SOphir Munk 	struct mlx5dv_flow_action_attr *action;
91166914d19SSuanming Mou 
912cdb034a8SOphir Munk 	action = malloc(sizeof(*action));
91372f75660SOphir Munk 	if (!action)
91472f75660SOphir Munk 		return NULL;
91572f75660SOphir Munk 	action->type = MLX5DV_FLOW_ACTION_TAG;
91672f75660SOphir Munk 	action->tag_value = tag;
91772f75660SOphir Munk 	return action;
918ed5d2365SMichael Baum #endif /* HAVE_MLX5DV_DR */
919ed5d2365SMichael Baum #else /* HAVE_IBV_FLOW_DV_SUPPORT */
92072f75660SOphir Munk 	(void)tag;
92172f75660SOphir Munk 	errno = ENOTSUP;
92272f75660SOphir Munk 	return NULL;
923ed5d2365SMichael Baum #endif /* HAVE_IBV_FLOW_DV_SUPPORT */
92472f75660SOphir Munk }
92572f75660SOphir Munk 
92672f75660SOphir Munk static void *
mlx5_glue_dv_create_flow_action_meter(struct mlx5dv_dr_flow_meter_attr * attr)92772f75660SOphir Munk mlx5_glue_dv_create_flow_action_meter(struct mlx5dv_dr_flow_meter_attr *attr)
92872f75660SOphir Munk {
92972f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER)
93072f75660SOphir Munk 	return mlx5dv_dr_action_create_flow_meter(attr);
93172f75660SOphir Munk #else
93272f75660SOphir Munk 	(void)attr;
93372f75660SOphir Munk 	errno = ENOTSUP;
93472f75660SOphir Munk 	return NULL;
93572f75660SOphir Munk #endif
93672f75660SOphir Munk }
93772f75660SOphir Munk 
93872f75660SOphir Munk static int
mlx5_glue_dv_modify_flow_action_meter(void * action,struct mlx5dv_dr_flow_meter_attr * attr,uint64_t modify_bits)93972f75660SOphir Munk mlx5_glue_dv_modify_flow_action_meter(void *action,
94072f75660SOphir Munk 				      struct mlx5dv_dr_flow_meter_attr *attr,
94172f75660SOphir Munk 				      uint64_t modify_bits)
94272f75660SOphir Munk {
94372f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER)
94472f75660SOphir Munk 	return mlx5dv_dr_action_modify_flow_meter(action, attr, modify_bits);
94572f75660SOphir Munk #else
94672f75660SOphir Munk 	(void)action;
94772f75660SOphir Munk 	(void)attr;
94872f75660SOphir Munk 	(void)modify_bits;
94972f75660SOphir Munk 	errno = ENOTSUP;
95072f75660SOphir Munk 	return errno;
95172f75660SOphir Munk #endif
95272f75660SOphir Munk }
95372f75660SOphir Munk 
954d4d85aa6SShiri Kuzin static void *
mlx5_glue_dv_create_flow_action_aso(struct mlx5dv_dr_domain * domain,void * aso_obj,uint32_t offset,uint32_t flags,uint8_t return_reg_c)955a2999c7bSDekel Peled mlx5_glue_dv_create_flow_action_aso(struct mlx5dv_dr_domain *domain,
956a2999c7bSDekel Peled 				    void *aso_obj,
957a2999c7bSDekel Peled 				    uint32_t offset,
958a2999c7bSDekel Peled 				    uint32_t flags,
959a2999c7bSDekel Peled 				    uint8_t return_reg_c)
960a2999c7bSDekel Peled {
961a2999c7bSDekel Peled #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_ASO)
962a2999c7bSDekel Peled 	return mlx5dv_dr_action_create_aso(domain, aso_obj, offset,
963a2999c7bSDekel Peled 					   flags, return_reg_c);
964a2999c7bSDekel Peled #else
965a2999c7bSDekel Peled 	(void)domain;
966a2999c7bSDekel Peled 	(void)aso_obj;
967a2999c7bSDekel Peled 	(void)offset;
968a2999c7bSDekel Peled 	(void)flags;
969a2999c7bSDekel Peled 	(void)return_reg_c;
970a2999c7bSDekel Peled 	errno = ENOTSUP;
971a2999c7bSDekel Peled 	return NULL;
972a2999c7bSDekel Peled #endif
973a2999c7bSDekel Peled }
974a2999c7bSDekel Peled 
975a2999c7bSDekel Peled static void *
mlx5_glue_dr_create_flow_action_default_miss(void)976d4d85aa6SShiri Kuzin mlx5_glue_dr_create_flow_action_default_miss(void)
977d4d85aa6SShiri Kuzin {
978d4d85aa6SShiri Kuzin #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS)
979d4d85aa6SShiri Kuzin 	return mlx5dv_dr_action_create_default_miss();
980d4d85aa6SShiri Kuzin #else
981d4d85aa6SShiri Kuzin 	errno = ENOTSUP;
982d4d85aa6SShiri Kuzin 	return NULL;
983d4d85aa6SShiri Kuzin #endif
984d4d85aa6SShiri Kuzin }
985d4d85aa6SShiri Kuzin 
98672f75660SOphir Munk static int
mlx5_glue_dv_destroy_flow(void * flow_id)98772f75660SOphir Munk mlx5_glue_dv_destroy_flow(void *flow_id)
98872f75660SOphir Munk {
98972f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
99072f75660SOphir Munk 	return mlx5dv_dr_rule_destroy(flow_id);
99172f75660SOphir Munk #else
99272f75660SOphir Munk 	return ibv_destroy_flow(flow_id);
99372f75660SOphir Munk #endif
99472f75660SOphir Munk }
99572f75660SOphir Munk 
99672f75660SOphir Munk static int
__mlx5_glue_dv_destroy_flow_matcher(void * matcher)997dfceca7eSAlex Vesker __mlx5_glue_dv_destroy_flow_matcher(void *matcher)
998dfceca7eSAlex Vesker {
999dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT
1000dfceca7eSAlex Vesker 	return mlx5dv_destroy_flow_matcher(matcher);
1001dfceca7eSAlex Vesker #else
1002dfceca7eSAlex Vesker 	(void)matcher;
1003dfceca7eSAlex Vesker 	errno = ENOTSUP;
1004dfceca7eSAlex Vesker 	return errno;
1005dfceca7eSAlex Vesker #endif
1006dfceca7eSAlex Vesker }
1007dfceca7eSAlex Vesker 
1008dfceca7eSAlex Vesker static int
mlx5_glue_dv_destroy_flow_matcher(void * matcher)100972f75660SOphir Munk mlx5_glue_dv_destroy_flow_matcher(void *matcher)
101072f75660SOphir Munk {
101172f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
101272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR
101372f75660SOphir Munk 	return mlx5dv_dr_matcher_destroy(matcher);
101472f75660SOphir Munk #else
1015dfceca7eSAlex Vesker 	return __mlx5_glue_dv_destroy_flow_matcher(matcher);
101672f75660SOphir Munk #endif
101772f75660SOphir Munk #else
101872f75660SOphir Munk 	(void)matcher;
101972f75660SOphir Munk 	errno = ENOTSUP;
102072f75660SOphir Munk 	return errno;
102172f75660SOphir Munk #endif
102272f75660SOphir Munk }
102372f75660SOphir Munk 
102472f75660SOphir Munk static struct ibv_context *
mlx5_glue_dv_open_device(struct ibv_device * device)102572f75660SOphir Munk mlx5_glue_dv_open_device(struct ibv_device *device)
102672f75660SOphir Munk {
102772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
102872f75660SOphir Munk 	return mlx5dv_open_device(device,
102972f75660SOphir Munk 				  &(struct mlx5dv_context_attr){
103072f75660SOphir Munk 					.flags = MLX5DV_CONTEXT_FLAGS_DEVX,
103172f75660SOphir Munk 				  });
103272f75660SOphir Munk #else
103372f75660SOphir Munk 	(void)device;
103472f75660SOphir Munk 	errno = ENOTSUP;
103572f75660SOphir Munk 	return NULL;
103672f75660SOphir Munk #endif
103772f75660SOphir Munk }
103872f75660SOphir Munk 
103972f75660SOphir Munk static struct mlx5dv_devx_obj *
mlx5_glue_devx_obj_create(struct ibv_context * ctx,const void * in,size_t inlen,void * out,size_t outlen)104072f75660SOphir Munk mlx5_glue_devx_obj_create(struct ibv_context *ctx,
104172f75660SOphir Munk 			  const void *in, size_t inlen,
104272f75660SOphir Munk 			  void *out, size_t outlen)
104372f75660SOphir Munk {
104472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
104572f75660SOphir Munk 	return mlx5dv_devx_obj_create(ctx, in, inlen, out, outlen);
104672f75660SOphir Munk #else
104772f75660SOphir Munk 	(void)ctx;
104872f75660SOphir Munk 	(void)in;
104972f75660SOphir Munk 	(void)inlen;
105072f75660SOphir Munk 	(void)out;
105172f75660SOphir Munk 	(void)outlen;
105272f75660SOphir Munk 	errno = ENOTSUP;
105372f75660SOphir Munk 	return NULL;
105472f75660SOphir Munk #endif
105572f75660SOphir Munk }
105672f75660SOphir Munk 
105772f75660SOphir Munk static int
mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj * obj)105872f75660SOphir Munk mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj *obj)
105972f75660SOphir Munk {
106072f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
106172f75660SOphir Munk 	return mlx5dv_devx_obj_destroy(obj);
106272f75660SOphir Munk #else
106372f75660SOphir Munk 	(void)obj;
106472f75660SOphir Munk 	return -ENOTSUP;
106572f75660SOphir Munk #endif
106672f75660SOphir Munk }
106772f75660SOphir Munk 
106872f75660SOphir Munk static int
mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj * obj,const void * in,size_t inlen,void * out,size_t outlen)106972f75660SOphir Munk mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj *obj,
107072f75660SOphir Munk 			 const void *in, size_t inlen,
107172f75660SOphir Munk 			 void *out, size_t outlen)
107272f75660SOphir Munk {
107372f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
107472f75660SOphir Munk 	return mlx5dv_devx_obj_query(obj, in, inlen, out, outlen);
107572f75660SOphir Munk #else
107672f75660SOphir Munk 	(void)obj;
107772f75660SOphir Munk 	(void)in;
107872f75660SOphir Munk 	(void)inlen;
107972f75660SOphir Munk 	(void)out;
108072f75660SOphir Munk 	(void)outlen;
108172f75660SOphir Munk 	return -ENOTSUP;
108272f75660SOphir Munk #endif
108372f75660SOphir Munk }
108472f75660SOphir Munk 
108572f75660SOphir Munk static int
mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj * obj,const void * in,size_t inlen,void * out,size_t outlen)108672f75660SOphir Munk mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj *obj,
108772f75660SOphir Munk 			  const void *in, size_t inlen,
108872f75660SOphir Munk 			  void *out, size_t outlen)
108972f75660SOphir Munk {
109072f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
109172f75660SOphir Munk 	return mlx5dv_devx_obj_modify(obj, in, inlen, out, outlen);
109272f75660SOphir Munk #else
109372f75660SOphir Munk 	(void)obj;
109472f75660SOphir Munk 	(void)in;
109572f75660SOphir Munk 	(void)inlen;
109672f75660SOphir Munk 	(void)out;
109772f75660SOphir Munk 	(void)outlen;
109872f75660SOphir Munk 	return -ENOTSUP;
109972f75660SOphir Munk #endif
110072f75660SOphir Munk }
110172f75660SOphir Munk 
110272f75660SOphir Munk static int
mlx5_glue_devx_general_cmd(struct ibv_context * ctx,const void * in,size_t inlen,void * out,size_t outlen)110372f75660SOphir Munk mlx5_glue_devx_general_cmd(struct ibv_context *ctx,
110472f75660SOphir Munk 			   const void *in, size_t inlen,
110572f75660SOphir Munk 			   void *out, size_t outlen)
110672f75660SOphir Munk {
110772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
110872f75660SOphir Munk 	return mlx5dv_devx_general_cmd(ctx, in, inlen, out, outlen);
110972f75660SOphir Munk #else
111072f75660SOphir Munk 	(void)ctx;
111172f75660SOphir Munk 	(void)in;
111272f75660SOphir Munk 	(void)inlen;
111372f75660SOphir Munk 	(void)out;
111472f75660SOphir Munk 	(void)outlen;
111572f75660SOphir Munk 	return -ENOTSUP;
111672f75660SOphir Munk #endif
111772f75660SOphir Munk }
111872f75660SOphir Munk 
111972f75660SOphir Munk static struct mlx5dv_devx_cmd_comp *
mlx5_glue_devx_create_cmd_comp(struct ibv_context * ctx)112072f75660SOphir Munk mlx5_glue_devx_create_cmd_comp(struct ibv_context *ctx)
112172f75660SOphir Munk {
112272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC
112372f75660SOphir Munk 	return mlx5dv_devx_create_cmd_comp(ctx);
112472f75660SOphir Munk #else
112572f75660SOphir Munk 	(void)ctx;
112672f75660SOphir Munk 	errno = -ENOTSUP;
112772f75660SOphir Munk 	return NULL;
112872f75660SOphir Munk #endif
112972f75660SOphir Munk }
113072f75660SOphir Munk 
113172f75660SOphir Munk static void
mlx5_glue_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp * cmd_comp)113272f75660SOphir Munk mlx5_glue_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp)
113372f75660SOphir Munk {
113472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC
113572f75660SOphir Munk 	mlx5dv_devx_destroy_cmd_comp(cmd_comp);
113672f75660SOphir Munk #else
113772f75660SOphir Munk 	(void)cmd_comp;
113872f75660SOphir Munk 	errno = -ENOTSUP;
113972f75660SOphir Munk #endif
114072f75660SOphir Munk }
114172f75660SOphir Munk 
114272f75660SOphir Munk static int
mlx5_glue_devx_obj_query_async(struct mlx5dv_devx_obj * obj,const void * in,size_t inlen,size_t outlen,uint64_t wr_id,struct mlx5dv_devx_cmd_comp * cmd_comp)114372f75660SOphir Munk mlx5_glue_devx_obj_query_async(struct mlx5dv_devx_obj *obj, const void *in,
114472f75660SOphir Munk 			       size_t inlen, size_t outlen, uint64_t wr_id,
114572f75660SOphir Munk 			       struct mlx5dv_devx_cmd_comp *cmd_comp)
114672f75660SOphir Munk {
114772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC
114872f75660SOphir Munk 	return mlx5dv_devx_obj_query_async(obj, in, inlen, outlen, wr_id,
114972f75660SOphir Munk 					   cmd_comp);
115072f75660SOphir Munk #else
115172f75660SOphir Munk 	(void)obj;
115272f75660SOphir Munk 	(void)in;
115372f75660SOphir Munk 	(void)inlen;
115472f75660SOphir Munk 	(void)outlen;
115572f75660SOphir Munk 	(void)wr_id;
115672f75660SOphir Munk 	(void)cmd_comp;
115772f75660SOphir Munk 	return -ENOTSUP;
115872f75660SOphir Munk #endif
115972f75660SOphir Munk }
116072f75660SOphir Munk 
116172f75660SOphir Munk static int
mlx5_glue_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp * cmd_comp,struct mlx5dv_devx_async_cmd_hdr * cmd_resp,size_t cmd_resp_len)116272f75660SOphir Munk mlx5_glue_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp,
116372f75660SOphir Munk 				  struct mlx5dv_devx_async_cmd_hdr *cmd_resp,
116472f75660SOphir Munk 				  size_t cmd_resp_len)
116572f75660SOphir Munk {
116672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC
116772f75660SOphir Munk 	return mlx5dv_devx_get_async_cmd_comp(cmd_comp, cmd_resp,
116872f75660SOphir Munk 					      cmd_resp_len);
116972f75660SOphir Munk #else
117072f75660SOphir Munk 	(void)cmd_comp;
117172f75660SOphir Munk 	(void)cmd_resp;
117272f75660SOphir Munk 	(void)cmd_resp_len;
117372f75660SOphir Munk 	return -ENOTSUP;
117472f75660SOphir Munk #endif
117572f75660SOphir Munk }
117672f75660SOphir Munk 
117772f75660SOphir Munk static struct mlx5dv_devx_umem *
mlx5_glue_devx_umem_reg(struct ibv_context * context,void * addr,size_t size,uint32_t access)117872f75660SOphir Munk mlx5_glue_devx_umem_reg(struct ibv_context *context, void *addr, size_t size,
117972f75660SOphir Munk 			uint32_t access)
118072f75660SOphir Munk {
118172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
118272f75660SOphir Munk 	return mlx5dv_devx_umem_reg(context, addr, size, access);
118372f75660SOphir Munk #else
118472f75660SOphir Munk 	(void)context;
118572f75660SOphir Munk 	(void)addr;
118672f75660SOphir Munk 	(void)size;
118772f75660SOphir Munk 	(void)access;
118872f75660SOphir Munk 	errno = -ENOTSUP;
118972f75660SOphir Munk 	return NULL;
119072f75660SOphir Munk #endif
119172f75660SOphir Munk }
119272f75660SOphir Munk 
119372f75660SOphir Munk static int
mlx5_glue_devx_umem_dereg(struct mlx5dv_devx_umem * dv_devx_umem)119472f75660SOphir Munk mlx5_glue_devx_umem_dereg(struct mlx5dv_devx_umem *dv_devx_umem)
119572f75660SOphir Munk {
119672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
119772f75660SOphir Munk 	return mlx5dv_devx_umem_dereg(dv_devx_umem);
119872f75660SOphir Munk #else
119972f75660SOphir Munk 	(void)dv_devx_umem;
120072f75660SOphir Munk 	return -ENOTSUP;
120172f75660SOphir Munk #endif
120272f75660SOphir Munk }
120372f75660SOphir Munk 
120472f75660SOphir Munk static int
mlx5_glue_devx_qp_query(struct ibv_qp * qp,const void * in,size_t inlen,void * out,size_t outlen)120572f75660SOphir Munk mlx5_glue_devx_qp_query(struct ibv_qp *qp,
120672f75660SOphir Munk 			const void *in, size_t inlen,
120772f75660SOphir Munk 			void *out, size_t outlen)
120872f75660SOphir Munk {
120972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_QP
121072f75660SOphir Munk 	return mlx5dv_devx_qp_query(qp, in, inlen, out, outlen);
121172f75660SOphir Munk #else
121272f75660SOphir Munk 	(void)qp;
121372f75660SOphir Munk 	(void)in;
121472f75660SOphir Munk 	(void)inlen;
121572f75660SOphir Munk 	(void)out;
121672f75660SOphir Munk 	(void)outlen;
121772f75660SOphir Munk 	errno = ENOTSUP;
121872f75660SOphir Munk 	return errno;
121972f75660SOphir Munk #endif
122072f75660SOphir Munk }
122172f75660SOphir Munk 
122272f75660SOphir Munk static int
mlx5_glue_devx_wq_query(struct ibv_wq * wq,const void * in,size_t inlen,void * out,size_t outlen)122375a9a73dSMatan Azrad mlx5_glue_devx_wq_query(struct ibv_wq *wq, const void *in, size_t inlen,
122475a9a73dSMatan Azrad 			void *out, size_t outlen)
122575a9a73dSMatan Azrad {
122675a9a73dSMatan Azrad #ifdef HAVE_IBV_DEVX_QP
122775a9a73dSMatan Azrad 	return mlx5dv_devx_wq_query(wq, in, inlen, out, outlen);
122875a9a73dSMatan Azrad #else
122975a9a73dSMatan Azrad 	(void)wq;
123075a9a73dSMatan Azrad 	(void)in;
123175a9a73dSMatan Azrad 	(void)inlen;
123275a9a73dSMatan Azrad 	(void)out;
123375a9a73dSMatan Azrad 	(void)outlen;
123475a9a73dSMatan Azrad 	errno = ENOTSUP;
123575a9a73dSMatan Azrad 	return errno;
123675a9a73dSMatan Azrad #endif
123775a9a73dSMatan Azrad }
123875a9a73dSMatan Azrad 
123975a9a73dSMatan Azrad static int
mlx5_glue_devx_port_query(struct ibv_context * ctx,uint32_t port_num,struct mlx5_port_info * info)124072f75660SOphir Munk mlx5_glue_devx_port_query(struct ibv_context *ctx,
124172f75660SOphir Munk 			  uint32_t port_num,
1242d0cf77e8SViacheslav Ovsiienko 			  struct mlx5_port_info *info)
124372f75660SOphir Munk {
1244d0cf77e8SViacheslav Ovsiienko 	int err = 0;
1245d0cf77e8SViacheslav Ovsiienko 
1246d0cf77e8SViacheslav Ovsiienko 	info->query_flags = 0;
1247d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT_V35
1248d0cf77e8SViacheslav Ovsiienko 	/* The DevX port query API is implemented (rdma-core v35 and above). */
1249d0cf77e8SViacheslav Ovsiienko 	struct mlx5_ib_uapi_query_port devx_port;
1250d0cf77e8SViacheslav Ovsiienko 
1251d0cf77e8SViacheslav Ovsiienko 	memset(&devx_port, 0, sizeof(devx_port));
1252d0cf77e8SViacheslav Ovsiienko 	err = mlx5dv_query_port(ctx, port_num, &devx_port);
1253d0cf77e8SViacheslav Ovsiienko 	if (err)
1254d0cf77e8SViacheslav Ovsiienko 		return err;
1255d0cf77e8SViacheslav Ovsiienko 	if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT_REG_C0) {
1256d0cf77e8SViacheslav Ovsiienko 		info->vport_meta_tag = devx_port.reg_c0.value;
1257d0cf77e8SViacheslav Ovsiienko 		info->vport_meta_mask = devx_port.reg_c0.mask;
1258d0cf77e8SViacheslav Ovsiienko 		info->query_flags |= MLX5_PORT_QUERY_REG_C0;
1259d0cf77e8SViacheslav Ovsiienko 	}
1260d0cf77e8SViacheslav Ovsiienko 	if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT) {
1261d0cf77e8SViacheslav Ovsiienko 		info->vport_id = devx_port.vport;
1262d0cf77e8SViacheslav Ovsiienko 		info->query_flags |= MLX5_PORT_QUERY_VPORT;
1263d0cf77e8SViacheslav Ovsiienko 	}
1264dfceca7eSAlex Vesker 	if (devx_port.flags & MLX5DV_QUERY_PORT_ESW_OWNER_VHCA_ID) {
1265dfceca7eSAlex Vesker 		info->esw_owner_vhca_id = devx_port.esw_owner_vhca_id;
1266dfceca7eSAlex Vesker 		info->query_flags |= MLX5_PORT_QUERY_ESW_OWNER_VHCA_ID;
1267dfceca7eSAlex Vesker 	}
126872f75660SOphir Munk #else
1269d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT
1270d0cf77e8SViacheslav Ovsiienko 	/* The legacy DevX port query API is implemented (prior v35). */
1271d0cf77e8SViacheslav Ovsiienko 	struct mlx5dv_devx_port devx_port = {
1272d0cf77e8SViacheslav Ovsiienko 		.comp_mask = MLX5DV_DEVX_PORT_VPORT |
1273dfceca7eSAlex Vesker 			     MLX5DV_DEVX_PORT_MATCH_REG_C_0 |
1274dfceca7eSAlex Vesker 			     MLX5DV_DEVX_PORT_VPORT_VHCA_ID |
1275dfceca7eSAlex Vesker 			     MLX5DV_DEVX_PORT_ESW_OWNER_VHCA_ID
1276d0cf77e8SViacheslav Ovsiienko 	};
1277d0cf77e8SViacheslav Ovsiienko 
1278d0cf77e8SViacheslav Ovsiienko 	err = mlx5dv_query_devx_port(ctx, port_num, &devx_port);
1279d0cf77e8SViacheslav Ovsiienko 	if (err)
1280d0cf77e8SViacheslav Ovsiienko 		return err;
1281d0cf77e8SViacheslav Ovsiienko 	if (devx_port.comp_mask & MLX5DV_DEVX_PORT_MATCH_REG_C_0) {
1282d0cf77e8SViacheslav Ovsiienko 		info->vport_meta_tag = devx_port.reg_c_0.value;
1283d0cf77e8SViacheslav Ovsiienko 		info->vport_meta_mask = devx_port.reg_c_0.mask;
1284d0cf77e8SViacheslav Ovsiienko 		info->query_flags |= MLX5_PORT_QUERY_REG_C0;
1285d0cf77e8SViacheslav Ovsiienko 	}
1286d0cf77e8SViacheslav Ovsiienko 	if (devx_port.comp_mask & MLX5DV_DEVX_PORT_VPORT) {
1287d0cf77e8SViacheslav Ovsiienko 		info->vport_id = devx_port.vport_num;
1288d0cf77e8SViacheslav Ovsiienko 		info->query_flags |= MLX5_PORT_QUERY_VPORT;
1289d0cf77e8SViacheslav Ovsiienko 	}
1290d0cf77e8SViacheslav Ovsiienko #else
1291d0cf77e8SViacheslav Ovsiienko 	RTE_SET_USED(ctx);
1292d0cf77e8SViacheslav Ovsiienko 	RTE_SET_USED(port_num);
1293d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT */
1294d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT_V35 */
1295d0cf77e8SViacheslav Ovsiienko 	return err;
129672f75660SOphir Munk }
129772f75660SOphir Munk 
129872f75660SOphir Munk static int
mlx5_glue_dr_dump_single_rule(FILE * file,void * rule)1299a38d22edSHaifei Luo mlx5_glue_dr_dump_single_rule(FILE *file, void *rule)
1300a38d22edSHaifei Luo {
1301a38d22edSHaifei Luo #ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
1302a38d22edSHaifei Luo 	return mlx5dv_dump_dr_rule(file, rule);
1303a38d22edSHaifei Luo #else
1304a38d22edSHaifei Luo 	RTE_SET_USED(file);
1305a38d22edSHaifei Luo 	RTE_SET_USED(rule);
1306a38d22edSHaifei Luo 	return -ENOTSUP;
1307a38d22edSHaifei Luo #endif
1308a38d22edSHaifei Luo }
1309a38d22edSHaifei Luo 
1310a38d22edSHaifei Luo static int
mlx5_glue_dr_dump_domain(FILE * file,void * domain)131172f75660SOphir Munk mlx5_glue_dr_dump_domain(FILE *file, void *domain)
131272f75660SOphir Munk {
131372f75660SOphir Munk #ifdef HAVE_MLX5_DR_FLOW_DUMP
131472f75660SOphir Munk 	return mlx5dv_dump_dr_domain(file, domain);
131572f75660SOphir Munk #else
131672f75660SOphir Munk 	RTE_SET_USED(file);
131772f75660SOphir Munk 	RTE_SET_USED(domain);
131872f75660SOphir Munk 	return -ENOTSUP;
131972f75660SOphir Munk #endif
132072f75660SOphir Munk }
132172f75660SOphir Munk 
1322a3def854SJiawei Wang static void *
mlx5_glue_dr_create_flow_action_sampler(struct mlx5dv_dr_flow_sampler_attr * attr)13234d23dd35SJiawei Wang mlx5_glue_dr_create_flow_action_sampler
13244d23dd35SJiawei Wang 			(struct mlx5dv_dr_flow_sampler_attr *attr)
1325a3def854SJiawei Wang {
1326a3def854SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE
1327a3def854SJiawei Wang 	return mlx5dv_dr_action_create_flow_sampler(attr);
1328a3def854SJiawei Wang #else
1329a3def854SJiawei Wang 	(void)attr;
1330a3def854SJiawei Wang 	errno = ENOTSUP;
1331a3def854SJiawei Wang 	return NULL;
1332a3def854SJiawei Wang #endif
1333a3def854SJiawei Wang }
1334a3def854SJiawei Wang 
13354d23dd35SJiawei Wang static void *
mlx5_glue_dr_action_create_dest_array(void * domain,size_t num_dest,struct mlx5dv_dr_action_dest_attr * dests[])13364d23dd35SJiawei Wang mlx5_glue_dr_action_create_dest_array
13374d23dd35SJiawei Wang 			(void *domain,
13384d23dd35SJiawei Wang 			 size_t num_dest,
13394d23dd35SJiawei Wang 			 struct mlx5dv_dr_action_dest_attr *dests[])
13404d23dd35SJiawei Wang {
13414d23dd35SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY
13424d23dd35SJiawei Wang 	return mlx5dv_dr_action_create_dest_array
13434d23dd35SJiawei Wang 				(domain,
13444d23dd35SJiawei Wang 				num_dest,
13454d23dd35SJiawei Wang 				dests);
13464d23dd35SJiawei Wang #else
13474d23dd35SJiawei Wang 	(void)domain;
13484d23dd35SJiawei Wang 	(void)num_dest;
13494d23dd35SJiawei Wang 	(void)dests;
13504d23dd35SJiawei Wang 	errno = ENOTSUP;
13514d23dd35SJiawei Wang 	return NULL;
13524d23dd35SJiawei Wang #endif
13534d23dd35SJiawei Wang }
13544d23dd35SJiawei Wang 
135572f75660SOphir Munk static int
mlx5_glue_devx_query_eqn(struct ibv_context * ctx,uint32_t cpus,uint32_t * eqn)135672f75660SOphir Munk mlx5_glue_devx_query_eqn(struct ibv_context *ctx, uint32_t cpus,
135772f75660SOphir Munk 			 uint32_t *eqn)
135872f75660SOphir Munk {
135972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
136072f75660SOphir Munk 	return mlx5dv_devx_query_eqn(ctx, cpus, eqn);
136172f75660SOphir Munk #else
136272f75660SOphir Munk 	(void)ctx;
136372f75660SOphir Munk 	(void)cpus;
136472f75660SOphir Munk 	(void)eqn;
136572f75660SOphir Munk 	return -ENOTSUP;
136672f75660SOphir Munk #endif
136772f75660SOphir Munk }
136872f75660SOphir Munk 
136972f75660SOphir Munk static struct mlx5dv_devx_event_channel *
mlx5_glue_devx_create_event_channel(struct ibv_context * ctx,int flags)137072f75660SOphir Munk mlx5_glue_devx_create_event_channel(struct ibv_context *ctx, int flags)
137172f75660SOphir Munk {
137272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT
137372f75660SOphir Munk 	return mlx5dv_devx_create_event_channel(ctx, flags);
137472f75660SOphir Munk #else
137572f75660SOphir Munk 	(void)ctx;
137672f75660SOphir Munk 	(void)flags;
137772f75660SOphir Munk 	errno = ENOTSUP;
137872f75660SOphir Munk 	return NULL;
137972f75660SOphir Munk #endif
138072f75660SOphir Munk }
138172f75660SOphir Munk 
138272f75660SOphir Munk static void
mlx5_glue_devx_destroy_event_channel(struct mlx5dv_devx_event_channel * eventc)138372f75660SOphir Munk mlx5_glue_devx_destroy_event_channel(struct mlx5dv_devx_event_channel *eventc)
138472f75660SOphir Munk {
138572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT
138672f75660SOphir Munk 	mlx5dv_devx_destroy_event_channel(eventc);
138772f75660SOphir Munk #else
138872f75660SOphir Munk 	(void)eventc;
138972f75660SOphir Munk #endif
139072f75660SOphir Munk }
139172f75660SOphir Munk 
139272f75660SOphir Munk static int
mlx5_glue_devx_subscribe_devx_event(struct mlx5dv_devx_event_channel * eventc,struct mlx5dv_devx_obj * obj,uint16_t events_sz,uint16_t events_num[],uint64_t cookie)139372f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event(struct mlx5dv_devx_event_channel *eventc,
139472f75660SOphir Munk 				    struct mlx5dv_devx_obj *obj,
139572f75660SOphir Munk 				    uint16_t events_sz, uint16_t events_num[],
139672f75660SOphir Munk 				    uint64_t cookie)
139772f75660SOphir Munk {
139872f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT
139972f75660SOphir Munk 	return mlx5dv_devx_subscribe_devx_event(eventc, obj, events_sz,
140072f75660SOphir Munk 						events_num, cookie);
140172f75660SOphir Munk #else
140272f75660SOphir Munk 	(void)eventc;
140372f75660SOphir Munk 	(void)obj;
140472f75660SOphir Munk 	(void)events_sz;
140572f75660SOphir Munk 	(void)events_num;
140672f75660SOphir Munk 	(void)cookie;
140772f75660SOphir Munk 	return -ENOTSUP;
140872f75660SOphir Munk #endif
140972f75660SOphir Munk }
141072f75660SOphir Munk 
141172f75660SOphir Munk static int
mlx5_glue_devx_subscribe_devx_event_fd(struct mlx5dv_devx_event_channel * eventc,int fd,struct mlx5dv_devx_obj * obj,uint16_t event_num)141272f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event_fd(struct mlx5dv_devx_event_channel *eventc,
141372f75660SOphir Munk 				       int fd, struct mlx5dv_devx_obj *obj,
141472f75660SOphir Munk 				       uint16_t event_num)
141572f75660SOphir Munk {
141672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT
141772f75660SOphir Munk 	return mlx5dv_devx_subscribe_devx_event_fd(eventc, fd, obj, event_num);
141872f75660SOphir Munk #else
141972f75660SOphir Munk 	(void)eventc;
142072f75660SOphir Munk 	(void)fd;
142172f75660SOphir Munk 	(void)obj;
142272f75660SOphir Munk 	(void)event_num;
142372f75660SOphir Munk 	return -ENOTSUP;
142472f75660SOphir Munk #endif
142572f75660SOphir Munk }
142672f75660SOphir Munk 
142772f75660SOphir Munk static ssize_t
mlx5_glue_devx_get_event(struct mlx5dv_devx_event_channel * eventc,struct mlx5dv_devx_async_event_hdr * event_data,size_t event_resp_len)142872f75660SOphir Munk mlx5_glue_devx_get_event(struct mlx5dv_devx_event_channel *eventc,
142972f75660SOphir Munk 			 struct mlx5dv_devx_async_event_hdr *event_data,
143072f75660SOphir Munk 			 size_t event_resp_len)
143172f75660SOphir Munk {
143272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT
143372f75660SOphir Munk 	return mlx5dv_devx_get_event(eventc, event_data, event_resp_len);
143472f75660SOphir Munk #else
143572f75660SOphir Munk 	(void)eventc;
143672f75660SOphir Munk 	(void)event_data;
143772f75660SOphir Munk 	(void)event_resp_len;
143872f75660SOphir Munk 	errno = ENOTSUP;
143972f75660SOphir Munk 	return -1;
144072f75660SOphir Munk #endif
144172f75660SOphir Munk }
144272f75660SOphir Munk 
144372f75660SOphir Munk static struct mlx5dv_devx_uar *
mlx5_glue_devx_alloc_uar(struct ibv_context * context,uint32_t flags)144472f75660SOphir Munk mlx5_glue_devx_alloc_uar(struct ibv_context *context, uint32_t flags)
144572f75660SOphir Munk {
144672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
144772f75660SOphir Munk 	return mlx5dv_devx_alloc_uar(context, flags);
144872f75660SOphir Munk #else
144972f75660SOphir Munk 	(void)context;
145072f75660SOphir Munk 	(void)flags;
145172f75660SOphir Munk 	errno = ENOTSUP;
145272f75660SOphir Munk 	return NULL;
145372f75660SOphir Munk #endif
145472f75660SOphir Munk }
145572f75660SOphir Munk 
145672f75660SOphir Munk static void
mlx5_glue_devx_free_uar(struct mlx5dv_devx_uar * devx_uar)145772f75660SOphir Munk mlx5_glue_devx_free_uar(struct mlx5dv_devx_uar *devx_uar)
145872f75660SOphir Munk {
145972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ
146072f75660SOphir Munk 	mlx5dv_devx_free_uar(devx_uar);
146172f75660SOphir Munk #else
146272f75660SOphir Munk 	(void)devx_uar;
146372f75660SOphir Munk #endif
146472f75660SOphir Munk }
146572f75660SOphir Munk 
146672f75660SOphir Munk static struct mlx5dv_var *
mlx5_glue_dv_alloc_var(struct ibv_context * context,uint32_t flags)146772f75660SOphir Munk mlx5_glue_dv_alloc_var(struct ibv_context *context, uint32_t flags)
146872f75660SOphir Munk {
146972f75660SOphir Munk #ifdef HAVE_IBV_VAR
147072f75660SOphir Munk 	return mlx5dv_alloc_var(context, flags);
147172f75660SOphir Munk #else
147272f75660SOphir Munk 	(void)context;
147372f75660SOphir Munk 	(void)flags;
147472f75660SOphir Munk 	errno = ENOTSUP;
147572f75660SOphir Munk 	return NULL;
147672f75660SOphir Munk #endif
147772f75660SOphir Munk }
147872f75660SOphir Munk 
147972f75660SOphir Munk static void
mlx5_glue_dv_free_var(struct mlx5dv_var * var)148072f75660SOphir Munk mlx5_glue_dv_free_var(struct mlx5dv_var *var)
148172f75660SOphir Munk {
148272f75660SOphir Munk #ifdef HAVE_IBV_VAR
148372f75660SOphir Munk 	mlx5dv_free_var(var);
148472f75660SOphir Munk #else
148572f75660SOphir Munk 	(void)var;
148672f75660SOphir Munk 	errno = ENOTSUP;
148772f75660SOphir Munk #endif
148872f75660SOphir Munk }
148972f75660SOphir Munk 
1490bebee850SSuanming Mou static void
mlx5_glue_dr_reclaim_domain_memory(void * domain,uint32_t enable)1491bebee850SSuanming Mou mlx5_glue_dr_reclaim_domain_memory(void *domain, uint32_t enable)
1492bebee850SSuanming Mou {
1493bebee850SSuanming Mou #ifdef HAVE_MLX5DV_DR_MEM_RECLAIM
1494bebee850SSuanming Mou 	mlx5dv_dr_domain_set_reclaim_device_memory(domain, enable);
1495bebee850SSuanming Mou #else
1496bebee850SSuanming Mou 	(void)(enable);
1497bebee850SSuanming Mou 	(void)(domain);
1498bebee850SSuanming Mou #endif
1499bebee850SSuanming Mou }
1500bebee850SSuanming Mou 
150179a7e409SViacheslav Ovsiienko static struct mlx5dv_pp *
mlx5_glue_dv_alloc_pp(struct ibv_context * context,size_t pp_context_sz,const void * pp_context,uint32_t flags)150279a7e409SViacheslav Ovsiienko mlx5_glue_dv_alloc_pp(struct ibv_context *context,
150379a7e409SViacheslav Ovsiienko 		      size_t pp_context_sz,
150479a7e409SViacheslav Ovsiienko 		      const void *pp_context,
150579a7e409SViacheslav Ovsiienko 		      uint32_t flags)
150679a7e409SViacheslav Ovsiienko {
150779a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC
150879a7e409SViacheslav Ovsiienko 	return mlx5dv_pp_alloc(context, pp_context_sz, pp_context, flags);
150979a7e409SViacheslav Ovsiienko #else
151079a7e409SViacheslav Ovsiienko 	RTE_SET_USED(context);
151179a7e409SViacheslav Ovsiienko 	RTE_SET_USED(pp_context_sz);
151279a7e409SViacheslav Ovsiienko 	RTE_SET_USED(pp_context);
151379a7e409SViacheslav Ovsiienko 	RTE_SET_USED(flags);
151479a7e409SViacheslav Ovsiienko 	errno = ENOTSUP;
151579a7e409SViacheslav Ovsiienko 	return NULL;
151679a7e409SViacheslav Ovsiienko #endif
151779a7e409SViacheslav Ovsiienko }
151879a7e409SViacheslav Ovsiienko 
151979a7e409SViacheslav Ovsiienko static void
mlx5_glue_dr_allow_duplicate_rules(void * domain,uint32_t allow)1520e39226bdSJiawei Wang mlx5_glue_dr_allow_duplicate_rules(void *domain, uint32_t allow)
1521e39226bdSJiawei Wang {
1522e39226bdSJiawei Wang #ifdef HAVE_MLX5_DR_ALLOW_DUPLICATE
1523e39226bdSJiawei Wang 	mlx5dv_dr_domain_allow_duplicate_rules(domain, allow);
1524e39226bdSJiawei Wang #else
1525e39226bdSJiawei Wang 	(void)(allow);
1526e39226bdSJiawei Wang 	(void)(domain);
1527e39226bdSJiawei Wang #endif
1528e39226bdSJiawei Wang }
1529e39226bdSJiawei Wang 
1530e39226bdSJiawei Wang static void
mlx5_glue_dv_free_pp(struct mlx5dv_pp * pp)153179a7e409SViacheslav Ovsiienko mlx5_glue_dv_free_pp(struct mlx5dv_pp *pp)
153279a7e409SViacheslav Ovsiienko {
153379a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC
153479a7e409SViacheslav Ovsiienko 	mlx5dv_pp_free(pp);
153579a7e409SViacheslav Ovsiienko #else
153679a7e409SViacheslav Ovsiienko 	RTE_SET_USED(pp);
153779a7e409SViacheslav Ovsiienko #endif
153879a7e409SViacheslav Ovsiienko }
153979a7e409SViacheslav Ovsiienko 
154080f998daSMichael Savisko static void *
mlx5_glue_dr_create_flow_action_send_to_kernel(void * tbl,uint16_t priority)154180f998daSMichael Savisko mlx5_glue_dr_create_flow_action_send_to_kernel(void *tbl, uint16_t priority)
154280f998daSMichael Savisko {
154380f998daSMichael Savisko #ifdef HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE
154480f998daSMichael Savisko 	struct mlx5dv_dr_table *table = (struct mlx5dv_dr_table *)tbl;
154580f998daSMichael Savisko 
154680f998daSMichael Savisko 	return mlx5dv_dr_action_create_dest_root_table(table, priority);
154780f998daSMichael Savisko #else
154880f998daSMichael Savisko 	RTE_SET_USED(tbl);
154980f998daSMichael Savisko 	RTE_SET_USED(priority);
155080f998daSMichael Savisko 	errno = ENOTSUP;
155180f998daSMichael Savisko 	return NULL;
155280f998daSMichael Savisko #endif
155380f998daSMichael Savisko }
155480f998daSMichael Savisko 
1555be8476ddSHamdan Igbaria static struct mlx5dv_steering_anchor *
mlx5_glue_dv_create_steering_anchor(struct ibv_context * context,struct mlx5dv_steering_anchor_attr * attr)1556be8476ddSHamdan Igbaria mlx5_glue_dv_create_steering_anchor(struct ibv_context *context,
1557be8476ddSHamdan Igbaria 				    struct mlx5dv_steering_anchor_attr *attr)
1558be8476ddSHamdan Igbaria {
1559be8476ddSHamdan Igbaria #ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR
1560be8476ddSHamdan Igbaria 	return mlx5dv_create_steering_anchor(context, attr);
1561be8476ddSHamdan Igbaria #else
1562be8476ddSHamdan Igbaria 	(void)context;
1563be8476ddSHamdan Igbaria 	(void)attr;
1564be8476ddSHamdan Igbaria 	errno = ENOTSUP;
1565be8476ddSHamdan Igbaria 	return NULL;
1566be8476ddSHamdan Igbaria #endif
1567be8476ddSHamdan Igbaria }
1568be8476ddSHamdan Igbaria 
1569be8476ddSHamdan Igbaria static int
mlx5_glue_dv_destroy_steering_anchor(struct mlx5dv_steering_anchor * sa)1570be8476ddSHamdan Igbaria mlx5_glue_dv_destroy_steering_anchor(struct mlx5dv_steering_anchor *sa)
1571be8476ddSHamdan Igbaria {
1572be8476ddSHamdan Igbaria #ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR
1573be8476ddSHamdan Igbaria 	return mlx5dv_destroy_steering_anchor(sa);
1574be8476ddSHamdan Igbaria #else
1575be8476ddSHamdan Igbaria 	(void)sa;
1576be8476ddSHamdan Igbaria 	errno = ENOTSUP;
1577be8476ddSHamdan Igbaria 	return -ENOTSUP;
1578be8476ddSHamdan Igbaria #endif
1579be8476ddSHamdan Igbaria }
1580be8476ddSHamdan Igbaria 
1581*27595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE)
158272f75660SOphir Munk const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) {
158372f75660SOphir Munk 	.version = MLX5_GLUE_VERSION,
158472f75660SOphir Munk 	.fork_init = mlx5_glue_fork_init,
158572f75660SOphir Munk 	.alloc_pd = mlx5_glue_alloc_pd,
158672f75660SOphir Munk 	.dealloc_pd = mlx5_glue_dealloc_pd,
15870777921aSMichael Baum 	.import_pd = mlx5_glue_import_pd,
15880777921aSMichael Baum 	.unimport_pd = mlx5_glue_unimport_pd,
158972f75660SOphir Munk 	.get_device_list = mlx5_glue_get_device_list,
159072f75660SOphir Munk 	.free_device_list = mlx5_glue_free_device_list,
159172f75660SOphir Munk 	.open_device = mlx5_glue_open_device,
15920777921aSMichael Baum 	.import_device = mlx5_glue_import_device,
159372f75660SOphir Munk 	.close_device = mlx5_glue_close_device,
159472f75660SOphir Munk 	.query_device = mlx5_glue_query_device,
159572f75660SOphir Munk 	.query_device_ex = mlx5_glue_query_device_ex,
1596dfceca7eSAlex Vesker 	.get_device_name = mlx5_glue_get_device_name,
159772f75660SOphir Munk 	.query_rt_values_ex = mlx5_glue_query_rt_values_ex,
159872f75660SOphir Munk 	.query_port = mlx5_glue_query_port,
159972f75660SOphir Munk 	.create_comp_channel = mlx5_glue_create_comp_channel,
160072f75660SOphir Munk 	.destroy_comp_channel = mlx5_glue_destroy_comp_channel,
160172f75660SOphir Munk 	.create_cq = mlx5_glue_create_cq,
160272f75660SOphir Munk 	.destroy_cq = mlx5_glue_destroy_cq,
160372f75660SOphir Munk 	.get_cq_event = mlx5_glue_get_cq_event,
160472f75660SOphir Munk 	.ack_cq_events = mlx5_glue_ack_cq_events,
160572f75660SOphir Munk 	.create_rwq_ind_table = mlx5_glue_create_rwq_ind_table,
160672f75660SOphir Munk 	.destroy_rwq_ind_table = mlx5_glue_destroy_rwq_ind_table,
160772f75660SOphir Munk 	.create_wq = mlx5_glue_create_wq,
160872f75660SOphir Munk 	.destroy_wq = mlx5_glue_destroy_wq,
160972f75660SOphir Munk 	.modify_wq = mlx5_glue_modify_wq,
161072f75660SOphir Munk 	.create_flow = mlx5_glue_create_flow,
161172f75660SOphir Munk 	.destroy_flow = mlx5_glue_destroy_flow,
161272f75660SOphir Munk 	.destroy_flow_action = mlx5_glue_destroy_flow_action,
161372f75660SOphir Munk 	.create_qp = mlx5_glue_create_qp,
161472f75660SOphir Munk 	.create_qp_ex = mlx5_glue_create_qp_ex,
161572f75660SOphir Munk 	.destroy_qp = mlx5_glue_destroy_qp,
161672f75660SOphir Munk 	.modify_qp = mlx5_glue_modify_qp,
161772f75660SOphir Munk 	.reg_mr = mlx5_glue_reg_mr,
16186ebd062eSMichael Baum 	.reg_mr_iova = mlx5_glue_reg_mr_iova,
161972f75660SOphir Munk 	.alloc_null_mr = mlx5_glue_alloc_null_mr,
162072f75660SOphir Munk 	.dereg_mr = mlx5_glue_dereg_mr,
162172f75660SOphir Munk 	.create_counter_set = mlx5_glue_create_counter_set,
162272f75660SOphir Munk 	.destroy_counter_set = mlx5_glue_destroy_counter_set,
162372f75660SOphir Munk 	.describe_counter_set = mlx5_glue_describe_counter_set,
162472f75660SOphir Munk 	.query_counter_set = mlx5_glue_query_counter_set,
162572f75660SOphir Munk 	.create_counters = mlx5_glue_create_counters,
162672f75660SOphir Munk 	.destroy_counters = mlx5_glue_destroy_counters,
162772f75660SOphir Munk 	.attach_counters = mlx5_glue_attach_counters,
162872f75660SOphir Munk 	.query_counters = mlx5_glue_query_counters,
162972f75660SOphir Munk 	.ack_async_event = mlx5_glue_ack_async_event,
163072f75660SOphir Munk 	.get_async_event = mlx5_glue_get_async_event,
163172f75660SOphir Munk 	.port_state_str = mlx5_glue_port_state_str,
163272f75660SOphir Munk 	.cq_ex_to_cq = mlx5_glue_cq_ex_to_cq,
163372f75660SOphir Munk 	.dr_create_flow_action_dest_flow_tbl =
163472f75660SOphir Munk 		mlx5_glue_dr_create_flow_action_dest_flow_tbl,
163572f75660SOphir Munk 	.dr_create_flow_action_dest_port =
163672f75660SOphir Munk 		mlx5_glue_dr_create_flow_action_dest_port,
163772f75660SOphir Munk 	.dr_create_flow_action_drop =
163872f75660SOphir Munk 		mlx5_glue_dr_create_flow_action_drop,
163972f75660SOphir Munk 	.dr_create_flow_action_push_vlan =
164072f75660SOphir Munk 		mlx5_glue_dr_create_flow_action_push_vlan,
164172f75660SOphir Munk 	.dr_create_flow_action_pop_vlan =
164272f75660SOphir Munk 		mlx5_glue_dr_create_flow_action_pop_vlan,
164372f75660SOphir Munk 	.dr_create_flow_tbl = mlx5_glue_dr_create_flow_tbl,
164472f75660SOphir Munk 	.dr_destroy_flow_tbl = mlx5_glue_dr_destroy_flow_tbl,
164572f75660SOphir Munk 	.dr_create_domain = mlx5_glue_dr_create_domain,
164672f75660SOphir Munk 	.dr_destroy_domain = mlx5_glue_dr_destroy_domain,
16476e0cd74aSBing Zhao 	.dr_sync_domain = mlx5_glue_dr_sync_domain,
164872f75660SOphir Munk 	.dv_create_cq = mlx5_glue_dv_create_cq,
164972f75660SOphir Munk 	.dv_create_wq = mlx5_glue_dv_create_wq,
165072f75660SOphir Munk 	.dv_query_device = mlx5_glue_dv_query_device,
165172f75660SOphir Munk 	.dv_set_context_attr = mlx5_glue_dv_set_context_attr,
165272f75660SOphir Munk 	.dv_init_obj = mlx5_glue_dv_init_obj,
165372f75660SOphir Munk 	.dv_create_qp = mlx5_glue_dv_create_qp,
165472f75660SOphir Munk 	.dv_create_flow_matcher = mlx5_glue_dv_create_flow_matcher,
1655dfceca7eSAlex Vesker 	.dv_create_flow_matcher_root = __mlx5_glue_dv_create_flow_matcher,
165672f75660SOphir Munk 	.dv_create_flow = mlx5_glue_dv_create_flow,
1657dfceca7eSAlex Vesker 	.dv_create_flow_root = __mlx5_glue_dv_create_flow,
165872f75660SOphir Munk 	.dv_create_flow_action_counter =
165972f75660SOphir Munk 		mlx5_glue_dv_create_flow_action_counter,
166072f75660SOphir Munk 	.dv_create_flow_action_dest_ibv_qp =
166172f75660SOphir Munk 		mlx5_glue_dv_create_flow_action_dest_ibv_qp,
166272f75660SOphir Munk 	.dv_create_flow_action_dest_devx_tir =
166372f75660SOphir Munk 		mlx5_glue_dv_create_flow_action_dest_devx_tir,
166472f75660SOphir Munk 	.dv_create_flow_action_modify_header =
166572f75660SOphir Munk 		mlx5_glue_dv_create_flow_action_modify_header,
1666dfceca7eSAlex Vesker 	.dv_create_flow_action_modify_header_root =
1667dfceca7eSAlex Vesker 		__mlx5_glue_dv_create_flow_action_modify_header,
166872f75660SOphir Munk 	.dv_create_flow_action_packet_reformat =
166972f75660SOphir Munk 		mlx5_glue_dv_create_flow_action_packet_reformat,
1670dfceca7eSAlex Vesker 	.dv_create_flow_action_packet_reformat_root =
1671dfceca7eSAlex Vesker 		__mlx5_glue_dv_create_flow_action_packet_reformat,
167272f75660SOphir Munk 	.dv_create_flow_action_tag =  mlx5_glue_dv_create_flow_action_tag,
167372f75660SOphir Munk 	.dv_create_flow_action_meter = mlx5_glue_dv_create_flow_action_meter,
167472f75660SOphir Munk 	.dv_modify_flow_action_meter = mlx5_glue_dv_modify_flow_action_meter,
1675a2999c7bSDekel Peled 	.dv_create_flow_action_aso = mlx5_glue_dv_create_flow_action_aso,
1676d4d85aa6SShiri Kuzin 	.dr_create_flow_action_default_miss =
1677d4d85aa6SShiri Kuzin 		mlx5_glue_dr_create_flow_action_default_miss,
167872f75660SOphir Munk 	.dv_destroy_flow = mlx5_glue_dv_destroy_flow,
167972f75660SOphir Munk 	.dv_destroy_flow_matcher = mlx5_glue_dv_destroy_flow_matcher,
1680dfceca7eSAlex Vesker 	.dv_destroy_flow_matcher_root = __mlx5_glue_dv_destroy_flow_matcher,
168172f75660SOphir Munk 	.dv_open_device = mlx5_glue_dv_open_device,
168272f75660SOphir Munk 	.devx_obj_create = mlx5_glue_devx_obj_create,
168372f75660SOphir Munk 	.devx_obj_destroy = mlx5_glue_devx_obj_destroy,
168472f75660SOphir Munk 	.devx_obj_query = mlx5_glue_devx_obj_query,
168572f75660SOphir Munk 	.devx_obj_modify = mlx5_glue_devx_obj_modify,
168672f75660SOphir Munk 	.devx_general_cmd = mlx5_glue_devx_general_cmd,
168772f75660SOphir Munk 	.devx_create_cmd_comp = mlx5_glue_devx_create_cmd_comp,
168872f75660SOphir Munk 	.devx_destroy_cmd_comp = mlx5_glue_devx_destroy_cmd_comp,
168972f75660SOphir Munk 	.devx_obj_query_async = mlx5_glue_devx_obj_query_async,
169072f75660SOphir Munk 	.devx_get_async_cmd_comp = mlx5_glue_devx_get_async_cmd_comp,
169172f75660SOphir Munk 	.devx_umem_reg = mlx5_glue_devx_umem_reg,
169272f75660SOphir Munk 	.devx_umem_dereg = mlx5_glue_devx_umem_dereg,
169372f75660SOphir Munk 	.devx_qp_query = mlx5_glue_devx_qp_query,
169475a9a73dSMatan Azrad 	.devx_wq_query = mlx5_glue_devx_wq_query,
169572f75660SOphir Munk 	.devx_port_query = mlx5_glue_devx_port_query,
169672f75660SOphir Munk 	.dr_dump_domain = mlx5_glue_dr_dump_domain,
1697a38d22edSHaifei Luo 	.dr_dump_rule = mlx5_glue_dr_dump_single_rule,
1698bebee850SSuanming Mou 	.dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory,
1699a3def854SJiawei Wang 	.dr_create_flow_action_sampler =
1700a3def854SJiawei Wang 		mlx5_glue_dr_create_flow_action_sampler,
17014d23dd35SJiawei Wang 	.dr_create_flow_action_dest_array =
17024d23dd35SJiawei Wang 		mlx5_glue_dr_action_create_dest_array,
1703e39226bdSJiawei Wang 	.dr_allow_duplicate_rules = mlx5_glue_dr_allow_duplicate_rules,
170472f75660SOphir Munk 	.devx_query_eqn = mlx5_glue_devx_query_eqn,
170572f75660SOphir Munk 	.devx_create_event_channel = mlx5_glue_devx_create_event_channel,
170672f75660SOphir Munk 	.devx_destroy_event_channel = mlx5_glue_devx_destroy_event_channel,
170772f75660SOphir Munk 	.devx_subscribe_devx_event = mlx5_glue_devx_subscribe_devx_event,
170872f75660SOphir Munk 	.devx_subscribe_devx_event_fd = mlx5_glue_devx_subscribe_devx_event_fd,
170972f75660SOphir Munk 	.devx_get_event = mlx5_glue_devx_get_event,
171072f75660SOphir Munk 	.devx_alloc_uar = mlx5_glue_devx_alloc_uar,
171172f75660SOphir Munk 	.devx_free_uar = mlx5_glue_devx_free_uar,
171272f75660SOphir Munk 	.dv_alloc_var = mlx5_glue_dv_alloc_var,
171372f75660SOphir Munk 	.dv_free_var = mlx5_glue_dv_free_var,
171479a7e409SViacheslav Ovsiienko 	.dv_alloc_pp = mlx5_glue_dv_alloc_pp,
171579a7e409SViacheslav Ovsiienko 	.dv_free_pp = mlx5_glue_dv_free_pp,
171680f998daSMichael Savisko 	.dr_create_flow_action_send_to_kernel =
171780f998daSMichael Savisko 		mlx5_glue_dr_create_flow_action_send_to_kernel,
1718be8476ddSHamdan Igbaria 	.create_steering_anchor = mlx5_glue_dv_create_steering_anchor,
1719be8476ddSHamdan Igbaria 	.destroy_steering_anchor = mlx5_glue_dv_destroy_steering_anchor,
172072f75660SOphir Munk };
1721