1321936Shselasky/*
2321936Shselasky * Copyright (c) 2005-2011 Intel Corporation.  All rights reserved.
3321936Shselasky *
4321936Shselasky * This software is available to you under a choice of one of two
5321936Shselasky * licenses.  You may choose to be licensed under the terms of the GNU
6321936Shselasky * General Public License (GPL) Version 2, available from the file
7321936Shselasky * COPYING in the main directory of this source tree, or the
8321936Shselasky * OpenIB.org BSD license below:
9321936Shselasky *
10321936Shselasky *     Redistribution and use in source and binary forms, with or
11321936Shselasky *     without modification, are permitted provided that the following
12321936Shselasky *     conditions are met:
13321936Shselasky *
14321936Shselasky *      - Redistributions of source code must retain the above
15321936Shselasky *        copyright notice, this list of conditions and the following
16321936Shselasky *        disclaimer.
17321936Shselasky *
18321936Shselasky *      - Redistributions in binary form must reproduce the above
19321936Shselasky *        copyright notice, this list of conditions and the following
20321936Shselasky *        disclaimer in the documentation and/or other materials
21321936Shselasky *        provided with the distribution.
22321936Shselasky *
23321936Shselasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24321936Shselasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25321936Shselasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26321936Shselasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27321936Shselasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28321936Shselasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29321936Shselasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30321936Shselasky * SOFTWARE.
31321936Shselasky */
32321936Shselasky
33321936Shselasky#ifndef RDMA_CMA_ABI_H
34321936Shselasky#define RDMA_CMA_ABI_H
35321936Shselasky
36321936Shselasky#include <infiniband/kern-abi.h>
37321936Shselasky#include <rdma/ib_user_sa.h>
38321936Shselasky#include <infiniband/sa.h>
39321936Shselasky#include <netinet/in.h>
40321936Shselasky
41321936Shselasky/*
42321936Shselasky * This file must be kept in sync with the kernel's version of rdma_user_cm.h
43321936Shselasky */
44321936Shselasky
45321936Shselasky#define RDMA_USER_CM_MIN_ABI_VERSION	3
46321936Shselasky#define RDMA_USER_CM_MAX_ABI_VERSION	4
47321936Shselasky
48321936Shselasky#define RDMA_MAX_PRIVATE_DATA		256
49321936Shselasky
50321936Shselaskyenum {
51321936Shselasky	UCMA_CMD_CREATE_ID,
52321936Shselasky	UCMA_CMD_DESTROY_ID,
53321936Shselasky	UCMA_CMD_BIND_IP,
54321936Shselasky	UCMA_CMD_RESOLVE_IP,
55321936Shselasky	UCMA_CMD_RESOLVE_ROUTE,
56321936Shselasky	UCMA_CMD_QUERY_ROUTE,
57321936Shselasky	UCMA_CMD_CONNECT,
58321936Shselasky	UCMA_CMD_LISTEN,
59321936Shselasky	UCMA_CMD_ACCEPT,
60321936Shselasky	UCMA_CMD_REJECT,
61321936Shselasky	UCMA_CMD_DISCONNECT,
62321936Shselasky	UCMA_CMD_INIT_QP_ATTR,
63321936Shselasky	UCMA_CMD_GET_EVENT,
64321936Shselasky	UCMA_CMD_GET_OPTION,
65321936Shselasky	UCMA_CMD_SET_OPTION,
66321936Shselasky	UCMA_CMD_NOTIFY,
67321936Shselasky 	UCMA_CMD_JOIN_IP_MCAST,
68321936Shselasky 	UCMA_CMD_LEAVE_MCAST,
69321936Shselasky	UCMA_CMD_MIGRATE_ID,
70321936Shselasky	UCMA_CMD_QUERY,
71321936Shselasky	UCMA_CMD_BIND,
72321936Shselasky	UCMA_CMD_RESOLVE_ADDR,
73321936Shselasky	UCMA_CMD_JOIN_MCAST
74321936Shselasky};
75321936Shselasky
76321936Shselaskystruct ucma_abi_cmd_hdr {
77321936Shselasky	__u32 cmd;
78321936Shselasky	__u16 in;
79321936Shselasky	__u16 out;
80321936Shselasky};
81321936Shselasky
82321936Shselaskystruct ucma_abi_create_id {
83321936Shselasky	__u32 cmd;
84321936Shselasky	__u16 in;
85321936Shselasky	__u16 out;
86321936Shselasky	__u64 uid;
87321936Shselasky	__u64 response;
88321936Shselasky	__u16 ps;
89321936Shselasky	__u8  qp_type;
90321936Shselasky	__u8  reserved[5];
91321936Shselasky};
92321936Shselasky
93321936Shselaskystruct ucma_abi_create_id_resp {
94321936Shselasky	__u32 id;
95321936Shselasky};
96321936Shselasky
97321936Shselaskystruct ucma_abi_destroy_id {
98321936Shselasky	__u32 cmd;
99321936Shselasky	__u16 in;
100321936Shselasky	__u16 out;
101321936Shselasky	__u64 response;
102321936Shselasky	__u32 id;
103321936Shselasky	__u32 reserved;
104321936Shselasky};
105321936Shselasky
106321936Shselaskystruct ucma_abi_destroy_id_resp {
107321936Shselasky	__u32 events_reported;
108321936Shselasky};
109321936Shselasky
110321936Shselaskystruct ucma_abi_bind_ip {
111321936Shselasky	__u32 cmd;
112321936Shselasky	__u16 in;
113321936Shselasky	__u16 out;
114321936Shselasky	__u64 response;
115321936Shselasky	struct sockaddr_in6 addr;
116321936Shselasky	__u32 id;
117321936Shselasky};
118321936Shselasky
119321936Shselaskystruct ucma_abi_bind {
120321936Shselasky	__u32 cmd;
121321936Shselasky	__u16 in;
122321936Shselasky	__u16 out;
123321936Shselasky	__u32 id;
124321936Shselasky	__u16 addr_size;
125321936Shselasky	__u16 reserved;
126321936Shselasky	struct sockaddr_storage addr;
127321936Shselasky};
128321936Shselasky
129321936Shselaskystruct ucma_abi_resolve_ip {
130321936Shselasky	__u32 cmd;
131321936Shselasky	__u16 in;
132321936Shselasky	__u16 out;
133321936Shselasky	struct sockaddr_in6 src_addr;
134321936Shselasky	struct sockaddr_in6 dst_addr;
135321936Shselasky	__u32 id;
136321936Shselasky	__u32 timeout_ms;
137321936Shselasky};
138321936Shselasky
139321936Shselaskystruct ucma_abi_resolve_addr {
140321936Shselasky	__u32 cmd;
141321936Shselasky	__u16 in;
142321936Shselasky	__u16 out;
143321936Shselasky	__u32 id;
144321936Shselasky	__u32 timeout_ms;
145321936Shselasky	__u16 src_size;
146321936Shselasky	__u16 dst_size;
147321936Shselasky	__u32 reserved;
148321936Shselasky	struct sockaddr_storage src_addr;
149321936Shselasky	struct sockaddr_storage dst_addr;
150321936Shselasky};
151321936Shselasky
152321936Shselaskystruct ucma_abi_resolve_route {
153321936Shselasky	__u32 cmd;
154321936Shselasky	__u16 in;
155321936Shselasky	__u16 out;
156321936Shselasky	__u32 id;
157321936Shselasky	__u32 timeout_ms;
158321936Shselasky};
159321936Shselasky
160321936Shselaskyenum {
161321936Shselasky	UCMA_QUERY_ADDR,
162321936Shselasky	UCMA_QUERY_PATH,
163321936Shselasky	UCMA_QUERY_GID
164321936Shselasky};
165321936Shselasky
166321936Shselaskystruct ucma_abi_query {
167321936Shselasky	__u32 cmd;
168321936Shselasky	__u16 in;
169321936Shselasky	__u16 out;
170321936Shselasky	__u64 response;
171321936Shselasky	__u32 id;
172321936Shselasky	__u32 option;
173321936Shselasky};
174321936Shselasky
175321936Shselaskystruct ucma_abi_query_route_resp {
176321936Shselasky	__be64 node_guid;
177321936Shselasky	struct ib_user_path_rec ib_route[2];
178321936Shselasky	struct sockaddr_in6 src_addr;
179321936Shselasky	struct sockaddr_in6 dst_addr;
180321936Shselasky	__u32 num_paths;
181321936Shselasky	__u8 port_num;
182321936Shselasky	__u8 reserved[3];
183321936Shselasky};
184321936Shselasky
185321936Shselaskystruct ucma_abi_query_addr_resp {
186321936Shselasky	__be64 node_guid;
187321936Shselasky	__u8  port_num;
188321936Shselasky	__u8  reserved;
189321936Shselasky	__be16 pkey;
190321936Shselasky	__u16 src_size;
191321936Shselasky	__u16 dst_size;
192321936Shselasky	struct sockaddr_storage src_addr;
193321936Shselasky	struct sockaddr_storage dst_addr;
194321936Shselasky};
195321936Shselasky
196321936Shselaskystruct ucma_abi_query_path_resp {
197321936Shselasky	__u32 num_paths;
198321936Shselasky	__u32 reserved;
199321936Shselasky	struct ibv_path_data path_data[0];
200321936Shselasky};
201321936Shselasky
202321936Shselaskystruct ucma_abi_conn_param {
203321936Shselasky	__u32 qp_num;
204321936Shselasky	__u32 reserved;
205321936Shselasky	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
206321936Shselasky	__u8  private_data_len;
207321936Shselasky	__u8  srq;
208321936Shselasky	__u8  responder_resources;
209321936Shselasky	__u8  initiator_depth;
210321936Shselasky	__u8  flow_control;
211321936Shselasky	__u8  retry_count;
212321936Shselasky	__u8  rnr_retry_count;
213321936Shselasky	__u8  valid;
214321936Shselasky};
215321936Shselasky
216321936Shselaskystruct ucma_abi_ud_param {
217321936Shselasky	__u32 qp_num;
218321936Shselasky	__u32 qkey;
219321936Shselasky	struct ibv_kern_ah_attr ah_attr;
220321936Shselasky	__u8 private_data[RDMA_MAX_PRIVATE_DATA];
221321936Shselasky	__u8 private_data_len;
222321936Shselasky	__u8 reserved[7];
223321936Shselasky	__u8 reserved2[4];  /* Round to 8-byte boundary to support 32/64 */
224321936Shselasky};
225321936Shselasky
226321936Shselaskystruct ucma_abi_connect {
227321936Shselasky	__u32 cmd;
228321936Shselasky	__u16 in;
229321936Shselasky	__u16 out;
230321936Shselasky	struct ucma_abi_conn_param conn_param;
231321936Shselasky	__u32 id;
232321936Shselasky	__u32 reserved;
233321936Shselasky};
234321936Shselasky
235321936Shselaskystruct ucma_abi_listen {
236321936Shselasky	__u32 cmd;
237321936Shselasky	__u16 in;
238321936Shselasky	__u16 out;
239321936Shselasky	__u32 id;
240321936Shselasky	__u32 backlog;
241321936Shselasky};
242321936Shselasky
243321936Shselaskystruct ucma_abi_accept {
244321936Shselasky	__u32 cmd;
245321936Shselasky	__u16 in;
246321936Shselasky	__u16 out;
247321936Shselasky	__u64 uid;
248321936Shselasky	struct ucma_abi_conn_param conn_param;
249321936Shselasky	__u32 id;
250321936Shselasky	__u32 reserved;
251321936Shselasky};
252321936Shselasky
253321936Shselaskystruct ucma_abi_reject {
254321936Shselasky	__u32 cmd;
255321936Shselasky	__u16 in;
256321936Shselasky	__u16 out;
257321936Shselasky	__u32 id;
258321936Shselasky	__u8  private_data_len;
259321936Shselasky	__u8  reserved[3];
260321936Shselasky	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
261321936Shselasky};
262321936Shselasky
263321936Shselaskystruct ucma_abi_disconnect {
264321936Shselasky	__u32 cmd;
265321936Shselasky	__u16 in;
266321936Shselasky	__u16 out;
267321936Shselasky	__u32 id;
268321936Shselasky};
269321936Shselasky
270321936Shselaskystruct ucma_abi_init_qp_attr {
271321936Shselasky	__u32 cmd;
272321936Shselasky	__u16 in;
273321936Shselasky	__u16 out;
274321936Shselasky	__u64 response;
275321936Shselasky	__u32 id;
276321936Shselasky	__u32 qp_state;
277321936Shselasky};
278321936Shselasky
279321936Shselaskystruct ucma_abi_notify {
280321936Shselasky	__u32 cmd;
281321936Shselasky	__u16 in;
282321936Shselasky	__u16 out;
283321936Shselasky	__u32 id;
284321936Shselasky	__u32 event;
285321936Shselasky};
286321936Shselasky
287321936Shselaskystruct ucma_abi_join_ip_mcast {
288321936Shselasky	__u32 cmd;
289321936Shselasky	__u16 in;
290321936Shselasky	__u16 out;
291321936Shselasky	__u64 response;		/* ucma_abi_create_id_resp */
292321936Shselasky	__u64 uid;
293321936Shselasky	struct sockaddr_in6 addr;
294321936Shselasky	__u32 id;
295321936Shselasky};
296321936Shselasky
297321936Shselaskystruct ucma_abi_join_mcast {
298321936Shselasky	__u32 cmd;
299321936Shselasky	__u16 in;
300321936Shselasky	__u16 out;
301321936Shselasky	__u64 response;		/* rdma_ucma_create_id_resp */
302321936Shselasky	__u64 uid;
303321936Shselasky	__u32 id;
304321936Shselasky	__u16 addr_size;
305321936Shselasky	__u16 reserved;
306321936Shselasky	struct sockaddr_storage addr;
307321936Shselasky};
308321936Shselasky
309321936Shselaskystruct ucma_abi_get_event {
310321936Shselasky	__u32 cmd;
311321936Shselasky	__u16 in;
312321936Shselasky	__u16 out;
313321936Shselasky	__u64 response;
314321936Shselasky};
315321936Shselasky
316321936Shselaskystruct ucma_abi_event_resp {
317321936Shselasky	__u64 uid;
318321936Shselasky	__u32 id;
319321936Shselasky	__u32 event;
320321936Shselasky	__u32 status;
321321936Shselasky	union {
322321936Shselasky		struct ucma_abi_conn_param conn;
323321936Shselasky		struct ucma_abi_ud_param   ud;
324321936Shselasky	} param;
325321936Shselasky};
326321936Shselasky
327321936Shselaskystruct ucma_abi_set_option {
328321936Shselasky	__u32 cmd;
329321936Shselasky	__u16 in;
330321936Shselasky	__u16 out;
331321936Shselasky	__u64 optval;
332321936Shselasky	__u32 id;
333321936Shselasky	__u32 level;
334321936Shselasky	__u32 optname;
335321936Shselasky	__u32 optlen;
336321936Shselasky};
337321936Shselasky
338321936Shselaskystruct ucma_abi_migrate_id {
339321936Shselasky	__u32 cmd;
340321936Shselasky	__u16 in;
341321936Shselasky	__u16 out;
342321936Shselasky	__u64 response;
343321936Shselasky	__u32 id;
344321936Shselasky	__u32 fd;
345321936Shselasky};
346321936Shselasky
347321936Shselaskystruct ucma_abi_migrate_resp {
348321936Shselasky	__u32 events_reported;
349321936Shselasky};
350321936Shselasky
351321936Shselasky#endif /* RDMA_CMA_ABI_H */
352