IB: Move struct port_info from ipath to <rdma/ib_smi.h>
[safe/jmp/linux-2.6] / include / rdma / ib_user_cm.h
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  * $Id: ib_user_cm.h 4019 2005-11-11 00:33:09Z sean.hefty $
34  */
35
36 #ifndef IB_USER_CM_H
37 #define IB_USER_CM_H
38
39 #include <rdma/ib_user_sa.h>
40
41 #define IB_USER_CM_ABI_VERSION 4
42
43 enum {
44         IB_USER_CM_CMD_CREATE_ID,
45         IB_USER_CM_CMD_DESTROY_ID,
46         IB_USER_CM_CMD_ATTR_ID,
47
48         IB_USER_CM_CMD_LISTEN,
49         IB_USER_CM_CMD_ESTABLISH,
50
51         IB_USER_CM_CMD_SEND_REQ,
52         IB_USER_CM_CMD_SEND_REP,
53         IB_USER_CM_CMD_SEND_RTU,
54         IB_USER_CM_CMD_SEND_DREQ,
55         IB_USER_CM_CMD_SEND_DREP,
56         IB_USER_CM_CMD_SEND_REJ,
57         IB_USER_CM_CMD_SEND_MRA,
58         IB_USER_CM_CMD_SEND_LAP,
59         IB_USER_CM_CMD_SEND_APR,
60         IB_USER_CM_CMD_SEND_SIDR_REQ,
61         IB_USER_CM_CMD_SEND_SIDR_REP,
62
63         IB_USER_CM_CMD_EVENT,
64         IB_USER_CM_CMD_INIT_QP_ATTR,
65 };
66 /*
67  * command ABI structures.
68  */
69 struct ib_ucm_cmd_hdr {
70         __u32 cmd;
71         __u16 in;
72         __u16 out;
73 };
74
75 struct ib_ucm_create_id {
76         __u64 uid;
77         __u64 response;
78 };
79
80 struct ib_ucm_create_id_resp {
81         __u32 id;
82 };
83
84 struct ib_ucm_destroy_id {
85         __u64 response;
86         __u32 id;
87         __u32 reserved;
88 };
89
90 struct ib_ucm_destroy_id_resp {
91         __u32 events_reported;
92 };
93
94 struct ib_ucm_attr_id {
95         __u64 response;
96         __u32 id;
97         __u32 reserved;
98 };
99
100 struct ib_ucm_attr_id_resp {
101         __be64 service_id;
102         __be64 service_mask;
103         __be32 local_id;
104         __be32 remote_id;
105 };
106
107 struct ib_ucm_init_qp_attr {
108         __u64 response;
109         __u32 id;
110         __u32 qp_state;
111 };
112
113 struct ib_ucm_listen {
114         __be64 service_id;
115         __be64 service_mask;
116         __u32 id;
117         __u32 reserved;
118 };
119
120 struct ib_ucm_establish {
121         __u32 id;
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 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 */