1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3 *
4 * Copyright (c) 2005 Topspin Communications. All rights reserved.
5 * Copyright (c) 2005 Intel Corporation. All rights reserved.
6 *
7 * This software is available to you under a choice of one of two
8 * licenses. You may choose to be licensed under the terms of the GNU
9 * General Public License (GPL) Version 2, available from the file
10 * COPYING in the main directory of this source tree, or the
11 * OpenIB.org BSD license below:
12 *
13 * Redistribution and use in source and binary forms, with or
14 * without modification, are permitted provided that the following
15 * conditions are met:
16 *
17 * - Redistributions of source code must retain the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer.
20 *
21 * - Redistributions in binary form must reproduce the above
22 * copyright notice, this list of conditions and the following
23 * disclaimer in the documentation and/or other materials
24 * provided with the distribution.
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33 * SOFTWARE.
34 *
35 * $FreeBSD$
36 */
37
38 #ifndef IB_USER_CM_H
39 #define IB_USER_CM_H
40
41 #ifdef _KERNEL
42 #include <linux/types.h>
43 #else
44 #include <infiniband/types.h>
45 #endif
46 #include <rdma/ib_user_sa.h>
47
48 #define IB_USER_CM_ABI_VERSION 5
49
50 enum {
51 IB_USER_CM_CMD_CREATE_ID,
52 IB_USER_CM_CMD_DESTROY_ID,
53 IB_USER_CM_CMD_ATTR_ID,
54
55 IB_USER_CM_CMD_LISTEN,
56 IB_USER_CM_CMD_NOTIFY,
57
58 IB_USER_CM_CMD_SEND_REQ,
59 IB_USER_CM_CMD_SEND_REP,
60 IB_USER_CM_CMD_SEND_RTU,
61 IB_USER_CM_CMD_SEND_DREQ,
62 IB_USER_CM_CMD_SEND_DREP,
63 IB_USER_CM_CMD_SEND_REJ,
64 IB_USER_CM_CMD_SEND_MRA,
65 IB_USER_CM_CMD_SEND_LAP,
66 IB_USER_CM_CMD_SEND_APR,
67 IB_USER_CM_CMD_SEND_SIDR_REQ,
68 IB_USER_CM_CMD_SEND_SIDR_REP,
69
70 IB_USER_CM_CMD_EVENT,
71 IB_USER_CM_CMD_INIT_QP_ATTR,
72 };
73 /*
74 * command ABI structures.
75 */
76 struct ib_ucm_cmd_hdr {
77 __u32 cmd;
78 __u16 in;
79 __u16 out;
80 };
81
82 struct ib_ucm_create_id {
83 __u64 uid;
84 __u64 response;
85 };
86
87 struct ib_ucm_create_id_resp {
88 __u32 id;
89 };
90
91 struct ib_ucm_destroy_id {
92 __u64 response;
93 __u32 id;
94 __u32 reserved;
95 };
96
97 struct ib_ucm_destroy_id_resp {
98 __u32 events_reported;
99 };
100
101 struct ib_ucm_attr_id {
102 __u64 response;
103 __u32 id;
104 __u32 reserved;
105 };
106
107 struct ib_ucm_attr_id_resp {
108 __be64 service_id;
109 __be64 service_mask;
110 __be32 local_id;
111 __be32 remote_id;
112 };
113
114 struct ib_ucm_init_qp_attr {
115 __u64 response;
116 __u32 id;
117 __u32 qp_state;
118 };
119
120 struct ib_ucm_listen {
121 __be64 service_id;
122 __be64 service_mask;
123 __u32 id;
124 __u32 reserved;
125 };
126
127 struct ib_ucm_notify {
128 __u32 id;
129 __u32 event;
130 };
131
132 struct ib_ucm_private_data {
133 __u64 data;
134 __u32 id;
135 __u8 len;
136 __u8 reserved[3];
137 };
138
139 struct ib_ucm_req {
140 __u32 id;
141 __u32 qpn;
142 __u32 qp_type;
143 __u32 psn;
144 __be64 sid;
145 __u64 data;
146 __u64 primary_path;
147 __u64 alternate_path;
148 __u8 len;
149 __u8 peer_to_peer;
150 __u8 responder_resources;
151 __u8 initiator_depth;
152 __u8 remote_cm_response_timeout;
153 __u8 flow_control;
154 __u8 local_cm_response_timeout;
155 __u8 retry_count;
156 __u8 rnr_retry_count;
157 __u8 max_cm_retries;
158 __u8 srq;
159 __u8 reserved[5];
160 };
161
162 struct ib_ucm_rep {
163 __u64 uid;
164 __u64 data;
165 __u32 id;
166 __u32 qpn;
167 __u32 psn;
168 __u8 len;
169 __u8 responder_resources;
170 __u8 initiator_depth;
171 __u8 target_ack_delay;
172 __u8 failover_accepted;
173 __u8 flow_control;
174 __u8 rnr_retry_count;
175 __u8 srq;
176 __u8 reserved[4];
177 };
178
179 struct ib_ucm_info {
180 __u32 id;
181 __u32 status;
182 __u64 info;
183 __u64 data;
184 __u8 info_len;
185 __u8 data_len;
186 __u8 reserved[6];
187 };
188
189 struct ib_ucm_mra {
190 __u64 data;
191 __u32 id;
192 __u8 len;
193 __u8 timeout;
194 __u8 reserved[2];
195 };
196
197 struct ib_ucm_lap {
198 __u64 path;
199 __u64 data;
200 __u32 id;
201 __u8 len;
202 __u8 reserved[3];
203 };
204
205 struct ib_ucm_sidr_req {
206 __u32 id;
207 __u32 timeout;
208 __be64 sid;
209 __u64 data;
210 __u64 path;
211 __u16 reserved_pkey;
212 __u8 len;
213 __u8 max_cm_retries;
214 __u8 reserved[4];
215 };
216
217 struct ib_ucm_sidr_rep {
218 __u32 id;
219 __u32 qpn;
220 __u32 qkey;
221 __u32 status;
222 __u64 info;
223 __u64 data;
224 __u8 info_len;
225 __u8 data_len;
226 __u8 reserved[6];
227 };
228 /*
229 * event notification ABI structures.
230 */
231 struct ib_ucm_event_get {
232 __u64 response;
233 __u64 data;
234 __u64 info;
235 __u8 data_len;
236 __u8 info_len;
237 __u8 reserved[6];
238 };
239
240 struct ib_ucm_req_event_resp {
241 struct ib_user_path_rec primary_path;
242 struct ib_user_path_rec alternate_path;
243 __be64 remote_ca_guid;
244 __u32 remote_qkey;
245 __u32 remote_qpn;
246 __u32 qp_type;
247 __u32 starting_psn;
248 __u8 responder_resources;
249 __u8 initiator_depth;
250 __u8 local_cm_response_timeout;
251 __u8 flow_control;
252 __u8 remote_cm_response_timeout;
253 __u8 retry_count;
254 __u8 rnr_retry_count;
255 __u8 srq;
256 __u8 port;
257 __u8 reserved[7];
258 };
259
260 struct ib_ucm_rep_event_resp {
261 __be64 remote_ca_guid;
262 __u32 remote_qkey;
263 __u32 remote_qpn;
264 __u32 starting_psn;
265 __u8 responder_resources;
266 __u8 initiator_depth;
267 __u8 target_ack_delay;
268 __u8 failover_accepted;
269 __u8 flow_control;
270 __u8 rnr_retry_count;
271 __u8 srq;
272 __u8 reserved[5];
273 };
274
275 struct ib_ucm_rej_event_resp {
276 __u32 reason;
277 /* ari in ib_ucm_event_get info field. */
278 };
279
280 struct ib_ucm_mra_event_resp {
281 __u8 timeout;
282 __u8 reserved[3];
283 };
284
285 struct ib_ucm_lap_event_resp {
286 struct ib_user_path_rec path;
287 };
288
289 struct ib_ucm_apr_event_resp {
290 __u32 status;
291 /* apr info in ib_ucm_event_get info field. */
292 };
293
294 struct ib_ucm_sidr_req_event_resp {
295 __u16 pkey;
296 __u8 port;
297 __u8 reserved;
298 };
299
300 struct ib_ucm_sidr_rep_event_resp {
301 __u32 status;
302 __u32 qkey;
303 __u32 qpn;
304 /* info in ib_ucm_event_get info field. */
305 };
306
307 #define IB_UCM_PRES_DATA 0x01
308 #define IB_UCM_PRES_INFO 0x02
309 #define IB_UCM_PRES_PRIMARY 0x04
310 #define IB_UCM_PRES_ALTERNATE 0x08
311
312 struct ib_ucm_event_resp {
313 __u64 uid;
314 __u32 id;
315 __u32 event;
316 __u32 present;
317 __u32 reserved;
318 union {
319 struct ib_ucm_req_event_resp req_resp;
320 struct ib_ucm_rep_event_resp rep_resp;
321 struct ib_ucm_rej_event_resp rej_resp;
322 struct ib_ucm_mra_event_resp mra_resp;
323 struct ib_ucm_lap_event_resp lap_resp;
324 struct ib_ucm_apr_event_resp apr_resp;
325
326 struct ib_ucm_sidr_req_event_resp sidr_req_resp;
327 struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
328
329 __u32 send_status;
330 } u;
331 };
332
333 #endif /* IB_USER_CM_H */
Cache object: d3ca4c4f4110d357b716a0eb29bd925c
|