1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2018 6WIND S.A.
3 * Copyright 2018 Mellanox Technologies, Ltd
12 /* Verbs headers do not support -pedantic. */
14 #pragma GCC diagnostic ignored "-Wpedantic"
16 #include <infiniband/mlx5dv.h>
17 #include <infiniband/verbs.h>
19 #pragma GCC diagnostic error "-Wpedantic"
22 #ifndef MLX5_GLUE_VERSION
23 #define MLX5_GLUE_VERSION ""
26 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT
27 struct ibv_counter_set
;
28 struct ibv_counter_set_data
;
29 struct ibv_counter_set_description
;
30 struct ibv_counter_set_init_attr
;
31 struct ibv_query_counter_set_attr
;
34 #ifndef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
35 struct mlx5dv_qp_init_attr
;
38 #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT
39 struct mlx5dv_wq_init_attr
;
42 /* LIB_GLUE_VERSION must be updated every time this structure is modified. */
45 int (*fork_init
)(void);
46 struct ibv_pd
*(*alloc_pd
)(struct ibv_context
*context
);
47 int (*dealloc_pd
)(struct ibv_pd
*pd
);
48 struct ibv_device
**(*get_device_list
)(int *num_devices
);
49 void (*free_device_list
)(struct ibv_device
**list
);
50 struct ibv_context
*(*open_device
)(struct ibv_device
*device
);
51 int (*close_device
)(struct ibv_context
*context
);
52 int (*query_device
)(struct ibv_context
*context
,
53 struct ibv_device_attr
*device_attr
);
54 int (*query_device_ex
)(struct ibv_context
*context
,
55 const struct ibv_query_device_ex_input
*input
,
56 struct ibv_device_attr_ex
*attr
);
57 int (*query_port
)(struct ibv_context
*context
, uint8_t port_num
,
58 struct ibv_port_attr
*port_attr
);
59 struct ibv_comp_channel
*(*create_comp_channel
)
60 (struct ibv_context
*context
);
61 int (*destroy_comp_channel
)(struct ibv_comp_channel
*channel
);
62 struct ibv_cq
*(*create_cq
)(struct ibv_context
*context
, int cqe
,
64 struct ibv_comp_channel
*channel
,
66 int (*destroy_cq
)(struct ibv_cq
*cq
);
67 int (*get_cq_event
)(struct ibv_comp_channel
*channel
,
68 struct ibv_cq
**cq
, void **cq_context
);
69 void (*ack_cq_events
)(struct ibv_cq
*cq
, unsigned int nevents
);
70 struct ibv_rwq_ind_table
*(*create_rwq_ind_table
)
71 (struct ibv_context
*context
,
72 struct ibv_rwq_ind_table_init_attr
*init_attr
);
73 int (*destroy_rwq_ind_table
)(struct ibv_rwq_ind_table
*rwq_ind_table
);
74 struct ibv_wq
*(*create_wq
)(struct ibv_context
*context
,
75 struct ibv_wq_init_attr
*wq_init_attr
);
76 int (*destroy_wq
)(struct ibv_wq
*wq
);
77 int (*modify_wq
)(struct ibv_wq
*wq
, struct ibv_wq_attr
*wq_attr
);
78 struct ibv_flow
*(*create_flow
)(struct ibv_qp
*qp
,
79 struct ibv_flow_attr
*flow
);
80 int (*destroy_flow
)(struct ibv_flow
*flow_id
);
81 struct ibv_qp
*(*create_qp
)(struct ibv_pd
*pd
,
82 struct ibv_qp_init_attr
*qp_init_attr
);
83 struct ibv_qp
*(*create_qp_ex
)
84 (struct ibv_context
*context
,
85 struct ibv_qp_init_attr_ex
*qp_init_attr_ex
);
86 int (*destroy_qp
)(struct ibv_qp
*qp
);
87 int (*modify_qp
)(struct ibv_qp
*qp
, struct ibv_qp_attr
*attr
,
89 struct ibv_mr
*(*reg_mr
)(struct ibv_pd
*pd
, void *addr
,
90 size_t length
, int access
);
91 int (*dereg_mr
)(struct ibv_mr
*mr
);
92 struct ibv_counter_set
*(*create_counter_set
)
93 (struct ibv_context
*context
,
94 struct ibv_counter_set_init_attr
*init_attr
);
95 int (*destroy_counter_set
)(struct ibv_counter_set
*cs
);
96 int (*describe_counter_set
)
97 (struct ibv_context
*context
,
98 uint16_t counter_set_id
,
99 struct ibv_counter_set_description
*cs_desc
);
100 int (*query_counter_set
)(struct ibv_query_counter_set_attr
*query_attr
,
101 struct ibv_counter_set_data
*cs_data
);
102 void (*ack_async_event
)(struct ibv_async_event
*event
);
103 int (*get_async_event
)(struct ibv_context
*context
,
104 struct ibv_async_event
*event
);
105 const char *(*port_state_str
)(enum ibv_port_state port_state
);
106 struct ibv_cq
*(*cq_ex_to_cq
)(struct ibv_cq_ex
*cq
);
107 struct ibv_cq_ex
*(*dv_create_cq
)
108 (struct ibv_context
*context
,
109 struct ibv_cq_init_attr_ex
*cq_attr
,
110 struct mlx5dv_cq_init_attr
*mlx5_cq_attr
);
111 struct ibv_wq
*(*dv_create_wq
)
112 (struct ibv_context
*context
,
113 struct ibv_wq_init_attr
*wq_attr
,
114 struct mlx5dv_wq_init_attr
*mlx5_wq_attr
);
115 int (*dv_query_device
)(struct ibv_context
*ctx_in
,
116 struct mlx5dv_context
*attrs_out
);
117 int (*dv_set_context_attr
)(struct ibv_context
*ibv_ctx
,
118 enum mlx5dv_set_ctx_attr_type type
,
120 int (*dv_init_obj
)(struct mlx5dv_obj
*obj
, uint64_t obj_type
);
121 struct ibv_qp
*(*dv_create_qp
)
122 (struct ibv_context
*context
,
123 struct ibv_qp_init_attr_ex
*qp_init_attr_ex
,
124 struct mlx5dv_qp_init_attr
*dv_qp_init_attr
);
127 const struct mlx5_glue
*mlx5_glue
;
129 #endif /* MLX5_GLUE_H_ */