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