]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | /* SPDX-License-Identifier: BSD-3-Clause |
2 | * Copyright 2018 6WIND S.A. | |
3 | * Copyright 2018 Mellanox Technologies, Ltd | |
4 | */ | |
5 | ||
6 | #ifndef MLX5_GLUE_H_ | |
7 | #define MLX5_GLUE_H_ | |
8 | ||
9 | #include <stddef.h> | |
10 | #include <stdint.h> | |
11 | ||
12 | /* Verbs headers do not support -pedantic. */ | |
13 | #ifdef PEDANTIC | |
14 | #pragma GCC diagnostic ignored "-Wpedantic" | |
15 | #endif | |
16 | #include <infiniband/mlx5dv.h> | |
17 | #include <infiniband/verbs.h> | |
18 | #ifdef PEDANTIC | |
19 | #pragma GCC diagnostic error "-Wpedantic" | |
20 | #endif | |
21 | ||
22 | #ifndef MLX5_GLUE_VERSION | |
23 | #define MLX5_GLUE_VERSION "" | |
24 | #endif | |
25 | ||
9f95a23c | 26 | #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 |
11fdf7f2 TL |
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; | |
32 | #endif | |
33 | ||
9f95a23c TL |
34 | #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 |
35 | struct ibv_counters; | |
36 | struct ibv_counters_init_attr; | |
37 | struct ibv_counter_attach_attr; | |
38 | #endif | |
39 | ||
11fdf7f2 TL |
40 | #ifndef HAVE_IBV_DEVICE_TUNNEL_SUPPORT |
41 | struct mlx5dv_qp_init_attr; | |
42 | #endif | |
43 | ||
44 | #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT | |
45 | struct mlx5dv_wq_init_attr; | |
46 | #endif | |
47 | ||
9f95a23c TL |
48 | #ifndef HAVE_IBV_FLOW_DV_SUPPORT |
49 | struct mlx5dv_flow_matcher; | |
50 | struct mlx5dv_flow_matcher_attr; | |
51 | struct mlx5dv_flow_action_attr; | |
52 | struct mlx5dv_flow_match_parameters; | |
53 | struct ibv_flow_action; | |
54 | enum mlx5dv_flow_action_packet_reformat_type { packet_reformat_type = 0, }; | |
55 | enum mlx5dv_flow_table_type { flow_table_type = 0, }; | |
56 | #endif | |
57 | ||
58 | #ifndef HAVE_IBV_FLOW_DEVX_COUNTERS | |
59 | #define MLX5DV_FLOW_ACTION_COUNTERS_DEVX 0 | |
60 | #endif | |
61 | ||
62 | #ifndef HAVE_IBV_DEVX_OBJ | |
63 | struct mlx5dv_devx_obj; | |
64 | #endif | |
65 | ||
66 | #ifndef HAVE_MLX5DV_DR | |
67 | enum mlx5dv_dr_domain_type { unused, }; | |
68 | struct mlx5dv_dr_domain; | |
69 | #endif | |
70 | ||
11fdf7f2 TL |
71 | /* LIB_GLUE_VERSION must be updated every time this structure is modified. */ |
72 | struct mlx5_glue { | |
73 | const char *version; | |
74 | int (*fork_init)(void); | |
75 | struct ibv_pd *(*alloc_pd)(struct ibv_context *context); | |
76 | int (*dealloc_pd)(struct ibv_pd *pd); | |
77 | struct ibv_device **(*get_device_list)(int *num_devices); | |
78 | void (*free_device_list)(struct ibv_device **list); | |
79 | struct ibv_context *(*open_device)(struct ibv_device *device); | |
80 | int (*close_device)(struct ibv_context *context); | |
81 | int (*query_device)(struct ibv_context *context, | |
82 | struct ibv_device_attr *device_attr); | |
83 | int (*query_device_ex)(struct ibv_context *context, | |
84 | const struct ibv_query_device_ex_input *input, | |
85 | struct ibv_device_attr_ex *attr); | |
86 | int (*query_port)(struct ibv_context *context, uint8_t port_num, | |
87 | struct ibv_port_attr *port_attr); | |
88 | struct ibv_comp_channel *(*create_comp_channel) | |
89 | (struct ibv_context *context); | |
90 | int (*destroy_comp_channel)(struct ibv_comp_channel *channel); | |
91 | struct ibv_cq *(*create_cq)(struct ibv_context *context, int cqe, | |
92 | void *cq_context, | |
93 | struct ibv_comp_channel *channel, | |
94 | int comp_vector); | |
95 | int (*destroy_cq)(struct ibv_cq *cq); | |
96 | int (*get_cq_event)(struct ibv_comp_channel *channel, | |
97 | struct ibv_cq **cq, void **cq_context); | |
98 | void (*ack_cq_events)(struct ibv_cq *cq, unsigned int nevents); | |
99 | struct ibv_rwq_ind_table *(*create_rwq_ind_table) | |
100 | (struct ibv_context *context, | |
101 | struct ibv_rwq_ind_table_init_attr *init_attr); | |
102 | int (*destroy_rwq_ind_table)(struct ibv_rwq_ind_table *rwq_ind_table); | |
103 | struct ibv_wq *(*create_wq)(struct ibv_context *context, | |
104 | struct ibv_wq_init_attr *wq_init_attr); | |
105 | int (*destroy_wq)(struct ibv_wq *wq); | |
106 | int (*modify_wq)(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr); | |
107 | struct ibv_flow *(*create_flow)(struct ibv_qp *qp, | |
108 | struct ibv_flow_attr *flow); | |
109 | int (*destroy_flow)(struct ibv_flow *flow_id); | |
9f95a23c | 110 | int (*destroy_flow_action)(void *action); |
11fdf7f2 TL |
111 | struct ibv_qp *(*create_qp)(struct ibv_pd *pd, |
112 | struct ibv_qp_init_attr *qp_init_attr); | |
113 | struct ibv_qp *(*create_qp_ex) | |
114 | (struct ibv_context *context, | |
115 | struct ibv_qp_init_attr_ex *qp_init_attr_ex); | |
116 | int (*destroy_qp)(struct ibv_qp *qp); | |
117 | int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr, | |
118 | int attr_mask); | |
119 | struct ibv_mr *(*reg_mr)(struct ibv_pd *pd, void *addr, | |
120 | size_t length, int access); | |
121 | int (*dereg_mr)(struct ibv_mr *mr); | |
122 | struct ibv_counter_set *(*create_counter_set) | |
123 | (struct ibv_context *context, | |
124 | struct ibv_counter_set_init_attr *init_attr); | |
125 | int (*destroy_counter_set)(struct ibv_counter_set *cs); | |
126 | int (*describe_counter_set) | |
127 | (struct ibv_context *context, | |
128 | uint16_t counter_set_id, | |
129 | struct ibv_counter_set_description *cs_desc); | |
130 | int (*query_counter_set)(struct ibv_query_counter_set_attr *query_attr, | |
131 | struct ibv_counter_set_data *cs_data); | |
9f95a23c TL |
132 | struct ibv_counters *(*create_counters) |
133 | (struct ibv_context *context, | |
134 | struct ibv_counters_init_attr *init_attr); | |
135 | int (*destroy_counters)(struct ibv_counters *counters); | |
136 | int (*attach_counters)(struct ibv_counters *counters, | |
137 | struct ibv_counter_attach_attr *attr, | |
138 | struct ibv_flow *flow); | |
139 | int (*query_counters)(struct ibv_counters *counters, | |
140 | uint64_t *counters_value, | |
141 | uint32_t ncounters, | |
142 | uint32_t flags); | |
11fdf7f2 TL |
143 | void (*ack_async_event)(struct ibv_async_event *event); |
144 | int (*get_async_event)(struct ibv_context *context, | |
145 | struct ibv_async_event *event); | |
146 | const char *(*port_state_str)(enum ibv_port_state port_state); | |
147 | struct ibv_cq *(*cq_ex_to_cq)(struct ibv_cq_ex *cq); | |
9f95a23c TL |
148 | void *(*dr_create_flow_action_dest_flow_tbl)(void *tbl); |
149 | void *(*dr_create_flow_action_dest_vport)(void *domain, uint32_t vport); | |
150 | void *(*dr_create_flow_action_drop)(); | |
151 | void *(*dr_create_flow_tbl)(void *domain, uint32_t level); | |
152 | int (*dr_destroy_flow_tbl)(void *tbl); | |
153 | void *(*dr_create_domain)(struct ibv_context *ctx, | |
154 | enum mlx5dv_dr_domain_type domain); | |
155 | int (*dr_destroy_domain)(void *domain); | |
11fdf7f2 TL |
156 | struct ibv_cq_ex *(*dv_create_cq) |
157 | (struct ibv_context *context, | |
158 | struct ibv_cq_init_attr_ex *cq_attr, | |
159 | struct mlx5dv_cq_init_attr *mlx5_cq_attr); | |
160 | struct ibv_wq *(*dv_create_wq) | |
161 | (struct ibv_context *context, | |
162 | struct ibv_wq_init_attr *wq_attr, | |
163 | struct mlx5dv_wq_init_attr *mlx5_wq_attr); | |
164 | int (*dv_query_device)(struct ibv_context *ctx_in, | |
165 | struct mlx5dv_context *attrs_out); | |
166 | int (*dv_set_context_attr)(struct ibv_context *ibv_ctx, | |
167 | enum mlx5dv_set_ctx_attr_type type, | |
168 | void *attr); | |
169 | int (*dv_init_obj)(struct mlx5dv_obj *obj, uint64_t obj_type); | |
170 | struct ibv_qp *(*dv_create_qp) | |
171 | (struct ibv_context *context, | |
172 | struct ibv_qp_init_attr_ex *qp_init_attr_ex, | |
173 | struct mlx5dv_qp_init_attr *dv_qp_init_attr); | |
9f95a23c TL |
174 | void *(*dv_create_flow_matcher) |
175 | (struct ibv_context *context, | |
176 | struct mlx5dv_flow_matcher_attr *matcher_attr, | |
177 | void *tbl); | |
178 | void *(*dv_create_flow)(void *matcher, void *match_value, | |
179 | size_t num_actions, void *actions[]); | |
180 | void *(*dv_create_flow_action_counter)(void *obj, uint32_t offset); | |
181 | void *(*dv_create_flow_action_dest_ibv_qp)(void *qp); | |
182 | void *(*dv_create_flow_action_modify_header) | |
183 | (struct ibv_context *ctx, enum mlx5dv_flow_table_type ft_type, | |
184 | void *domain, uint64_t flags, size_t actions_sz, | |
185 | uint64_t actions[]); | |
186 | void *(*dv_create_flow_action_packet_reformat) | |
187 | (struct ibv_context *ctx, | |
188 | enum mlx5dv_flow_action_packet_reformat_type reformat_type, | |
189 | enum mlx5dv_flow_table_type ft_type, | |
190 | struct mlx5dv_dr_domain *domain, | |
191 | uint32_t flags, size_t data_sz, void *data); | |
192 | void *(*dv_create_flow_action_tag)(uint32_t tag); | |
193 | int (*dv_destroy_flow)(void *flow); | |
194 | int (*dv_destroy_flow_matcher)(void *matcher); | |
195 | struct ibv_context *(*dv_open_device)(struct ibv_device *device); | |
196 | struct mlx5dv_devx_obj *(*devx_obj_create) | |
197 | (struct ibv_context *ctx, | |
198 | const void *in, size_t inlen, | |
199 | void *out, size_t outlen); | |
200 | int (*devx_obj_destroy)(struct mlx5dv_devx_obj *obj); | |
201 | int (*devx_obj_query)(struct mlx5dv_devx_obj *obj, | |
202 | const void *in, size_t inlen, | |
203 | void *out, size_t outlen); | |
204 | int (*devx_obj_modify)(struct mlx5dv_devx_obj *obj, | |
205 | const void *in, size_t inlen, | |
206 | void *out, size_t outlen); | |
207 | int (*devx_general_cmd)(struct ibv_context *context, | |
208 | const void *in, size_t inlen, | |
209 | void *out, size_t outlen); | |
11fdf7f2 TL |
210 | }; |
211 | ||
212 | const struct mlx5_glue *mlx5_glue; | |
213 | ||
214 | #endif /* MLX5_GLUE_H_ */ |