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