1178784Skmacy/*
2178784Skmacy * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
3178784Skmacy *
4178784Skmacy * This software is available to you under a choice of one of two
5178784Skmacy * licenses.  You may choose to be licensed under the terms of the GNU
6178784Skmacy * General Public License (GPL) Version 2, available from the file
7178784Skmacy * COPYING in the main directory of this source tree, or the
8178784Skmacy * OpenIB.org BSD license below:
9178784Skmacy *
10178784Skmacy *     Redistribution and use in source and binary forms, with or
11178784Skmacy *     without modification, are permitted provided that the following
12178784Skmacy *     conditions are met:
13178784Skmacy *
14178784Skmacy *      - Redistributions of source code must retain the above
15178784Skmacy *        copyright notice, this list of conditions and the following
16178784Skmacy *        disclaimer.
17178784Skmacy *
18178784Skmacy *      - Redistributions in binary form must reproduce the above
19178784Skmacy *        copyright notice, this list of conditions and the following
20178784Skmacy *        disclaimer in the documentation and/or other materials
21178784Skmacy *        provided with the distribution.
22178784Skmacy *
23178784Skmacy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24178784Skmacy * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25178784Skmacy * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26178784Skmacy * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27178784Skmacy * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28178784Skmacy * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29178784Skmacy * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30178784Skmacy * SOFTWARE.
31178784Skmacy *
32178784Skmacy * $FreeBSD$
33178784Skmacy */
34178784Skmacy
35178784Skmacy#ifndef RDMA_USER_CM_H
36178784Skmacy#define RDMA_USER_CM_H
37178784Skmacy
38178784Skmacy#include <rdma/ib_user_verbs.h>
39178784Skmacy#include <rdma/ib_user_sa.h>
40178784Skmacy
41178784Skmacy#define RDMA_USER_CM_ABI_VERSION	4
42178784Skmacy
43178784Skmacy#define RDMA_MAX_PRIVATE_DATA		256
44178784Skmacy
45178784Skmacyenum {
46178784Skmacy	RDMA_USER_CM_CMD_CREATE_ID,
47178784Skmacy	RDMA_USER_CM_CMD_DESTROY_ID,
48178784Skmacy	RDMA_USER_CM_CMD_BIND_ADDR,
49178784Skmacy	RDMA_USER_CM_CMD_RESOLVE_ADDR,
50178784Skmacy	RDMA_USER_CM_CMD_RESOLVE_ROUTE,
51178784Skmacy	RDMA_USER_CM_CMD_QUERY_ROUTE,
52178784Skmacy	RDMA_USER_CM_CMD_CONNECT,
53178784Skmacy	RDMA_USER_CM_CMD_LISTEN,
54178784Skmacy	RDMA_USER_CM_CMD_ACCEPT,
55178784Skmacy	RDMA_USER_CM_CMD_REJECT,
56178784Skmacy	RDMA_USER_CM_CMD_DISCONNECT,
57178784Skmacy	RDMA_USER_CM_CMD_INIT_QP_ATTR,
58178784Skmacy	RDMA_USER_CM_CMD_GET_EVENT,
59178784Skmacy	RDMA_USER_CM_CMD_GET_OPTION,
60178784Skmacy	RDMA_USER_CM_CMD_SET_OPTION,
61178784Skmacy	RDMA_USER_CM_CMD_NOTIFY,
62178784Skmacy	RDMA_USER_CM_CMD_JOIN_MCAST,
63178784Skmacy	RDMA_USER_CM_CMD_LEAVE_MCAST
64178784Skmacy};
65178784Skmacy
66178784Skmacy/*
67178784Skmacy * command ABI structures.
68178784Skmacy */
69178784Skmacystruct rdma_ucm_cmd_hdr {
70178784Skmacy	__u32 cmd;
71178784Skmacy	__u16 in;
72178784Skmacy	__u16 out;
73178784Skmacy};
74178784Skmacy
75178784Skmacystruct rdma_ucm_create_id {
76178784Skmacy	__u64 uid;
77178784Skmacy	__u64 response;
78178784Skmacy	__u16 ps;
79178784Skmacy	__u8  reserved[6];
80178784Skmacy};
81178784Skmacy
82178784Skmacystruct rdma_ucm_create_id_resp {
83178784Skmacy	__u32 id;
84178784Skmacy};
85178784Skmacy
86178784Skmacystruct rdma_ucm_destroy_id {
87178784Skmacy	__u64 response;
88178784Skmacy	__u32 id;
89178784Skmacy	__u32 reserved;
90178784Skmacy};
91178784Skmacy
92178784Skmacystruct rdma_ucm_destroy_id_resp {
93178784Skmacy	__u32 events_reported;
94178784Skmacy};
95178784Skmacy
96178784Skmacystruct rdma_ucm_bind_addr {
97178784Skmacy	__u64 response;
98178784Skmacy	struct sockaddr_in6 addr;
99178784Skmacy	__u32 id;
100178784Skmacy};
101178784Skmacy
102178784Skmacystruct rdma_ucm_resolve_addr {
103178784Skmacy	struct sockaddr_in6 src_addr;
104178784Skmacy	struct sockaddr_in6 dst_addr;
105178784Skmacy	__u32 id;
106178784Skmacy	__u32 timeout_ms;
107178784Skmacy};
108178784Skmacy
109178784Skmacystruct rdma_ucm_resolve_route {
110178784Skmacy	__u32 id;
111178784Skmacy	__u32 timeout_ms;
112178784Skmacy};
113178784Skmacy
114178784Skmacystruct rdma_ucm_query_route {
115178784Skmacy	__u64 response;
116178784Skmacy	__u32 id;
117178784Skmacy	__u32 reserved;
118178784Skmacy};
119178784Skmacy
120178784Skmacystruct rdma_ucm_query_route_resp {
121178784Skmacy	__u64 node_guid;
122178784Skmacy	struct ib_user_path_rec ib_route[2];
123178784Skmacy	struct sockaddr_in6 src_addr;
124178784Skmacy	struct sockaddr_in6 dst_addr;
125178784Skmacy	__u32 num_paths;
126178784Skmacy	__u8 port_num;
127178784Skmacy	__u8 reserved[3];
128178784Skmacy};
129178784Skmacy
130178784Skmacystruct rdma_ucm_conn_param {
131178784Skmacy	__u32 qp_num;
132178784Skmacy	__u32 reserved;
133178784Skmacy	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
134178784Skmacy	__u8  private_data_len;
135178784Skmacy	__u8  srq;
136178784Skmacy	__u8  responder_resources;
137178784Skmacy	__u8  initiator_depth;
138178784Skmacy	__u8  flow_control;
139178784Skmacy	__u8  retry_count;
140178784Skmacy	__u8  rnr_retry_count;
141178784Skmacy	__u8  valid;
142178784Skmacy};
143178784Skmacy
144178784Skmacystruct rdma_ucm_ud_param {
145178784Skmacy	__u32 qp_num;
146178784Skmacy	__u32 qkey;
147178784Skmacy	struct ib_uverbs_ah_attr ah_attr;
148178784Skmacy	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
149178784Skmacy	__u8  private_data_len;
150178784Skmacy	__u8  reserved[7];
151178784Skmacy};
152178784Skmacy
153178784Skmacystruct rdma_ucm_connect {
154178784Skmacy	struct rdma_ucm_conn_param conn_param;
155178784Skmacy	__u32 id;
156178784Skmacy	__u32 reserved;
157178784Skmacy};
158178784Skmacy
159178784Skmacystruct rdma_ucm_listen {
160178784Skmacy	__u32 id;
161178784Skmacy	__u32 backlog;
162178784Skmacy};
163178784Skmacy
164178784Skmacystruct rdma_ucm_accept {
165178784Skmacy	__u64 uid;
166178784Skmacy	struct rdma_ucm_conn_param conn_param;
167178784Skmacy	__u32 id;
168178784Skmacy	__u32 reserved;
169178784Skmacy};
170178784Skmacy
171178784Skmacystruct rdma_ucm_reject {
172178784Skmacy	__u32 id;
173178784Skmacy	__u8  private_data_len;
174178784Skmacy	__u8  reserved[3];
175178784Skmacy	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
176178784Skmacy};
177178784Skmacy
178178784Skmacystruct rdma_ucm_disconnect {
179178784Skmacy	__u32 id;
180178784Skmacy};
181178784Skmacy
182178784Skmacystruct rdma_ucm_init_qp_attr {
183178784Skmacy	__u64 response;
184178784Skmacy	__u32 id;
185178784Skmacy	__u32 qp_state;
186178784Skmacy};
187178784Skmacy
188178784Skmacystruct rdma_ucm_notify {
189178784Skmacy	__u32 id;
190178784Skmacy	__u32 event;
191178784Skmacy};
192178784Skmacy
193178784Skmacystruct rdma_ucm_join_mcast {
194178784Skmacy	__u64 response;		/* rdma_ucm_create_id_resp */
195178784Skmacy	__u64 uid;
196178784Skmacy	struct sockaddr_in6 addr;
197178784Skmacy	__u32 id;
198178784Skmacy};
199178784Skmacy
200178784Skmacystruct rdma_ucm_get_event {
201178784Skmacy	__u64 response;
202178784Skmacy};
203178784Skmacy
204178784Skmacystruct rdma_ucm_event_resp {
205178784Skmacy	__u64 uid;
206178784Skmacy	__u32 id;
207178784Skmacy	__u32 event;
208178784Skmacy	__u32 status;
209178784Skmacy	union {
210178784Skmacy		struct rdma_ucm_conn_param conn;
211178784Skmacy		struct rdma_ucm_ud_param   ud;
212178784Skmacy	} param;
213178784Skmacy};
214178784Skmacy
215178784Skmacy#endif /* RDMA_USER_CM_H */
216