xref: /dpdk/drivers/net/mlx4/mlx4_glue.h (revision af21b4425972aa4a00a0321be780ba556b13b980)
14eba244bSAdrien Mazarguil /* SPDX-License-Identifier: BSD-3-Clause
24eba244bSAdrien Mazarguil  * Copyright 2018 6WIND S.A.
35feecc57SShahaf Shuler  * Copyright 2018 Mellanox Technologies, Ltd
44eba244bSAdrien Mazarguil  */
54eba244bSAdrien Mazarguil 
64eba244bSAdrien Mazarguil #ifndef MLX4_GLUE_H_
74eba244bSAdrien Mazarguil #define MLX4_GLUE_H_
84eba244bSAdrien Mazarguil 
9747ac2b4SAdrien Mazarguil #include <stddef.h>
10747ac2b4SAdrien Mazarguil #include <stdint.h>
11747ac2b4SAdrien Mazarguil 
124eba244bSAdrien Mazarguil /* Verbs headers do not support -pedantic. */
134eba244bSAdrien Mazarguil #ifdef PEDANTIC
144eba244bSAdrien Mazarguil #pragma GCC diagnostic ignored "-Wpedantic"
154eba244bSAdrien Mazarguil #endif
164eba244bSAdrien Mazarguil #include <infiniband/mlx4dv.h>
174eba244bSAdrien Mazarguil #include <infiniband/verbs.h>
184eba244bSAdrien Mazarguil #ifdef PEDANTIC
194eba244bSAdrien Mazarguil #pragma GCC diagnostic error "-Wpedantic"
204eba244bSAdrien Mazarguil #endif
214eba244bSAdrien Mazarguil 
226d5df2eaSAdrien Mazarguil #ifndef MLX4_GLUE_VERSION
236d5df2eaSAdrien Mazarguil #define MLX4_GLUE_VERSION ""
246d5df2eaSAdrien Mazarguil #endif
256d5df2eaSAdrien Mazarguil 
264eba244bSAdrien Mazarguil struct mlx4_glue {
276d5df2eaSAdrien Mazarguil 	const char *version;
284eba244bSAdrien Mazarguil 	int (*fork_init)(void);
294eba244bSAdrien Mazarguil 	int (*get_async_event)(struct ibv_context *context,
304eba244bSAdrien Mazarguil 			       struct ibv_async_event *event);
314eba244bSAdrien Mazarguil 	void (*ack_async_event)(struct ibv_async_event *event);
324eba244bSAdrien Mazarguil 	struct ibv_pd *(*alloc_pd)(struct ibv_context *context);
334eba244bSAdrien Mazarguil 	int (*dealloc_pd)(struct ibv_pd *pd);
344eba244bSAdrien Mazarguil 	struct ibv_device **(*get_device_list)(int *num_devices);
354eba244bSAdrien Mazarguil 	void (*free_device_list)(struct ibv_device **list);
364eba244bSAdrien Mazarguil 	struct ibv_context *(*open_device)(struct ibv_device *device);
374eba244bSAdrien Mazarguil 	int (*close_device)(struct ibv_context *context);
384eba244bSAdrien Mazarguil 	const char *(*get_device_name)(struct ibv_device *device);
394eba244bSAdrien Mazarguil 	int (*query_device)(struct ibv_context *context,
404eba244bSAdrien Mazarguil 			    struct ibv_device_attr *device_attr);
414eba244bSAdrien Mazarguil 	int (*query_device_ex)(struct ibv_context *context,
424eba244bSAdrien Mazarguil 			       const struct ibv_query_device_ex_input *input,
434eba244bSAdrien Mazarguil 			       struct ibv_device_attr_ex *attr);
444eba244bSAdrien Mazarguil 	int (*query_port)(struct ibv_context *context, uint8_t port_num,
454eba244bSAdrien Mazarguil 			  struct ibv_port_attr *port_attr);
464eba244bSAdrien Mazarguil 	const char *(*port_state_str)(enum ibv_port_state port_state);
474eba244bSAdrien Mazarguil 	struct ibv_comp_channel *(*create_comp_channel)
484eba244bSAdrien Mazarguil 		(struct ibv_context *context);
494eba244bSAdrien Mazarguil 	int (*destroy_comp_channel)(struct ibv_comp_channel *channel);
504eba244bSAdrien Mazarguil 	struct ibv_cq *(*create_cq)(struct ibv_context *context, int cqe,
514eba244bSAdrien Mazarguil 				    void *cq_context,
524eba244bSAdrien Mazarguil 				    struct ibv_comp_channel *channel,
534eba244bSAdrien Mazarguil 				    int comp_vector);
544eba244bSAdrien Mazarguil 	int (*destroy_cq)(struct ibv_cq *cq);
554eba244bSAdrien Mazarguil 	int (*get_cq_event)(struct ibv_comp_channel *channel,
564eba244bSAdrien Mazarguil 			    struct ibv_cq **cq, void **cq_context);
574eba244bSAdrien Mazarguil 	void (*ack_cq_events)(struct ibv_cq *cq, unsigned int nevents);
584eba244bSAdrien Mazarguil 	struct ibv_flow *(*create_flow)(struct ibv_qp *qp,
594eba244bSAdrien Mazarguil 					struct ibv_flow_attr *flow);
604eba244bSAdrien Mazarguil 	int (*destroy_flow)(struct ibv_flow *flow_id);
614eba244bSAdrien Mazarguil 	struct ibv_qp *(*create_qp)(struct ibv_pd *pd,
624eba244bSAdrien Mazarguil 				    struct ibv_qp_init_attr *qp_init_attr);
634eba244bSAdrien Mazarguil 	struct ibv_qp *(*create_qp_ex)
644eba244bSAdrien Mazarguil 		(struct ibv_context *context,
654eba244bSAdrien Mazarguil 		 struct ibv_qp_init_attr_ex *qp_init_attr_ex);
664eba244bSAdrien Mazarguil 	int (*destroy_qp)(struct ibv_qp *qp);
674eba244bSAdrien Mazarguil 	int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr,
684eba244bSAdrien Mazarguil 			 int attr_mask);
694eba244bSAdrien Mazarguil 	struct ibv_mr *(*reg_mr)(struct ibv_pd *pd, void *addr,
704eba244bSAdrien Mazarguil 				 size_t length, int access);
714eba244bSAdrien Mazarguil 	int (*dereg_mr)(struct ibv_mr *mr);
724eba244bSAdrien Mazarguil 	struct ibv_rwq_ind_table *(*create_rwq_ind_table)
734eba244bSAdrien Mazarguil 		(struct ibv_context *context,
744eba244bSAdrien Mazarguil 		 struct ibv_rwq_ind_table_init_attr *init_attr);
754eba244bSAdrien Mazarguil 	int (*destroy_rwq_ind_table)(struct ibv_rwq_ind_table *rwq_ind_table);
764eba244bSAdrien Mazarguil 	struct ibv_wq *(*create_wq)(struct ibv_context *context,
774eba244bSAdrien Mazarguil 				    struct ibv_wq_init_attr *wq_init_attr);
784eba244bSAdrien Mazarguil 	int (*destroy_wq)(struct ibv_wq *wq);
794eba244bSAdrien Mazarguil 	int (*modify_wq)(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr);
804eba244bSAdrien Mazarguil 	int (*dv_init_obj)(struct mlx4dv_obj *obj, uint64_t obj_type);
814eba244bSAdrien Mazarguil 	int (*dv_set_context_attr)(struct ibv_context *context,
824eba244bSAdrien Mazarguil 				   enum mlx4dv_set_ctx_attr_type attr_type,
834eba244bSAdrien Mazarguil 				   void *attr);
844eba244bSAdrien Mazarguil };
854eba244bSAdrien Mazarguil 
86*a5e5af7fSThomas Monjalon extern const struct mlx4_glue *mlx4_glue;
874eba244bSAdrien Mazarguil 
884eba244bSAdrien Mazarguil #endif /* MLX4_GLUE_H_ */
89