xref: /dpdk/drivers/common/mlx5/linux/mlx5_glue.h (revision a2999c7bfe395708a6a68ebb6f3199af7d25cffe)
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 #ifndef MLX5_GLUE_H_
772f75660SOphir Munk #define MLX5_GLUE_H_
872f75660SOphir Munk 
972f75660SOphir Munk #include <stddef.h>
1072f75660SOphir Munk #include <stdint.h>
1172f75660SOphir Munk /* Verbs headers do not support -pedantic. */
1272f75660SOphir Munk #ifdef PEDANTIC
1372f75660SOphir Munk #pragma GCC diagnostic ignored "-Wpedantic"
1472f75660SOphir Munk #endif
1572f75660SOphir Munk #include <infiniband/mlx5dv.h>
1672f75660SOphir Munk #include <infiniband/verbs.h>
1772f75660SOphir Munk #ifdef PEDANTIC
1872f75660SOphir Munk #pragma GCC diagnostic error "-Wpedantic"
1972f75660SOphir Munk #endif
2072f75660SOphir Munk 
2172f75660SOphir Munk #include <rte_byteorder.h>
2272f75660SOphir Munk 
2372f75660SOphir Munk #include "mlx5_autoconf.h"
2472f75660SOphir Munk 
2572f75660SOphir Munk #ifndef MLX5_GLUE_VERSION
2672f75660SOphir Munk #define MLX5_GLUE_VERSION ""
2772f75660SOphir Munk #endif
2872f75660SOphir Munk 
2972f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
3072f75660SOphir Munk struct ibv_counter_set;
3172f75660SOphir Munk struct ibv_counter_set_data;
3272f75660SOphir Munk struct ibv_counter_set_description;
3372f75660SOphir Munk struct ibv_counter_set_init_attr;
3472f75660SOphir Munk struct ibv_query_counter_set_attr;
3572f75660SOphir Munk #endif
3672f75660SOphir Munk 
3772f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
3872f75660SOphir Munk struct ibv_counters;
3972f75660SOphir Munk struct ibv_counters_init_attr;
4072f75660SOphir Munk struct ibv_counter_attach_attr;
4172f75660SOphir Munk #endif
4272f75660SOphir Munk 
4372f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
4472f75660SOphir Munk struct mlx5dv_qp_init_attr;
4572f75660SOphir Munk #endif
4672f75660SOphir Munk 
4772f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT
4872f75660SOphir Munk struct mlx5dv_wq_init_attr;
4972f75660SOphir Munk #endif
5072f75660SOphir Munk 
5172f75660SOphir Munk #ifndef HAVE_IBV_FLOW_DV_SUPPORT
5272f75660SOphir Munk struct mlx5dv_flow_matcher;
5372f75660SOphir Munk struct mlx5dv_flow_matcher_attr;
5472f75660SOphir Munk struct mlx5dv_flow_action_attr;
5572f75660SOphir Munk struct mlx5dv_flow_match_parameters;
5672f75660SOphir Munk struct mlx5dv_dr_flow_meter_attr;
5772f75660SOphir Munk struct ibv_flow_action;
5872f75660SOphir Munk enum mlx5dv_flow_action_packet_reformat_type { packet_reformat_type = 0, };
5972f75660SOphir Munk enum mlx5dv_flow_table_type { flow_table_type = 0, };
6072f75660SOphir Munk #endif
6172f75660SOphir Munk 
6272f75660SOphir Munk #ifndef HAVE_IBV_FLOW_DEVX_COUNTERS
6372f75660SOphir Munk #define MLX5DV_FLOW_ACTION_COUNTERS_DEVX 0
6472f75660SOphir Munk #endif
6572f75660SOphir Munk 
6672f75660SOphir Munk #ifndef HAVE_IBV_DEVX_OBJ
6772f75660SOphir Munk struct mlx5dv_devx_obj;
6872f75660SOphir Munk struct mlx5dv_devx_umem { uint32_t umem_id; };
6972f75660SOphir Munk struct mlx5dv_devx_uar { void *reg_addr; void *base_addr; uint32_t page_id; };
7072f75660SOphir Munk #endif
7172f75660SOphir Munk 
7272f75660SOphir Munk #ifndef HAVE_IBV_DEVX_ASYNC
7372f75660SOphir Munk struct mlx5dv_devx_cmd_comp;
7472f75660SOphir Munk struct mlx5dv_devx_async_cmd_hdr;
7572f75660SOphir Munk #endif
7672f75660SOphir Munk 
7772f75660SOphir Munk #ifndef HAVE_MLX5DV_DR
7872f75660SOphir Munk enum  mlx5dv_dr_domain_type { unused, };
7972f75660SOphir Munk struct mlx5dv_dr_domain;
80a3def854SJiawei Wang struct mlx5dv_dr_action;
8172f75660SOphir Munk #endif
8272f75660SOphir Munk 
8372f75660SOphir Munk #ifndef HAVE_MLX5DV_DR_DEVX_PORT
8472f75660SOphir Munk struct mlx5dv_devx_port;
8572f75660SOphir Munk #endif
8672f75660SOphir Munk 
8772f75660SOphir Munk #ifndef HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER
8872f75660SOphir Munk struct mlx5dv_dr_flow_meter_attr;
8972f75660SOphir Munk #endif
9072f75660SOphir Munk 
91a3def854SJiawei Wang #ifndef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE
92a3def854SJiawei Wang struct mlx5dv_dr_flow_sampler_attr {
93a3def854SJiawei Wang 	uint32_t sample_ratio;
94a3def854SJiawei Wang 	void *default_next_table;
95a3def854SJiawei Wang 	size_t num_sample_actions;
96a3def854SJiawei Wang 	struct mlx5dv_dr_action **sample_actions;
97a3def854SJiawei Wang 	uint64_t action;
98a3def854SJiawei Wang };
99a3def854SJiawei Wang #endif
100a3def854SJiawei Wang 
1014d23dd35SJiawei Wang #ifndef HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY
1024d23dd35SJiawei Wang enum mlx5dv_dr_action_dest_type {
1034d23dd35SJiawei Wang 	MLX5DV_DR_ACTION_DEST,
1044d23dd35SJiawei Wang 	MLX5DV_DR_ACTION_DEST_REFORMAT,
1054d23dd35SJiawei Wang };
1064d23dd35SJiawei Wang struct mlx5dv_dr_action_dest_reformat {
1074d23dd35SJiawei Wang 	struct mlx5dv_dr_action *reformat;
1084d23dd35SJiawei Wang 	struct mlx5dv_dr_action *dest;
1094d23dd35SJiawei Wang };
1104d23dd35SJiawei Wang struct mlx5dv_dr_action_dest_attr {
1114d23dd35SJiawei Wang 	enum mlx5dv_dr_action_dest_type type;
1124d23dd35SJiawei Wang 	union {
1134d23dd35SJiawei Wang 		struct mlx5dv_dr_action *dest;
1144d23dd35SJiawei Wang 		struct mlx5dv_dr_action_dest_reformat *dest_reformat;
1154d23dd35SJiawei Wang 	};
1164d23dd35SJiawei Wang };
1174d23dd35SJiawei Wang #endif
1184d23dd35SJiawei Wang 
11972f75660SOphir Munk #ifndef HAVE_IBV_DEVX_EVENT
12072f75660SOphir Munk struct mlx5dv_devx_event_channel { int fd; };
12172f75660SOphir Munk struct mlx5dv_devx_async_event_hdr;
12272f75660SOphir Munk #define MLX5DV_DEVX_CREATE_EVENT_CHANNEL_FLAGS_OMIT_EV_DATA 1
12372f75660SOphir Munk #endif
12472f75660SOphir Munk 
12572f75660SOphir Munk #ifndef HAVE_IBV_VAR
12672f75660SOphir Munk struct mlx5dv_var { uint32_t page_id; uint32_t length; off_t mmap_off;
12772f75660SOphir Munk 			uint64_t comp_mask; };
12872f75660SOphir Munk #endif
12972f75660SOphir Munk 
13072f75660SOphir Munk #ifndef HAVE_IBV_RELAXED_ORDERING
13172f75660SOphir Munk #define IBV_ACCESS_RELAXED_ORDERING 0
13272f75660SOphir Munk #endif
13372f75660SOphir Munk 
13472f75660SOphir Munk struct mlx5_glue {
13572f75660SOphir Munk 	const char *version;
13672f75660SOphir Munk 	int (*fork_init)(void);
13772f75660SOphir Munk 	struct ibv_pd *(*alloc_pd)(struct ibv_context *context);
13872f75660SOphir Munk 	int (*dealloc_pd)(struct ibv_pd *pd);
13972f75660SOphir Munk 	struct ibv_device **(*get_device_list)(int *num_devices);
14072f75660SOphir Munk 	void (*free_device_list)(struct ibv_device **list);
14172f75660SOphir Munk 	struct ibv_context *(*open_device)(struct ibv_device *device);
14272f75660SOphir Munk 	int (*close_device)(struct ibv_context *context);
14372f75660SOphir Munk 	int (*query_device)(struct ibv_context *context,
14472f75660SOphir Munk 			    struct ibv_device_attr *device_attr);
14572f75660SOphir Munk 	int (*query_device_ex)(struct ibv_context *context,
14672f75660SOphir Munk 			       const struct ibv_query_device_ex_input *input,
14772f75660SOphir Munk 			       struct ibv_device_attr_ex *attr);
14872f75660SOphir Munk 	int (*query_rt_values_ex)(struct ibv_context *context,
14972f75660SOphir Munk 			       struct ibv_values_ex *values);
15072f75660SOphir Munk 	int (*query_port)(struct ibv_context *context, uint8_t port_num,
15172f75660SOphir Munk 			  struct ibv_port_attr *port_attr);
15272f75660SOphir Munk 	struct ibv_comp_channel *(*create_comp_channel)
15372f75660SOphir Munk 		(struct ibv_context *context);
15472f75660SOphir Munk 	int (*destroy_comp_channel)(struct ibv_comp_channel *channel);
15572f75660SOphir Munk 	struct ibv_cq *(*create_cq)(struct ibv_context *context, int cqe,
15672f75660SOphir Munk 				    void *cq_context,
15772f75660SOphir Munk 				    struct ibv_comp_channel *channel,
15872f75660SOphir Munk 				    int comp_vector);
15972f75660SOphir Munk 	int (*destroy_cq)(struct ibv_cq *cq);
16072f75660SOphir Munk 	int (*get_cq_event)(struct ibv_comp_channel *channel,
16172f75660SOphir Munk 			    struct ibv_cq **cq, void **cq_context);
16272f75660SOphir Munk 	void (*ack_cq_events)(struct ibv_cq *cq, unsigned int nevents);
16372f75660SOphir Munk 	struct ibv_rwq_ind_table *(*create_rwq_ind_table)
16472f75660SOphir Munk 		(struct ibv_context *context,
16572f75660SOphir Munk 		 struct ibv_rwq_ind_table_init_attr *init_attr);
16672f75660SOphir Munk 	int (*destroy_rwq_ind_table)(struct ibv_rwq_ind_table *rwq_ind_table);
16772f75660SOphir Munk 	struct ibv_wq *(*create_wq)(struct ibv_context *context,
16872f75660SOphir Munk 				    struct ibv_wq_init_attr *wq_init_attr);
16972f75660SOphir Munk 	int (*destroy_wq)(struct ibv_wq *wq);
17072f75660SOphir Munk 	int (*modify_wq)(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr);
17172f75660SOphir Munk 	struct ibv_flow *(*create_flow)(struct ibv_qp *qp,
17272f75660SOphir Munk 					struct ibv_flow_attr *flow);
17372f75660SOphir Munk 	int (*destroy_flow)(struct ibv_flow *flow_id);
17472f75660SOphir Munk 	int (*destroy_flow_action)(void *action);
17572f75660SOphir Munk 	struct ibv_qp *(*create_qp)(struct ibv_pd *pd,
17672f75660SOphir Munk 				    struct ibv_qp_init_attr *qp_init_attr);
17772f75660SOphir Munk 	struct ibv_qp *(*create_qp_ex)
17872f75660SOphir Munk 		(struct ibv_context *context,
17972f75660SOphir Munk 		 struct ibv_qp_init_attr_ex *qp_init_attr_ex);
18072f75660SOphir Munk 	int (*destroy_qp)(struct ibv_qp *qp);
18172f75660SOphir Munk 	int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr,
18272f75660SOphir Munk 			 int attr_mask);
18372f75660SOphir Munk 	struct ibv_mr *(*reg_mr)(struct ibv_pd *pd, void *addr,
18472f75660SOphir Munk 				 size_t length, int access);
18572f75660SOphir Munk 	struct ibv_mr *(*alloc_null_mr)(struct ibv_pd *pd);
18672f75660SOphir Munk 	int (*dereg_mr)(struct ibv_mr *mr);
18772f75660SOphir Munk 	struct ibv_counter_set *(*create_counter_set)
18872f75660SOphir Munk 		(struct ibv_context *context,
18972f75660SOphir Munk 		 struct ibv_counter_set_init_attr *init_attr);
19072f75660SOphir Munk 	int (*destroy_counter_set)(struct ibv_counter_set *cs);
19172f75660SOphir Munk 	int (*describe_counter_set)
19272f75660SOphir Munk 		(struct ibv_context *context,
19372f75660SOphir Munk 		 uint16_t counter_set_id,
19472f75660SOphir Munk 		 struct ibv_counter_set_description *cs_desc);
19572f75660SOphir Munk 	int (*query_counter_set)(struct ibv_query_counter_set_attr *query_attr,
19672f75660SOphir Munk 				 struct ibv_counter_set_data *cs_data);
19772f75660SOphir Munk 	struct ibv_counters *(*create_counters)
19872f75660SOphir Munk 		(struct ibv_context *context,
19972f75660SOphir Munk 		 struct ibv_counters_init_attr *init_attr);
20072f75660SOphir Munk 	int (*destroy_counters)(struct ibv_counters *counters);
20172f75660SOphir Munk 	int (*attach_counters)(struct ibv_counters *counters,
20272f75660SOphir Munk 			       struct ibv_counter_attach_attr *attr,
20372f75660SOphir Munk 			       struct ibv_flow *flow);
20472f75660SOphir Munk 	int (*query_counters)(struct ibv_counters *counters,
20572f75660SOphir Munk 			      uint64_t *counters_value,
20672f75660SOphir Munk 			      uint32_t ncounters,
20772f75660SOphir Munk 			      uint32_t flags);
20872f75660SOphir Munk 	void (*ack_async_event)(struct ibv_async_event *event);
20972f75660SOphir Munk 	int (*get_async_event)(struct ibv_context *context,
21072f75660SOphir Munk 			       struct ibv_async_event *event);
21172f75660SOphir Munk 	const char *(*port_state_str)(enum ibv_port_state port_state);
21272f75660SOphir Munk 	struct ibv_cq *(*cq_ex_to_cq)(struct ibv_cq_ex *cq);
21372f75660SOphir Munk 	void *(*dr_create_flow_action_dest_flow_tbl)(void *tbl);
21472f75660SOphir Munk 	void *(*dr_create_flow_action_dest_port)(void *domain,
21572f75660SOphir Munk 						 uint32_t port);
2164c093ffaSParav Pandit 	void *(*dr_create_flow_action_drop)(void);
21772f75660SOphir Munk 	void *(*dr_create_flow_action_push_vlan)
21872f75660SOphir Munk 					(struct mlx5dv_dr_domain *domain,
21972f75660SOphir Munk 					 rte_be32_t vlan_tag);
2204c093ffaSParav Pandit 	void *(*dr_create_flow_action_pop_vlan)(void);
22172f75660SOphir Munk 	void *(*dr_create_flow_tbl)(void *domain, uint32_t level);
22272f75660SOphir Munk 	int (*dr_destroy_flow_tbl)(void *tbl);
22372f75660SOphir Munk 	void *(*dr_create_domain)(struct ibv_context *ctx,
22472f75660SOphir Munk 				  enum mlx5dv_dr_domain_type domain);
22572f75660SOphir Munk 	int (*dr_destroy_domain)(void *domain);
2266e0cd74aSBing Zhao 	int (*dr_sync_domain)(void *domain, uint32_t flags);
22772f75660SOphir Munk 	struct ibv_cq_ex *(*dv_create_cq)
22872f75660SOphir Munk 		(struct ibv_context *context,
22972f75660SOphir Munk 		 struct ibv_cq_init_attr_ex *cq_attr,
23072f75660SOphir Munk 		 struct mlx5dv_cq_init_attr *mlx5_cq_attr);
23172f75660SOphir Munk 	struct ibv_wq *(*dv_create_wq)
23272f75660SOphir Munk 		(struct ibv_context *context,
23372f75660SOphir Munk 		 struct ibv_wq_init_attr *wq_attr,
23472f75660SOphir Munk 		 struct mlx5dv_wq_init_attr *mlx5_wq_attr);
23572f75660SOphir Munk 	int (*dv_query_device)(struct ibv_context *ctx_in,
23672f75660SOphir Munk 			       struct mlx5dv_context *attrs_out);
23772f75660SOphir Munk 	int (*dv_set_context_attr)(struct ibv_context *ibv_ctx,
23872f75660SOphir Munk 				   enum mlx5dv_set_ctx_attr_type type,
23972f75660SOphir Munk 				   void *attr);
24072f75660SOphir Munk 	int (*dv_init_obj)(struct mlx5dv_obj *obj, uint64_t obj_type);
24172f75660SOphir Munk 	struct ibv_qp *(*dv_create_qp)
24272f75660SOphir Munk 		(struct ibv_context *context,
24372f75660SOphir Munk 		 struct ibv_qp_init_attr_ex *qp_init_attr_ex,
24472f75660SOphir Munk 		 struct mlx5dv_qp_init_attr *dv_qp_init_attr);
24572f75660SOphir Munk 	void *(*dv_create_flow_matcher)
24672f75660SOphir Munk 		(struct ibv_context *context,
24772f75660SOphir Munk 		 struct mlx5dv_flow_matcher_attr *matcher_attr,
24872f75660SOphir Munk 		 void *tbl);
24972f75660SOphir Munk 	void *(*dv_create_flow)(void *matcher, void *match_value,
25072f75660SOphir Munk 			  size_t num_actions, void *actions[]);
25172f75660SOphir Munk 	void *(*dv_create_flow_action_counter)(void *obj, uint32_t  offset);
25272f75660SOphir Munk 	void *(*dv_create_flow_action_dest_ibv_qp)(void *qp);
25372f75660SOphir Munk 	void *(*dv_create_flow_action_dest_devx_tir)(void *tir);
25472f75660SOphir Munk 	void *(*dv_create_flow_action_modify_header)
25572f75660SOphir Munk 		(struct ibv_context *ctx, enum mlx5dv_flow_table_type ft_type,
25672f75660SOphir Munk 		 void *domain, uint64_t flags, size_t actions_sz,
25772f75660SOphir Munk 		 uint64_t actions[]);
25872f75660SOphir Munk 	void *(*dv_create_flow_action_packet_reformat)
25972f75660SOphir Munk 		(struct ibv_context *ctx,
26072f75660SOphir Munk 		 enum mlx5dv_flow_action_packet_reformat_type reformat_type,
26172f75660SOphir Munk 		 enum mlx5dv_flow_table_type ft_type,
26272f75660SOphir Munk 		 struct mlx5dv_dr_domain *domain,
26372f75660SOphir Munk 		 uint32_t flags, size_t data_sz, void *data);
26472f75660SOphir Munk 	void *(*dv_create_flow_action_tag)(uint32_t tag);
26572f75660SOphir Munk 	void *(*dv_create_flow_action_meter)
26672f75660SOphir Munk 		(struct mlx5dv_dr_flow_meter_attr *attr);
26772f75660SOphir Munk 	int (*dv_modify_flow_action_meter)(void *action,
26872f75660SOphir Munk 		struct mlx5dv_dr_flow_meter_attr *attr, uint64_t modify_bits);
269d4d85aa6SShiri Kuzin 	void *(*dr_create_flow_action_default_miss)(void);
27072f75660SOphir Munk 	int (*dv_destroy_flow)(void *flow);
27172f75660SOphir Munk 	int (*dv_destroy_flow_matcher)(void *matcher);
27272f75660SOphir Munk 	struct ibv_context *(*dv_open_device)(struct ibv_device *device);
27372f75660SOphir Munk 	struct mlx5dv_var *(*dv_alloc_var)(struct ibv_context *context,
27472f75660SOphir Munk 					   uint32_t flags);
27572f75660SOphir Munk 	void (*dv_free_var)(struct mlx5dv_var *var);
27672f75660SOphir Munk 	struct mlx5dv_devx_uar *(*devx_alloc_uar)(struct ibv_context *context,
27772f75660SOphir Munk 						  uint32_t flags);
27872f75660SOphir Munk 	void (*devx_free_uar)(struct mlx5dv_devx_uar *devx_uar);
27972f75660SOphir Munk 	struct mlx5dv_devx_obj *(*devx_obj_create)
28072f75660SOphir Munk 					(struct ibv_context *ctx,
28172f75660SOphir Munk 					 const void *in, size_t inlen,
28272f75660SOphir Munk 					 void *out, size_t outlen);
28372f75660SOphir Munk 	int (*devx_obj_destroy)(struct mlx5dv_devx_obj *obj);
28472f75660SOphir Munk 	int (*devx_obj_query)(struct mlx5dv_devx_obj *obj,
28572f75660SOphir Munk 			      const void *in, size_t inlen,
28672f75660SOphir Munk 			      void *out, size_t outlen);
28772f75660SOphir Munk 	int (*devx_obj_modify)(struct mlx5dv_devx_obj *obj,
28872f75660SOphir Munk 			       const void *in, size_t inlen,
28972f75660SOphir Munk 			       void *out, size_t outlen);
29072f75660SOphir Munk 	int (*devx_general_cmd)(struct ibv_context *context,
29172f75660SOphir Munk 				const void *in, size_t inlen,
29272f75660SOphir Munk 				void *out, size_t outlen);
29372f75660SOphir Munk 	struct mlx5dv_devx_cmd_comp *(*devx_create_cmd_comp)
29472f75660SOphir Munk 					(struct ibv_context *context);
29572f75660SOphir Munk 	void (*devx_destroy_cmd_comp)(struct mlx5dv_devx_cmd_comp *cmd_comp);
29672f75660SOphir Munk 	int (*devx_obj_query_async)(struct mlx5dv_devx_obj *obj,
29772f75660SOphir Munk 				    const void *in, size_t inlen,
29872f75660SOphir Munk 				    size_t outlen, uint64_t wr_id,
29972f75660SOphir Munk 				    struct mlx5dv_devx_cmd_comp *cmd_comp);
30072f75660SOphir Munk 	int (*devx_get_async_cmd_comp)(struct mlx5dv_devx_cmd_comp *cmd_comp,
30172f75660SOphir Munk 				       struct mlx5dv_devx_async_cmd_hdr *resp,
30272f75660SOphir Munk 				       size_t cmd_resp_len);
30372f75660SOphir Munk 	struct mlx5dv_devx_umem *(*devx_umem_reg)(struct ibv_context *context,
30472f75660SOphir Munk 						  void *addr, size_t size,
30572f75660SOphir Munk 						  uint32_t access);
30672f75660SOphir Munk 	int (*devx_umem_dereg)(struct mlx5dv_devx_umem *dv_devx_umem);
30772f75660SOphir Munk 	int (*devx_qp_query)(struct ibv_qp *qp,
30872f75660SOphir Munk 			     const void *in, size_t inlen,
30972f75660SOphir Munk 			     void *out, size_t outlen);
31072f75660SOphir Munk 	int (*devx_port_query)(struct ibv_context *ctx,
31172f75660SOphir Munk 			       uint32_t port_num,
31272f75660SOphir Munk 			       struct mlx5dv_devx_port *mlx5_devx_port);
31372f75660SOphir Munk 	int (*dr_dump_domain)(FILE *file, void *domain);
31472f75660SOphir Munk 	int (*devx_query_eqn)(struct ibv_context *context, uint32_t cpus,
31572f75660SOphir Munk 			      uint32_t *eqn);
31672f75660SOphir Munk 	struct mlx5dv_devx_event_channel *(*devx_create_event_channel)
31772f75660SOphir Munk 				(struct ibv_context *context, int flags);
31872f75660SOphir Munk 	void (*devx_destroy_event_channel)
31972f75660SOphir Munk 			(struct mlx5dv_devx_event_channel *event_channel);
32072f75660SOphir Munk 	int (*devx_subscribe_devx_event)
32172f75660SOphir Munk 			(struct mlx5dv_devx_event_channel *event_channel,
32272f75660SOphir Munk 			 struct mlx5dv_devx_obj *obj,
32372f75660SOphir Munk 			 uint16_t events_sz,
32472f75660SOphir Munk 			 uint16_t events_num[],
32572f75660SOphir Munk 			 uint64_t cookie);
32672f75660SOphir Munk 	int (*devx_subscribe_devx_event_fd)
32772f75660SOphir Munk 			(struct mlx5dv_devx_event_channel *event_channel,
32872f75660SOphir Munk 			 int fd,
32972f75660SOphir Munk 			 struct mlx5dv_devx_obj *obj,
33072f75660SOphir Munk 			 uint16_t event_num);
33172f75660SOphir Munk 	ssize_t (*devx_get_event)
33272f75660SOphir Munk 			(struct mlx5dv_devx_event_channel *event_channel,
33372f75660SOphir Munk 			 struct mlx5dv_devx_async_event_hdr *event_data,
33472f75660SOphir Munk 			 size_t event_resp_len);
335bebee850SSuanming Mou 	void (*dr_reclaim_domain_memory)(void *domain, uint32_t enable);
33679a7e409SViacheslav Ovsiienko 	struct mlx5dv_pp *(*dv_alloc_pp)(struct ibv_context *context,
33779a7e409SViacheslav Ovsiienko 					 size_t pp_context_sz,
33879a7e409SViacheslav Ovsiienko 					 const void *pp_context,
33979a7e409SViacheslav Ovsiienko 					 uint32_t flags);
34079a7e409SViacheslav Ovsiienko 	void (*dv_free_pp)(struct mlx5dv_pp *pp);
341a3def854SJiawei Wang 	void *(*dr_create_flow_action_sampler)
342a3def854SJiawei Wang 			(struct mlx5dv_dr_flow_sampler_attr *attr);
3434d23dd35SJiawei Wang 	void *(*dr_create_flow_action_dest_array)
3444d23dd35SJiawei Wang 			(void *domain,
3454d23dd35SJiawei Wang 			 size_t num_dest,
3464d23dd35SJiawei Wang 			 struct mlx5dv_dr_action_dest_attr *dests[]);
347*a2999c7bSDekel Peled 	void *(*dv_create_flow_action_aso)
348*a2999c7bSDekel Peled 			(struct mlx5dv_dr_domain *domain, void *aso_obj,
349*a2999c7bSDekel Peled 			 uint32_t offset, uint32_t flags, uint8_t return_reg_c);
35072f75660SOphir Munk };
35172f75660SOphir Munk 
35272f75660SOphir Munk extern const struct mlx5_glue *mlx5_glue;
35372f75660SOphir Munk 
35472f75660SOphir Munk #endif /* MLX5_GLUE_H_ */
355