xref: /freebsd/contrib/ofed/libibverbs/kern-abi.h (revision 87181516ef48be852d5e5fee53c6e0dbfc62f21e)
1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky  * Copyright (c) 2005 Topspin Communications.  All rights reserved.
3*d6b92ffaSHans Petter Selasky  * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
4*d6b92ffaSHans Petter Selasky  * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
5*d6b92ffaSHans Petter Selasky  *
6*d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
7*d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
8*d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
9*d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
10*d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
11*d6b92ffaSHans Petter Selasky  *
12*d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
13*d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
14*d6b92ffaSHans Petter Selasky  *     conditions are met:
15*d6b92ffaSHans Petter Selasky  *
16*d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
17*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
18*d6b92ffaSHans Petter Selasky  *        disclaimer.
19*d6b92ffaSHans Petter Selasky  *
20*d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
21*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
22*d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
23*d6b92ffaSHans Petter Selasky  *        provided with the distribution.
24*d6b92ffaSHans Petter Selasky  *
25*d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26*d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27*d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28*d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29*d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30*d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31*d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32*d6b92ffaSHans Petter Selasky  * SOFTWARE.
33*d6b92ffaSHans Petter Selasky  */
34*d6b92ffaSHans Petter Selasky 
35*d6b92ffaSHans Petter Selasky #ifndef KERN_ABI_H
36*d6b92ffaSHans Petter Selasky #define KERN_ABI_H
37*d6b92ffaSHans Petter Selasky 
38*d6b92ffaSHans Petter Selasky #include <infiniband/types.h>
39*d6b92ffaSHans Petter Selasky 
40*d6b92ffaSHans Petter Selasky /*
41*d6b92ffaSHans Petter Selasky  * This file must be kept in sync with the kernel's version of
42*d6b92ffaSHans Petter Selasky  * drivers/infiniband/include/ib_user_verbs.h
43*d6b92ffaSHans Petter Selasky  */
44*d6b92ffaSHans Petter Selasky 
45*d6b92ffaSHans Petter Selasky /*
46*d6b92ffaSHans Petter Selasky  * The minimum and maximum kernel ABI that we can handle.
47*d6b92ffaSHans Petter Selasky  */
48*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_MIN_ABI_VERSION	3
49*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_MAX_ABI_VERSION	6
50*d6b92ffaSHans Petter Selasky 
51*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_THRESHOLD    50
52*d6b92ffaSHans Petter Selasky 
53*d6b92ffaSHans Petter Selasky enum {
54*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_GET_CONTEXT,
55*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_DEVICE,
56*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_PORT,
57*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ALLOC_PD,
58*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEALLOC_PD,
59*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_AH,
60*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_AH,
61*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_AH,
62*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_AH,
63*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REG_MR,
64*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REG_SMR,
65*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REREG_MR,
66*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_MR,
67*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEREG_MR,
68*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ALLOC_MW,
69*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_BIND_MW,
70*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEALLOC_MW,
71*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
72*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_CQ,
73*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_RESIZE_CQ,
74*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_CQ,
75*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POLL_CQ,
76*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_PEEK_CQ,
77*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
78*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_QP,
79*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_QP,
80*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_QP,
81*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_QP,
82*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_SEND,
83*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_RECV,
84*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ATTACH_MCAST,
85*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DETACH_MCAST,
86*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_SRQ,
87*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_SRQ,
88*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_SRQ,
89*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_SRQ,
90*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_SRQ_RECV,
91*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_OPEN_XRCD,
92*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CLOSE_XRCD,
93*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_XSRQ,
94*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_OPEN_QP
95*d6b92ffaSHans Petter Selasky };
96*d6b92ffaSHans Petter Selasky 
97*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_COMMAND_MASK		0xff
98*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_FLAGS_MASK		0xff000000u
99*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_FLAGS_SHIFT		24
100*d6b92ffaSHans Petter Selasky 
101*d6b92ffaSHans Petter Selasky 
102*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_FLAG_EXTENDED		0x80ul
103*d6b92ffaSHans Petter Selasky 
104*d6b92ffaSHans Petter Selasky /* use this mask for creating extended commands */
105*d6b92ffaSHans Petter Selasky #define IB_USER_VERBS_CMD_EXTENDED_MASK \
106*d6b92ffaSHans Petter Selasky 	(IB_USER_VERBS_CMD_FLAG_EXTENDED << \
107*d6b92ffaSHans Petter Selasky 	 IB_USER_VERBS_CMD_FLAGS_SHIFT)
108*d6b92ffaSHans Petter Selasky 
109*d6b92ffaSHans Petter Selasky 
110*d6b92ffaSHans Petter Selasky enum {
111*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_DEVICE_EX = IB_USER_VERBS_CMD_EXTENDED_MASK |
112*d6b92ffaSHans Petter Selasky 					    IB_USER_VERBS_CMD_QUERY_DEVICE,
113*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_QP_EX = IB_USER_VERBS_CMD_EXTENDED_MASK |
114*d6b92ffaSHans Petter Selasky 					 IB_USER_VERBS_CMD_CREATE_QP,
115*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_CQ_EX = IB_USER_VERBS_CMD_EXTENDED_MASK |
116*d6b92ffaSHans Petter Selasky 						IB_USER_VERBS_CMD_CREATE_CQ,
117*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_QP_EX = IB_USER_VERBS_CMD_EXTENDED_MASK |
118*d6b92ffaSHans Petter Selasky 						IB_USER_VERBS_CMD_MODIFY_QP,
119*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_EXTENDED_MASK +
120*d6b92ffaSHans Petter Selasky 					IB_USER_VERBS_CMD_THRESHOLD,
121*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_FLOW,
122*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_WQ,
123*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_WQ,
124*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_WQ,
125*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_RWQ_IND_TBL,
126*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_RWQ_IND_TBL,
127*d6b92ffaSHans Petter Selasky };
128*d6b92ffaSHans Petter Selasky 
129*d6b92ffaSHans Petter Selasky /*
130*d6b92ffaSHans Petter Selasky  * Make sure that all structs defined in this file remain laid out so
131*d6b92ffaSHans Petter Selasky  * that they pack the same way on 32-bit and 64-bit architectures (to
132*d6b92ffaSHans Petter Selasky  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
133*d6b92ffaSHans Petter Selasky  * Specifically:
134*d6b92ffaSHans Petter Selasky  *  - Do not use pointer types -- pass pointers in __u64 instead.
135*d6b92ffaSHans Petter Selasky  *  - Make sure that any structure larger than 4 bytes is padded to a
136*d6b92ffaSHans Petter Selasky  *    multiple of 8 bytes.  Otherwise the structure size will be
137*d6b92ffaSHans Petter Selasky  *    different between 32-bit and 64-bit architectures.
138*d6b92ffaSHans Petter Selasky  */
139*d6b92ffaSHans Petter Selasky 
140*d6b92ffaSHans Petter Selasky struct hdr {
141*d6b92ffaSHans Petter Selasky 	__u32 command;
142*d6b92ffaSHans Petter Selasky 	__u16 in_words;
143*d6b92ffaSHans Petter Selasky 	__u16 out_words;
144*d6b92ffaSHans Petter Selasky };
145*d6b92ffaSHans Petter Selasky 
146*d6b92ffaSHans Petter Selasky struct response_hdr {
147*d6b92ffaSHans Petter Selasky 	__u64 response;
148*d6b92ffaSHans Petter Selasky };
149*d6b92ffaSHans Petter Selasky 
150*d6b92ffaSHans Petter Selasky struct ex_hdr {
151*d6b92ffaSHans Petter Selasky 	struct {
152*d6b92ffaSHans Petter Selasky 		__u32 command;
153*d6b92ffaSHans Petter Selasky 		__u16 in_words;
154*d6b92ffaSHans Petter Selasky 		__u16 out_words;
155*d6b92ffaSHans Petter Selasky 	};
156*d6b92ffaSHans Petter Selasky 	struct {
157*d6b92ffaSHans Petter Selasky 		__u64 response;
158*d6b92ffaSHans Petter Selasky 	};
159*d6b92ffaSHans Petter Selasky 	struct {
160*d6b92ffaSHans Petter Selasky 		__u16 provider_in_words;
161*d6b92ffaSHans Petter Selasky 		__u16 provider_out_words;
162*d6b92ffaSHans Petter Selasky 		__u32 reserved;
163*d6b92ffaSHans Petter Selasky 	};
164*d6b92ffaSHans Petter Selasky };
165*d6b92ffaSHans Petter Selasky 
166*d6b92ffaSHans Petter Selasky struct ibv_kern_async_event {
167*d6b92ffaSHans Petter Selasky 	__u64 element;
168*d6b92ffaSHans Petter Selasky 	__u32 event_type;
169*d6b92ffaSHans Petter Selasky 	__u32 reserved;
170*d6b92ffaSHans Petter Selasky };
171*d6b92ffaSHans Petter Selasky 
172*d6b92ffaSHans Petter Selasky struct ibv_comp_event {
173*d6b92ffaSHans Petter Selasky 	__u64 cq_handle;
174*d6b92ffaSHans Petter Selasky };
175*d6b92ffaSHans Petter Selasky 
176*d6b92ffaSHans Petter Selasky /*
177*d6b92ffaSHans Petter Selasky  * All commands from userspace should start with a __u32 command field
178*d6b92ffaSHans Petter Selasky  * followed by __u16 in_words and out_words fields (which give the
179*d6b92ffaSHans Petter Selasky  * length of the command block and response buffer if any in 32-bit
180*d6b92ffaSHans Petter Selasky  * words).  The kernel driver will read these fields first and read
181*d6b92ffaSHans Petter Selasky  * the rest of the command struct based on these value.
182*d6b92ffaSHans Petter Selasky  */
183*d6b92ffaSHans Petter Selasky 
184*d6b92ffaSHans Petter Selasky struct ibv_query_params {
185*d6b92ffaSHans Petter Selasky 	__u32 command;
186*d6b92ffaSHans Petter Selasky 	__u16 in_words;
187*d6b92ffaSHans Petter Selasky 	__u16 out_words;
188*d6b92ffaSHans Petter Selasky 	__u64 response;
189*d6b92ffaSHans Petter Selasky };
190*d6b92ffaSHans Petter Selasky 
191*d6b92ffaSHans Petter Selasky struct ibv_query_params_resp {
192*d6b92ffaSHans Petter Selasky 	__u32 num_cq_events;
193*d6b92ffaSHans Petter Selasky };
194*d6b92ffaSHans Petter Selasky 
195*d6b92ffaSHans Petter Selasky struct ibv_get_context {
196*d6b92ffaSHans Petter Selasky 	__u32 command;
197*d6b92ffaSHans Petter Selasky 	__u16 in_words;
198*d6b92ffaSHans Petter Selasky 	__u16 out_words;
199*d6b92ffaSHans Petter Selasky 	__u64 response;
200*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
201*d6b92ffaSHans Petter Selasky };
202*d6b92ffaSHans Petter Selasky 
203*d6b92ffaSHans Petter Selasky struct ibv_get_context_resp {
204*d6b92ffaSHans Petter Selasky 	__u32 async_fd;
205*d6b92ffaSHans Petter Selasky 	__u32 num_comp_vectors;
206*d6b92ffaSHans Petter Selasky };
207*d6b92ffaSHans Petter Selasky 
208*d6b92ffaSHans Petter Selasky struct ibv_query_device {
209*d6b92ffaSHans Petter Selasky 	__u32 command;
210*d6b92ffaSHans Petter Selasky 	__u16 in_words;
211*d6b92ffaSHans Petter Selasky 	__u16 out_words;
212*d6b92ffaSHans Petter Selasky 	__u64 response;
213*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
214*d6b92ffaSHans Petter Selasky };
215*d6b92ffaSHans Petter Selasky 
216*d6b92ffaSHans Petter Selasky struct ibv_query_device_resp {
217*d6b92ffaSHans Petter Selasky 	__u64 fw_ver;
218*d6b92ffaSHans Petter Selasky 	__be64 node_guid;
219*d6b92ffaSHans Petter Selasky 	__be64 sys_image_guid;
220*d6b92ffaSHans Petter Selasky 	__u64 max_mr_size;
221*d6b92ffaSHans Petter Selasky 	__u64 page_size_cap;
222*d6b92ffaSHans Petter Selasky 	__u32 vendor_id;
223*d6b92ffaSHans Petter Selasky 	__u32 vendor_part_id;
224*d6b92ffaSHans Petter Selasky 	__u32 hw_ver;
225*d6b92ffaSHans Petter Selasky 	__u32 max_qp;
226*d6b92ffaSHans Petter Selasky 	__u32 max_qp_wr;
227*d6b92ffaSHans Petter Selasky 	__u32 device_cap_flags;
228*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
229*d6b92ffaSHans Petter Selasky 	__u32 max_sge_rd;
230*d6b92ffaSHans Petter Selasky 	__u32 max_cq;
231*d6b92ffaSHans Petter Selasky 	__u32 max_cqe;
232*d6b92ffaSHans Petter Selasky 	__u32 max_mr;
233*d6b92ffaSHans Petter Selasky 	__u32 max_pd;
234*d6b92ffaSHans Petter Selasky 	__u32 max_qp_rd_atom;
235*d6b92ffaSHans Petter Selasky 	__u32 max_ee_rd_atom;
236*d6b92ffaSHans Petter Selasky 	__u32 max_res_rd_atom;
237*d6b92ffaSHans Petter Selasky 	__u32 max_qp_init_rd_atom;
238*d6b92ffaSHans Petter Selasky 	__u32 max_ee_init_rd_atom;
239*d6b92ffaSHans Petter Selasky 	__u32 atomic_cap;
240*d6b92ffaSHans Petter Selasky 	__u32 max_ee;
241*d6b92ffaSHans Petter Selasky 	__u32 max_rdd;
242*d6b92ffaSHans Petter Selasky 	__u32 max_mw;
243*d6b92ffaSHans Petter Selasky 	__u32 max_raw_ipv6_qp;
244*d6b92ffaSHans Petter Selasky 	__u32 max_raw_ethy_qp;
245*d6b92ffaSHans Petter Selasky 	__u32 max_mcast_grp;
246*d6b92ffaSHans Petter Selasky 	__u32 max_mcast_qp_attach;
247*d6b92ffaSHans Petter Selasky 	__u32 max_total_mcast_qp_attach;
248*d6b92ffaSHans Petter Selasky 	__u32 max_ah;
249*d6b92ffaSHans Petter Selasky 	__u32 max_fmr;
250*d6b92ffaSHans Petter Selasky 	__u32 max_map_per_fmr;
251*d6b92ffaSHans Petter Selasky 	__u32 max_srq;
252*d6b92ffaSHans Petter Selasky 	__u32 max_srq_wr;
253*d6b92ffaSHans Petter Selasky 	__u32 max_srq_sge;
254*d6b92ffaSHans Petter Selasky 	__u16 max_pkeys;
255*d6b92ffaSHans Petter Selasky 	__u8  local_ca_ack_delay;
256*d6b92ffaSHans Petter Selasky 	__u8  phys_port_cnt;
257*d6b92ffaSHans Petter Selasky 	__u8  reserved[4];
258*d6b92ffaSHans Petter Selasky };
259*d6b92ffaSHans Petter Selasky 
260*d6b92ffaSHans Petter Selasky struct ibv_query_device_ex {
261*d6b92ffaSHans Petter Selasky 	struct ex_hdr	hdr;
262*d6b92ffaSHans Petter Selasky 	__u32		comp_mask;
263*d6b92ffaSHans Petter Selasky 	__u32		reserved;
264*d6b92ffaSHans Petter Selasky };
265*d6b92ffaSHans Petter Selasky 
266*d6b92ffaSHans Petter Selasky struct ibv_odp_caps_resp {
267*d6b92ffaSHans Petter Selasky 	__u64 general_caps;
268*d6b92ffaSHans Petter Selasky 	struct {
269*d6b92ffaSHans Petter Selasky 		__u32 rc_odp_caps;
270*d6b92ffaSHans Petter Selasky 		__u32 uc_odp_caps;
271*d6b92ffaSHans Petter Selasky 		__u32 ud_odp_caps;
272*d6b92ffaSHans Petter Selasky 	} per_transport_caps;
273*d6b92ffaSHans Petter Selasky 	__u32 reserved;
274*d6b92ffaSHans Petter Selasky };
275*d6b92ffaSHans Petter Selasky 
276*d6b92ffaSHans Petter Selasky struct ibv_rss_caps_resp {
277*d6b92ffaSHans Petter Selasky 	__u32 supported_qpts;
278*d6b92ffaSHans Petter Selasky 	__u32 max_rwq_indirection_tables;
279*d6b92ffaSHans Petter Selasky 	__u32 max_rwq_indirection_table_size;
280*d6b92ffaSHans Petter Selasky 	__u32 reserved;
281*d6b92ffaSHans Petter Selasky };
282*d6b92ffaSHans Petter Selasky 
283*d6b92ffaSHans Petter Selasky struct ibv_query_device_resp_ex {
284*d6b92ffaSHans Petter Selasky 	struct ibv_query_device_resp base;
285*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
286*d6b92ffaSHans Petter Selasky 	__u32 response_length;
287*d6b92ffaSHans Petter Selasky 	struct ibv_odp_caps_resp odp_caps;
288*d6b92ffaSHans Petter Selasky 	__u64 timestamp_mask;
289*d6b92ffaSHans Petter Selasky 	__u64 hca_core_clock;
290*d6b92ffaSHans Petter Selasky 	__u64 device_cap_flags_ex;
291*d6b92ffaSHans Petter Selasky 	struct ibv_rss_caps_resp rss_caps;
292*d6b92ffaSHans Petter Selasky 	__u32  max_wq_type_rq;
293*d6b92ffaSHans Petter Selasky 	__u32 raw_packet_caps;
294*d6b92ffaSHans Petter Selasky };
295*d6b92ffaSHans Petter Selasky 
296*d6b92ffaSHans Petter Selasky struct ibv_query_port {
297*d6b92ffaSHans Petter Selasky 	__u32 command;
298*d6b92ffaSHans Petter Selasky 	__u16 in_words;
299*d6b92ffaSHans Petter Selasky 	__u16 out_words;
300*d6b92ffaSHans Petter Selasky 	__u64 response;
301*d6b92ffaSHans Petter Selasky 	__u8  port_num;
302*d6b92ffaSHans Petter Selasky 	__u8  reserved[7];
303*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
304*d6b92ffaSHans Petter Selasky };
305*d6b92ffaSHans Petter Selasky 
306*d6b92ffaSHans Petter Selasky struct ibv_query_port_resp {
307*d6b92ffaSHans Petter Selasky 	__u32 port_cap_flags;
308*d6b92ffaSHans Petter Selasky 	__u32 max_msg_sz;
309*d6b92ffaSHans Petter Selasky 	__u32 bad_pkey_cntr;
310*d6b92ffaSHans Petter Selasky 	__u32 qkey_viol_cntr;
311*d6b92ffaSHans Petter Selasky 	__u32 gid_tbl_len;
312*d6b92ffaSHans Petter Selasky 	__u16 pkey_tbl_len;
313*d6b92ffaSHans Petter Selasky 	__u16 lid;
314*d6b92ffaSHans Petter Selasky 	__u16 sm_lid;
315*d6b92ffaSHans Petter Selasky 	__u8  state;
316*d6b92ffaSHans Petter Selasky 	__u8  max_mtu;
317*d6b92ffaSHans Petter Selasky 	__u8  active_mtu;
318*d6b92ffaSHans Petter Selasky 	__u8  lmc;
319*d6b92ffaSHans Petter Selasky 	__u8  max_vl_num;
320*d6b92ffaSHans Petter Selasky 	__u8  sm_sl;
321*d6b92ffaSHans Petter Selasky 	__u8  subnet_timeout;
322*d6b92ffaSHans Petter Selasky 	__u8  init_type_reply;
323*d6b92ffaSHans Petter Selasky 	__u8  active_width;
324*d6b92ffaSHans Petter Selasky 	__u8  active_speed;
325*d6b92ffaSHans Petter Selasky 	__u8  phys_state;
326*d6b92ffaSHans Petter Selasky 	__u8  link_layer;
327*d6b92ffaSHans Petter Selasky 	__u8  reserved[2];
328*d6b92ffaSHans Petter Selasky };
329*d6b92ffaSHans Petter Selasky 
330*d6b92ffaSHans Petter Selasky struct ibv_alloc_pd {
331*d6b92ffaSHans Petter Selasky 	__u32 command;
332*d6b92ffaSHans Petter Selasky 	__u16 in_words;
333*d6b92ffaSHans Petter Selasky 	__u16 out_words;
334*d6b92ffaSHans Petter Selasky 	__u64 response;
335*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
336*d6b92ffaSHans Petter Selasky };
337*d6b92ffaSHans Petter Selasky 
338*d6b92ffaSHans Petter Selasky struct ibv_alloc_pd_resp {
339*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
340*d6b92ffaSHans Petter Selasky };
341*d6b92ffaSHans Petter Selasky 
342*d6b92ffaSHans Petter Selasky struct ibv_dealloc_pd {
343*d6b92ffaSHans Petter Selasky 	__u32 command;
344*d6b92ffaSHans Petter Selasky 	__u16 in_words;
345*d6b92ffaSHans Petter Selasky 	__u16 out_words;
346*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
347*d6b92ffaSHans Petter Selasky };
348*d6b92ffaSHans Petter Selasky 
349*d6b92ffaSHans Petter Selasky struct ibv_open_xrcd {
350*d6b92ffaSHans Petter Selasky 	__u32 command;
351*d6b92ffaSHans Petter Selasky 	__u16 in_words;
352*d6b92ffaSHans Petter Selasky 	__u16 out_words;
353*d6b92ffaSHans Petter Selasky 	__u64 response;
354*d6b92ffaSHans Petter Selasky 	__u32 fd;
355*d6b92ffaSHans Petter Selasky 	__u32 oflags;
356*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
357*d6b92ffaSHans Petter Selasky };
358*d6b92ffaSHans Petter Selasky 
359*d6b92ffaSHans Petter Selasky struct ibv_open_xrcd_resp {
360*d6b92ffaSHans Petter Selasky 	__u32 xrcd_handle;
361*d6b92ffaSHans Petter Selasky };
362*d6b92ffaSHans Petter Selasky 
363*d6b92ffaSHans Petter Selasky struct ibv_close_xrcd {
364*d6b92ffaSHans Petter Selasky 	__u32 command;
365*d6b92ffaSHans Petter Selasky 	__u16 in_words;
366*d6b92ffaSHans Petter Selasky 	__u16 out_words;
367*d6b92ffaSHans Petter Selasky 	__u32 xrcd_handle;
368*d6b92ffaSHans Petter Selasky };
369*d6b92ffaSHans Petter Selasky 
370*d6b92ffaSHans Petter Selasky struct ibv_reg_mr {
371*d6b92ffaSHans Petter Selasky 	__u32 command;
372*d6b92ffaSHans Petter Selasky 	__u16 in_words;
373*d6b92ffaSHans Petter Selasky 	__u16 out_words;
374*d6b92ffaSHans Petter Selasky 	__u64 response;
375*d6b92ffaSHans Petter Selasky 	__u64 start;
376*d6b92ffaSHans Petter Selasky 	__u64 length;
377*d6b92ffaSHans Petter Selasky 	__u64 hca_va;
378*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
379*d6b92ffaSHans Petter Selasky 	__u32 access_flags;
380*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
381*d6b92ffaSHans Petter Selasky };
382*d6b92ffaSHans Petter Selasky 
383*d6b92ffaSHans Petter Selasky struct ibv_reg_mr_resp {
384*d6b92ffaSHans Petter Selasky 	__u32 mr_handle;
385*d6b92ffaSHans Petter Selasky 	__u32 lkey;
386*d6b92ffaSHans Petter Selasky 	__u32 rkey;
387*d6b92ffaSHans Petter Selasky };
388*d6b92ffaSHans Petter Selasky 
389*d6b92ffaSHans Petter Selasky struct ibv_rereg_mr {
390*d6b92ffaSHans Petter Selasky 	__u32 command;
391*d6b92ffaSHans Petter Selasky 	__u16 in_words;
392*d6b92ffaSHans Petter Selasky 	__u16 out_words;
393*d6b92ffaSHans Petter Selasky 	__u64 response;
394*d6b92ffaSHans Petter Selasky 	__u32 mr_handle;
395*d6b92ffaSHans Petter Selasky 	__u32 flags;
396*d6b92ffaSHans Petter Selasky 	__u64 start;
397*d6b92ffaSHans Petter Selasky 	__u64 length;
398*d6b92ffaSHans Petter Selasky 	__u64 hca_va;
399*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
400*d6b92ffaSHans Petter Selasky 	__u32 access_flags;
401*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
402*d6b92ffaSHans Petter Selasky };
403*d6b92ffaSHans Petter Selasky 
404*d6b92ffaSHans Petter Selasky struct ibv_rereg_mr_resp {
405*d6b92ffaSHans Petter Selasky 	__u32 lkey;
406*d6b92ffaSHans Petter Selasky 	__u32 rkey;
407*d6b92ffaSHans Petter Selasky };
408*d6b92ffaSHans Petter Selasky 
409*d6b92ffaSHans Petter Selasky struct ibv_dereg_mr {
410*d6b92ffaSHans Petter Selasky 	__u32 command;
411*d6b92ffaSHans Petter Selasky 	__u16 in_words;
412*d6b92ffaSHans Petter Selasky 	__u16 out_words;
413*d6b92ffaSHans Petter Selasky 	__u32 mr_handle;
414*d6b92ffaSHans Petter Selasky };
415*d6b92ffaSHans Petter Selasky 
416*d6b92ffaSHans Petter Selasky struct ibv_alloc_mw {
417*d6b92ffaSHans Petter Selasky 	__u32 command;
418*d6b92ffaSHans Petter Selasky 	__u16 in_words;
419*d6b92ffaSHans Petter Selasky 	__u16 out_words;
420*d6b92ffaSHans Petter Selasky 	__u64 response;
421*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
422*d6b92ffaSHans Petter Selasky 	__u8  mw_type;
423*d6b92ffaSHans Petter Selasky 	__u8  reserved[3];
424*d6b92ffaSHans Petter Selasky };
425*d6b92ffaSHans Petter Selasky 
426*d6b92ffaSHans Petter Selasky struct ibv_alloc_mw_resp {
427*d6b92ffaSHans Petter Selasky 	__u32 mw_handle;
428*d6b92ffaSHans Petter Selasky 	__u32 rkey;
429*d6b92ffaSHans Petter Selasky };
430*d6b92ffaSHans Petter Selasky 
431*d6b92ffaSHans Petter Selasky struct ibv_dealloc_mw {
432*d6b92ffaSHans Petter Selasky 	__u32 command;
433*d6b92ffaSHans Petter Selasky 	__u16 in_words;
434*d6b92ffaSHans Petter Selasky 	__u16 out_words;
435*d6b92ffaSHans Petter Selasky 	__u32 mw_handle;
436*d6b92ffaSHans Petter Selasky 	__u32 reserved;
437*d6b92ffaSHans Petter Selasky };
438*d6b92ffaSHans Petter Selasky 
439*d6b92ffaSHans Petter Selasky struct ibv_create_comp_channel {
440*d6b92ffaSHans Petter Selasky 	__u32 command;
441*d6b92ffaSHans Petter Selasky 	__u16 in_words;
442*d6b92ffaSHans Petter Selasky 	__u16 out_words;
443*d6b92ffaSHans Petter Selasky 	__u64 response;
444*d6b92ffaSHans Petter Selasky };
445*d6b92ffaSHans Petter Selasky 
446*d6b92ffaSHans Petter Selasky struct ibv_create_comp_channel_resp {
447*d6b92ffaSHans Petter Selasky 	__u32 fd;
448*d6b92ffaSHans Petter Selasky };
449*d6b92ffaSHans Petter Selasky 
450*d6b92ffaSHans Petter Selasky struct ibv_create_cq {
451*d6b92ffaSHans Petter Selasky 	__u32 command;
452*d6b92ffaSHans Petter Selasky 	__u16 in_words;
453*d6b92ffaSHans Petter Selasky 	__u16 out_words;
454*d6b92ffaSHans Petter Selasky 	__u64 response;
455*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
456*d6b92ffaSHans Petter Selasky 	__u32 cqe;
457*d6b92ffaSHans Petter Selasky 	__u32 comp_vector;
458*d6b92ffaSHans Petter Selasky 	__s32 comp_channel;
459*d6b92ffaSHans Petter Selasky 	__u32 reserved;
460*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
461*d6b92ffaSHans Petter Selasky };
462*d6b92ffaSHans Petter Selasky 
463*d6b92ffaSHans Petter Selasky struct ibv_create_cq_resp {
464*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
465*d6b92ffaSHans Petter Selasky 	__u32 cqe;
466*d6b92ffaSHans Petter Selasky };
467*d6b92ffaSHans Petter Selasky 
468*d6b92ffaSHans Petter Selasky enum ibv_create_cq_ex_kernel_flags {
469*d6b92ffaSHans Petter Selasky 	IBV_CREATE_CQ_EX_KERNEL_FLAG_COMPLETION_TIMESTAMP = 1 << 0,
470*d6b92ffaSHans Petter Selasky };
471*d6b92ffaSHans Petter Selasky 
472*d6b92ffaSHans Petter Selasky struct ibv_create_cq_ex {
473*d6b92ffaSHans Petter Selasky 	struct ex_hdr	hdr;
474*d6b92ffaSHans Petter Selasky 	__u64		user_handle;
475*d6b92ffaSHans Petter Selasky 	__u32		cqe;
476*d6b92ffaSHans Petter Selasky 	__u32		comp_vector;
477*d6b92ffaSHans Petter Selasky 	__s32		comp_channel;
478*d6b92ffaSHans Petter Selasky 	__u32		comp_mask;
479*d6b92ffaSHans Petter Selasky 	__u32		flags;
480*d6b92ffaSHans Petter Selasky 	__u32		reserved;
481*d6b92ffaSHans Petter Selasky };
482*d6b92ffaSHans Petter Selasky 
483*d6b92ffaSHans Petter Selasky struct ibv_create_cq_resp_ex {
484*d6b92ffaSHans Petter Selasky 	struct ibv_create_cq_resp	base;
485*d6b92ffaSHans Petter Selasky 	__u32				comp_mask;
486*d6b92ffaSHans Petter Selasky 	__u32				response_length;
487*d6b92ffaSHans Petter Selasky };
488*d6b92ffaSHans Petter Selasky 
489*d6b92ffaSHans Petter Selasky struct ibv_kern_wc {
490*d6b92ffaSHans Petter Selasky 	__u64  wr_id;
491*d6b92ffaSHans Petter Selasky 	__u32  status;
492*d6b92ffaSHans Petter Selasky 	__u32  opcode;
493*d6b92ffaSHans Petter Selasky 	__u32  vendor_err;
494*d6b92ffaSHans Petter Selasky 	__u32  byte_len;
495*d6b92ffaSHans Petter Selasky 	__be32  imm_data;
496*d6b92ffaSHans Petter Selasky 	__u32  qp_num;
497*d6b92ffaSHans Petter Selasky 	__u32  src_qp;
498*d6b92ffaSHans Petter Selasky 	__u32  wc_flags;
499*d6b92ffaSHans Petter Selasky 	__u16  pkey_index;
500*d6b92ffaSHans Petter Selasky 	__u16  slid;
501*d6b92ffaSHans Petter Selasky 	__u8   sl;
502*d6b92ffaSHans Petter Selasky 	__u8   dlid_path_bits;
503*d6b92ffaSHans Petter Selasky 	__u8   port_num;
504*d6b92ffaSHans Petter Selasky 	__u8   reserved;
505*d6b92ffaSHans Petter Selasky };
506*d6b92ffaSHans Petter Selasky 
507*d6b92ffaSHans Petter Selasky struct ibv_poll_cq {
508*d6b92ffaSHans Petter Selasky 	__u32 command;
509*d6b92ffaSHans Petter Selasky 	__u16 in_words;
510*d6b92ffaSHans Petter Selasky 	__u16 out_words;
511*d6b92ffaSHans Petter Selasky 	__u64 response;
512*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
513*d6b92ffaSHans Petter Selasky 	__u32 ne;
514*d6b92ffaSHans Petter Selasky };
515*d6b92ffaSHans Petter Selasky 
516*d6b92ffaSHans Petter Selasky struct ibv_poll_cq_resp {
517*d6b92ffaSHans Petter Selasky 	__u32 count;
518*d6b92ffaSHans Petter Selasky 	__u32 reserved;
519*d6b92ffaSHans Petter Selasky 	struct ibv_kern_wc wc[0];
520*d6b92ffaSHans Petter Selasky };
521*d6b92ffaSHans Petter Selasky 
522*d6b92ffaSHans Petter Selasky struct ibv_req_notify_cq {
523*d6b92ffaSHans Petter Selasky 	__u32 command;
524*d6b92ffaSHans Petter Selasky 	__u16 in_words;
525*d6b92ffaSHans Petter Selasky 	__u16 out_words;
526*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
527*d6b92ffaSHans Petter Selasky 	__u32 solicited;
528*d6b92ffaSHans Petter Selasky };
529*d6b92ffaSHans Petter Selasky 
530*d6b92ffaSHans Petter Selasky struct ibv_resize_cq {
531*d6b92ffaSHans Petter Selasky 	__u32 command;
532*d6b92ffaSHans Petter Selasky 	__u16 in_words;
533*d6b92ffaSHans Petter Selasky 	__u16 out_words;
534*d6b92ffaSHans Petter Selasky 	__u64 response;
535*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
536*d6b92ffaSHans Petter Selasky 	__u32 cqe;
537*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
538*d6b92ffaSHans Petter Selasky };
539*d6b92ffaSHans Petter Selasky 
540*d6b92ffaSHans Petter Selasky struct ibv_resize_cq_resp {
541*d6b92ffaSHans Petter Selasky 	__u32 cqe;
542*d6b92ffaSHans Petter Selasky 	__u32 reserved;
543*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
544*d6b92ffaSHans Petter Selasky };
545*d6b92ffaSHans Petter Selasky 
546*d6b92ffaSHans Petter Selasky struct ibv_destroy_cq {
547*d6b92ffaSHans Petter Selasky 	__u32 command;
548*d6b92ffaSHans Petter Selasky 	__u16 in_words;
549*d6b92ffaSHans Petter Selasky 	__u16 out_words;
550*d6b92ffaSHans Petter Selasky 	__u64 response;
551*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
552*d6b92ffaSHans Petter Selasky 	__u32 reserved;
553*d6b92ffaSHans Petter Selasky };
554*d6b92ffaSHans Petter Selasky 
555*d6b92ffaSHans Petter Selasky struct ibv_destroy_cq_resp {
556*d6b92ffaSHans Petter Selasky 	__u32 comp_events_reported;
557*d6b92ffaSHans Petter Selasky 	__u32 async_events_reported;
558*d6b92ffaSHans Petter Selasky };
559*d6b92ffaSHans Petter Selasky 
560*d6b92ffaSHans Petter Selasky struct ibv_kern_global_route {
561*d6b92ffaSHans Petter Selasky 	__u8  dgid[16];
562*d6b92ffaSHans Petter Selasky 	__u32 flow_label;
563*d6b92ffaSHans Petter Selasky 	__u8  sgid_index;
564*d6b92ffaSHans Petter Selasky 	__u8  hop_limit;
565*d6b92ffaSHans Petter Selasky 	__u8  traffic_class;
566*d6b92ffaSHans Petter Selasky 	__u8  reserved;
567*d6b92ffaSHans Petter Selasky };
568*d6b92ffaSHans Petter Selasky 
569*d6b92ffaSHans Petter Selasky struct ibv_kern_ah_attr {
570*d6b92ffaSHans Petter Selasky 	struct ibv_kern_global_route grh;
571*d6b92ffaSHans Petter Selasky 	__u16 dlid;
572*d6b92ffaSHans Petter Selasky 	__u8  sl;
573*d6b92ffaSHans Petter Selasky 	__u8  src_path_bits;
574*d6b92ffaSHans Petter Selasky 	__u8  static_rate;
575*d6b92ffaSHans Petter Selasky 	__u8  is_global;
576*d6b92ffaSHans Petter Selasky 	__u8  port_num;
577*d6b92ffaSHans Petter Selasky 	__u8  reserved;
578*d6b92ffaSHans Petter Selasky };
579*d6b92ffaSHans Petter Selasky 
580*d6b92ffaSHans Petter Selasky struct ibv_kern_qp_attr {
581*d6b92ffaSHans Petter Selasky 	__u32	qp_attr_mask;
582*d6b92ffaSHans Petter Selasky 	__u32	qp_state;
583*d6b92ffaSHans Petter Selasky 	__u32	cur_qp_state;
584*d6b92ffaSHans Petter Selasky 	__u32	path_mtu;
585*d6b92ffaSHans Petter Selasky 	__u32	path_mig_state;
586*d6b92ffaSHans Petter Selasky 	__u32	qkey;
587*d6b92ffaSHans Petter Selasky 	__u32	rq_psn;
588*d6b92ffaSHans Petter Selasky 	__u32	sq_psn;
589*d6b92ffaSHans Petter Selasky 	__u32	dest_qp_num;
590*d6b92ffaSHans Petter Selasky 	__u32	qp_access_flags;
591*d6b92ffaSHans Petter Selasky 
592*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ah_attr ah_attr;
593*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ah_attr alt_ah_attr;
594*d6b92ffaSHans Petter Selasky 
595*d6b92ffaSHans Petter Selasky 	/* ib_qp_cap */
596*d6b92ffaSHans Petter Selasky 	__u32	max_send_wr;
597*d6b92ffaSHans Petter Selasky 	__u32	max_recv_wr;
598*d6b92ffaSHans Petter Selasky 	__u32	max_send_sge;
599*d6b92ffaSHans Petter Selasky 	__u32	max_recv_sge;
600*d6b92ffaSHans Petter Selasky 	__u32	max_inline_data;
601*d6b92ffaSHans Petter Selasky 
602*d6b92ffaSHans Petter Selasky 	__u16	pkey_index;
603*d6b92ffaSHans Petter Selasky 	__u16	alt_pkey_index;
604*d6b92ffaSHans Petter Selasky 	__u8	en_sqd_async_notify;
605*d6b92ffaSHans Petter Selasky 	__u8	sq_draining;
606*d6b92ffaSHans Petter Selasky 	__u8	max_rd_atomic;
607*d6b92ffaSHans Petter Selasky 	__u8	max_dest_rd_atomic;
608*d6b92ffaSHans Petter Selasky 	__u8	min_rnr_timer;
609*d6b92ffaSHans Petter Selasky 	__u8	port_num;
610*d6b92ffaSHans Petter Selasky 	__u8	timeout;
611*d6b92ffaSHans Petter Selasky 	__u8	retry_cnt;
612*d6b92ffaSHans Petter Selasky 	__u8	rnr_retry;
613*d6b92ffaSHans Petter Selasky 	__u8	alt_port_num;
614*d6b92ffaSHans Petter Selasky 	__u8	alt_timeout;
615*d6b92ffaSHans Petter Selasky 	__u8	reserved[5];
616*d6b92ffaSHans Petter Selasky };
617*d6b92ffaSHans Petter Selasky 
618*d6b92ffaSHans Petter Selasky #define IBV_CREATE_QP_COMMON	\
619*d6b92ffaSHans Petter Selasky 	__u64 user_handle;	\
620*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;	\
621*d6b92ffaSHans Petter Selasky 	__u32 send_cq_handle;	\
622*d6b92ffaSHans Petter Selasky 	__u32 recv_cq_handle;	\
623*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;	\
624*d6b92ffaSHans Petter Selasky 	__u32 max_send_wr;	\
625*d6b92ffaSHans Petter Selasky 	__u32 max_recv_wr;	\
626*d6b92ffaSHans Petter Selasky 	__u32 max_send_sge;	\
627*d6b92ffaSHans Petter Selasky 	__u32 max_recv_sge;	\
628*d6b92ffaSHans Petter Selasky 	__u32 max_inline_data;	\
629*d6b92ffaSHans Petter Selasky 	__u8  sq_sig_all;	\
630*d6b92ffaSHans Petter Selasky 	__u8  qp_type;		\
631*d6b92ffaSHans Petter Selasky 	__u8  is_srq;		\
632*d6b92ffaSHans Petter Selasky 	__u8  reserved
633*d6b92ffaSHans Petter Selasky 
634*d6b92ffaSHans Petter Selasky struct ibv_create_qp {
635*d6b92ffaSHans Petter Selasky 	__u32 command;
636*d6b92ffaSHans Petter Selasky 	__u16 in_words;
637*d6b92ffaSHans Petter Selasky 	__u16 out_words;
638*d6b92ffaSHans Petter Selasky 	__u64 response;
639*d6b92ffaSHans Petter Selasky 	IBV_CREATE_QP_COMMON;
640*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
641*d6b92ffaSHans Petter Selasky };
642*d6b92ffaSHans Petter Selasky 
643*d6b92ffaSHans Petter Selasky struct ibv_create_qp_common {
644*d6b92ffaSHans Petter Selasky 	IBV_CREATE_QP_COMMON;
645*d6b92ffaSHans Petter Selasky };
646*d6b92ffaSHans Petter Selasky 
647*d6b92ffaSHans Petter Selasky struct ibv_open_qp {
648*d6b92ffaSHans Petter Selasky 	__u32 command;
649*d6b92ffaSHans Petter Selasky 	__u16 in_words;
650*d6b92ffaSHans Petter Selasky 	__u16 out_words;
651*d6b92ffaSHans Petter Selasky 	__u64 response;
652*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
653*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
654*d6b92ffaSHans Petter Selasky 	__u32 qpn;
655*d6b92ffaSHans Petter Selasky 	__u8  qp_type;
656*d6b92ffaSHans Petter Selasky 	__u8  reserved[7];
657*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
658*d6b92ffaSHans Petter Selasky };
659*d6b92ffaSHans Petter Selasky 
660*d6b92ffaSHans Petter Selasky /* also used for open response */
661*d6b92ffaSHans Petter Selasky struct ibv_create_qp_resp {
662*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
663*d6b92ffaSHans Petter Selasky 	__u32 qpn;
664*d6b92ffaSHans Petter Selasky 	__u32 max_send_wr;
665*d6b92ffaSHans Petter Selasky 	__u32 max_recv_wr;
666*d6b92ffaSHans Petter Selasky 	__u32 max_send_sge;
667*d6b92ffaSHans Petter Selasky 	__u32 max_recv_sge;
668*d6b92ffaSHans Petter Selasky 	__u32 max_inline_data;
669*d6b92ffaSHans Petter Selasky 	__u32 reserved;
670*d6b92ffaSHans Petter Selasky };
671*d6b92ffaSHans Petter Selasky 
672*d6b92ffaSHans Petter Selasky enum ibv_create_qp_ex_kernel_mask {
673*d6b92ffaSHans Petter Selasky 	IBV_CREATE_QP_EX_KERNEL_MASK_IND_TABLE = 1 << 0,
674*d6b92ffaSHans Petter Selasky };
675*d6b92ffaSHans Petter Selasky 
676*d6b92ffaSHans Petter Selasky struct ibv_create_qp_ex {
677*d6b92ffaSHans Petter Selasky 	struct ex_hdr	hdr;
678*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_common base;
679*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
680*d6b92ffaSHans Petter Selasky 	__u32 create_flags;
681*d6b92ffaSHans Petter Selasky 	__u32 ind_tbl_handle;
682*d6b92ffaSHans Petter Selasky 	__u32 reserved1;
683*d6b92ffaSHans Petter Selasky };
684*d6b92ffaSHans Petter Selasky 
685*d6b92ffaSHans Petter Selasky struct ibv_create_qp_resp_ex {
686*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_resp base;
687*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
688*d6b92ffaSHans Petter Selasky 	__u32 response_length;
689*d6b92ffaSHans Petter Selasky };
690*d6b92ffaSHans Petter Selasky 
691*d6b92ffaSHans Petter Selasky struct ibv_qp_dest {
692*d6b92ffaSHans Petter Selasky 	__u8  dgid[16];
693*d6b92ffaSHans Petter Selasky 	__u32 flow_label;
694*d6b92ffaSHans Petter Selasky 	__u16 dlid;
695*d6b92ffaSHans Petter Selasky 	__u16 reserved;
696*d6b92ffaSHans Petter Selasky 	__u8  sgid_index;
697*d6b92ffaSHans Petter Selasky 	__u8  hop_limit;
698*d6b92ffaSHans Petter Selasky 	__u8  traffic_class;
699*d6b92ffaSHans Petter Selasky 	__u8  sl;
700*d6b92ffaSHans Petter Selasky 	__u8  src_path_bits;
701*d6b92ffaSHans Petter Selasky 	__u8  static_rate;
702*d6b92ffaSHans Petter Selasky 	__u8  is_global;
703*d6b92ffaSHans Petter Selasky 	__u8  port_num;
704*d6b92ffaSHans Petter Selasky };
705*d6b92ffaSHans Petter Selasky 
706*d6b92ffaSHans Petter Selasky struct ibv_query_qp {
707*d6b92ffaSHans Petter Selasky 	__u32 command;
708*d6b92ffaSHans Petter Selasky 	__u16 in_words;
709*d6b92ffaSHans Petter Selasky 	__u16 out_words;
710*d6b92ffaSHans Petter Selasky 	__u64 response;
711*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
712*d6b92ffaSHans Petter Selasky 	__u32 attr_mask;
713*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
714*d6b92ffaSHans Petter Selasky };
715*d6b92ffaSHans Petter Selasky 
716*d6b92ffaSHans Petter Selasky struct ibv_query_qp_resp {
717*d6b92ffaSHans Petter Selasky 	struct ibv_qp_dest dest;
718*d6b92ffaSHans Petter Selasky 	struct ibv_qp_dest alt_dest;
719*d6b92ffaSHans Petter Selasky 	__u32 max_send_wr;
720*d6b92ffaSHans Petter Selasky 	__u32 max_recv_wr;
721*d6b92ffaSHans Petter Selasky 	__u32 max_send_sge;
722*d6b92ffaSHans Petter Selasky 	__u32 max_recv_sge;
723*d6b92ffaSHans Petter Selasky 	__u32 max_inline_data;
724*d6b92ffaSHans Petter Selasky 	__u32 qkey;
725*d6b92ffaSHans Petter Selasky 	__u32 rq_psn;
726*d6b92ffaSHans Petter Selasky 	__u32 sq_psn;
727*d6b92ffaSHans Petter Selasky 	__u32 dest_qp_num;
728*d6b92ffaSHans Petter Selasky 	__u32 qp_access_flags;
729*d6b92ffaSHans Petter Selasky 	__u16 pkey_index;
730*d6b92ffaSHans Petter Selasky 	__u16 alt_pkey_index;
731*d6b92ffaSHans Petter Selasky 	__u8  qp_state;
732*d6b92ffaSHans Petter Selasky 	__u8  cur_qp_state;
733*d6b92ffaSHans Petter Selasky 	__u8  path_mtu;
734*d6b92ffaSHans Petter Selasky 	__u8  path_mig_state;
735*d6b92ffaSHans Petter Selasky 	__u8  sq_draining;
736*d6b92ffaSHans Petter Selasky 	__u8  max_rd_atomic;
737*d6b92ffaSHans Petter Selasky 	__u8  max_dest_rd_atomic;
738*d6b92ffaSHans Petter Selasky 	__u8  min_rnr_timer;
739*d6b92ffaSHans Petter Selasky 	__u8  port_num;
740*d6b92ffaSHans Petter Selasky 	__u8  timeout;
741*d6b92ffaSHans Petter Selasky 	__u8  retry_cnt;
742*d6b92ffaSHans Petter Selasky 	__u8  rnr_retry;
743*d6b92ffaSHans Petter Selasky 	__u8  alt_port_num;
744*d6b92ffaSHans Petter Selasky 	__u8  alt_timeout;
745*d6b92ffaSHans Petter Selasky 	__u8  sq_sig_all;
746*d6b92ffaSHans Petter Selasky 	__u8  reserved[5];
747*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
748*d6b92ffaSHans Petter Selasky };
749*d6b92ffaSHans Petter Selasky 
750*d6b92ffaSHans Petter Selasky struct ibv_modify_qp_common {
751*d6b92ffaSHans Petter Selasky 	struct ibv_qp_dest dest;
752*d6b92ffaSHans Petter Selasky 	struct ibv_qp_dest alt_dest;
753*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
754*d6b92ffaSHans Petter Selasky 	__u32 attr_mask;
755*d6b92ffaSHans Petter Selasky 	__u32 qkey;
756*d6b92ffaSHans Petter Selasky 	__u32 rq_psn;
757*d6b92ffaSHans Petter Selasky 	__u32 sq_psn;
758*d6b92ffaSHans Petter Selasky 	__u32 dest_qp_num;
759*d6b92ffaSHans Petter Selasky 	__u32 qp_access_flags;
760*d6b92ffaSHans Petter Selasky 	__u16 pkey_index;
761*d6b92ffaSHans Petter Selasky 	__u16 alt_pkey_index;
762*d6b92ffaSHans Petter Selasky 	__u8  qp_state;
763*d6b92ffaSHans Petter Selasky 	__u8  cur_qp_state;
764*d6b92ffaSHans Petter Selasky 	__u8  path_mtu;
765*d6b92ffaSHans Petter Selasky 	__u8  path_mig_state;
766*d6b92ffaSHans Petter Selasky 	__u8  en_sqd_async_notify;
767*d6b92ffaSHans Petter Selasky 	__u8  max_rd_atomic;
768*d6b92ffaSHans Petter Selasky 	__u8  max_dest_rd_atomic;
769*d6b92ffaSHans Petter Selasky 	__u8  min_rnr_timer;
770*d6b92ffaSHans Petter Selasky 	__u8  port_num;
771*d6b92ffaSHans Petter Selasky 	__u8  timeout;
772*d6b92ffaSHans Petter Selasky 	__u8  retry_cnt;
773*d6b92ffaSHans Petter Selasky 	__u8  rnr_retry;
774*d6b92ffaSHans Petter Selasky 	__u8  alt_port_num;
775*d6b92ffaSHans Petter Selasky 	__u8  alt_timeout;
776*d6b92ffaSHans Petter Selasky 	__u8  reserved[2];
777*d6b92ffaSHans Petter Selasky };
778*d6b92ffaSHans Petter Selasky 
779*d6b92ffaSHans Petter Selasky struct ibv_modify_qp {
780*d6b92ffaSHans Petter Selasky 	__u32 command;
781*d6b92ffaSHans Petter Selasky 	__u16 in_words;
782*d6b92ffaSHans Petter Selasky 	__u16 out_words;
783*d6b92ffaSHans Petter Selasky 	struct ibv_modify_qp_common base;
784*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
785*d6b92ffaSHans Petter Selasky };
786*d6b92ffaSHans Petter Selasky 
787*d6b92ffaSHans Petter Selasky struct ibv_modify_qp_ex {
788*d6b92ffaSHans Petter Selasky 	struct ex_hdr		    hdr;
789*d6b92ffaSHans Petter Selasky 	struct ibv_modify_qp_common base;
790*d6b92ffaSHans Petter Selasky 	__u32  rate_limit;
791*d6b92ffaSHans Petter Selasky 	__u32  reserved;
792*d6b92ffaSHans Petter Selasky };
793*d6b92ffaSHans Petter Selasky 
794*d6b92ffaSHans Petter Selasky struct ibv_modify_qp_resp_ex {
795*d6b92ffaSHans Petter Selasky 	__u32  comp_mask;
796*d6b92ffaSHans Petter Selasky 	__u32  response_length;
797*d6b92ffaSHans Petter Selasky };
798*d6b92ffaSHans Petter Selasky 
799*d6b92ffaSHans Petter Selasky struct ibv_destroy_qp {
800*d6b92ffaSHans Petter Selasky 	__u32 command;
801*d6b92ffaSHans Petter Selasky 	__u16 in_words;
802*d6b92ffaSHans Petter Selasky 	__u16 out_words;
803*d6b92ffaSHans Petter Selasky 	__u64 response;
804*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
805*d6b92ffaSHans Petter Selasky 	__u32 reserved;
806*d6b92ffaSHans Petter Selasky };
807*d6b92ffaSHans Petter Selasky 
808*d6b92ffaSHans Petter Selasky struct ibv_destroy_qp_resp {
809*d6b92ffaSHans Petter Selasky 	__u32 events_reported;
810*d6b92ffaSHans Petter Selasky };
811*d6b92ffaSHans Petter Selasky 
812*d6b92ffaSHans Petter Selasky struct ibv_kern_send_wr {
813*d6b92ffaSHans Petter Selasky 	__u64 wr_id;
814*d6b92ffaSHans Petter Selasky 	__u32 num_sge;
815*d6b92ffaSHans Petter Selasky 	__u32 opcode;
816*d6b92ffaSHans Petter Selasky 	__u32 send_flags;
817*d6b92ffaSHans Petter Selasky 	__be32 imm_data;
818*d6b92ffaSHans Petter Selasky 	union {
819*d6b92ffaSHans Petter Selasky 		struct {
820*d6b92ffaSHans Petter Selasky 			__u64 remote_addr;
821*d6b92ffaSHans Petter Selasky 			__u32 rkey;
822*d6b92ffaSHans Petter Selasky 			__u32 reserved;
823*d6b92ffaSHans Petter Selasky 		} rdma;
824*d6b92ffaSHans Petter Selasky 		struct {
825*d6b92ffaSHans Petter Selasky 			__u64 remote_addr;
826*d6b92ffaSHans Petter Selasky 			__u64 compare_add;
827*d6b92ffaSHans Petter Selasky 			__u64 swap;
828*d6b92ffaSHans Petter Selasky 			__u32 rkey;
829*d6b92ffaSHans Petter Selasky 			__u32 reserved;
830*d6b92ffaSHans Petter Selasky 		} atomic;
831*d6b92ffaSHans Petter Selasky 		struct {
832*d6b92ffaSHans Petter Selasky 			__u32 ah;
833*d6b92ffaSHans Petter Selasky 			__u32 remote_qpn;
834*d6b92ffaSHans Petter Selasky 			__u32 remote_qkey;
835*d6b92ffaSHans Petter Selasky 			__u32 reserved;
836*d6b92ffaSHans Petter Selasky 		} ud;
837*d6b92ffaSHans Petter Selasky 	} wr;
838*d6b92ffaSHans Petter Selasky 	union {
839*d6b92ffaSHans Petter Selasky 		struct {
840*d6b92ffaSHans Petter Selasky 			__u32 remote_srqn;
841*d6b92ffaSHans Petter Selasky 		} xrc;
842*d6b92ffaSHans Petter Selasky 	} qp_type;
843*d6b92ffaSHans Petter Selasky };
844*d6b92ffaSHans Petter Selasky 
845*d6b92ffaSHans Petter Selasky struct ibv_kern_eth_filter {
846*d6b92ffaSHans Petter Selasky 	__u8  dst_mac[6];
847*d6b92ffaSHans Petter Selasky 	__u8  src_mac[6];
848*d6b92ffaSHans Petter Selasky 	__u16  ether_type;
849*d6b92ffaSHans Petter Selasky 	__u16  vlan_tag;
850*d6b92ffaSHans Petter Selasky };
851*d6b92ffaSHans Petter Selasky 
852*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_eth {
853*d6b92ffaSHans Petter Selasky 	__u32 type;
854*d6b92ffaSHans Petter Selasky 	__u16  size;
855*d6b92ffaSHans Petter Selasky 	__u16 reserved;
856*d6b92ffaSHans Petter Selasky 	struct ibv_kern_eth_filter val;
857*d6b92ffaSHans Petter Selasky 	struct ibv_kern_eth_filter mask;
858*d6b92ffaSHans Petter Selasky };
859*d6b92ffaSHans Petter Selasky 
860*d6b92ffaSHans Petter Selasky struct ibv_kern_ipv4_filter {
861*d6b92ffaSHans Petter Selasky 	__u32 src_ip;
862*d6b92ffaSHans Petter Selasky 	__u32 dst_ip;
863*d6b92ffaSHans Petter Selasky };
864*d6b92ffaSHans Petter Selasky 
865*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_ipv4 {
866*d6b92ffaSHans Petter Selasky 	__u32  type;
867*d6b92ffaSHans Petter Selasky 	__u16  size;
868*d6b92ffaSHans Petter Selasky 	__u16 reserved;
869*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv4_filter val;
870*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv4_filter mask;
871*d6b92ffaSHans Petter Selasky };
872*d6b92ffaSHans Petter Selasky 
873*d6b92ffaSHans Petter Selasky struct ibv_kern_ipv4_ext_filter {
874*d6b92ffaSHans Petter Selasky 	__u32 src_ip;
875*d6b92ffaSHans Petter Selasky 	__u32 dst_ip;
876*d6b92ffaSHans Petter Selasky 	__u8  proto;
877*d6b92ffaSHans Petter Selasky 	__u8  tos;
878*d6b92ffaSHans Petter Selasky 	__u8  ttl;
879*d6b92ffaSHans Petter Selasky 	__u8  flags;
880*d6b92ffaSHans Petter Selasky };
881*d6b92ffaSHans Petter Selasky 
882*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_ipv4_ext {
883*d6b92ffaSHans Petter Selasky 	__u32  type;
884*d6b92ffaSHans Petter Selasky 	__u16  size;
885*d6b92ffaSHans Petter Selasky 	__u16 reserved;
886*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv4_ext_filter val;
887*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv4_ext_filter mask;
888*d6b92ffaSHans Petter Selasky };
889*d6b92ffaSHans Petter Selasky 
890*d6b92ffaSHans Petter Selasky struct ibv_kern_ipv6_filter {
891*d6b92ffaSHans Petter Selasky 	__u8  src_ip[16];
892*d6b92ffaSHans Petter Selasky 	__u8  dst_ip[16];
893*d6b92ffaSHans Petter Selasky 	__u32 flow_label;
894*d6b92ffaSHans Petter Selasky 	__u8  next_hdr;
895*d6b92ffaSHans Petter Selasky 	__u8  traffic_class;
896*d6b92ffaSHans Petter Selasky 	__u8  hop_limit;
897*d6b92ffaSHans Petter Selasky 	__u8  reserved;
898*d6b92ffaSHans Petter Selasky };
899*d6b92ffaSHans Petter Selasky 
900*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_ipv6 {
901*d6b92ffaSHans Petter Selasky 	__u32  type;
902*d6b92ffaSHans Petter Selasky 	__u16  size;
903*d6b92ffaSHans Petter Selasky 	__u16 reserved;
904*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv6_filter val;
905*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ipv6_filter mask;
906*d6b92ffaSHans Petter Selasky };
907*d6b92ffaSHans Petter Selasky 
908*d6b92ffaSHans Petter Selasky struct ibv_kern_tcp_udp_filter {
909*d6b92ffaSHans Petter Selasky 	__u16 dst_port;
910*d6b92ffaSHans Petter Selasky 	__u16 src_port;
911*d6b92ffaSHans Petter Selasky };
912*d6b92ffaSHans Petter Selasky 
913*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_tcp_udp {
914*d6b92ffaSHans Petter Selasky 	__u32  type;
915*d6b92ffaSHans Petter Selasky 	__u16  size;
916*d6b92ffaSHans Petter Selasky 	__u16 reserved;
917*d6b92ffaSHans Petter Selasky 	struct ibv_kern_tcp_udp_filter val;
918*d6b92ffaSHans Petter Selasky 	struct ibv_kern_tcp_udp_filter mask;
919*d6b92ffaSHans Petter Selasky };
920*d6b92ffaSHans Petter Selasky 
921*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_action_tag {
922*d6b92ffaSHans Petter Selasky 	__u32  type;
923*d6b92ffaSHans Petter Selasky 	__u16  size;
924*d6b92ffaSHans Petter Selasky 	__u16 reserved;
925*d6b92ffaSHans Petter Selasky 	__u32 tag_id;
926*d6b92ffaSHans Petter Selasky 	__u32 reserved1;
927*d6b92ffaSHans Petter Selasky };
928*d6b92ffaSHans Petter Selasky 
929*d6b92ffaSHans Petter Selasky struct ibv_kern_tunnel_filter {
930*d6b92ffaSHans Petter Selasky 	__u32 tunnel_id;
931*d6b92ffaSHans Petter Selasky };
932*d6b92ffaSHans Petter Selasky 
933*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_tunnel {
934*d6b92ffaSHans Petter Selasky 	__u32  type;
935*d6b92ffaSHans Petter Selasky 	__u16  size;
936*d6b92ffaSHans Petter Selasky 	__u16 reserved;
937*d6b92ffaSHans Petter Selasky 	struct ibv_kern_tunnel_filter val;
938*d6b92ffaSHans Petter Selasky 	struct ibv_kern_tunnel_filter mask;
939*d6b92ffaSHans Petter Selasky };
940*d6b92ffaSHans Petter Selasky 
941*d6b92ffaSHans Petter Selasky struct ibv_kern_spec_action_drop {
942*d6b92ffaSHans Petter Selasky 	__u32  type;
943*d6b92ffaSHans Petter Selasky 	__u16  size;
944*d6b92ffaSHans Petter Selasky 	__u16 reserved;
945*d6b92ffaSHans Petter Selasky };
946*d6b92ffaSHans Petter Selasky 
947*d6b92ffaSHans Petter Selasky struct ibv_kern_spec {
948*d6b92ffaSHans Petter Selasky 	union {
949*d6b92ffaSHans Petter Selasky 		struct {
950*d6b92ffaSHans Petter Selasky 			__u32 type;
951*d6b92ffaSHans Petter Selasky 			__u16 size;
952*d6b92ffaSHans Petter Selasky 			__u16 reserved;
953*d6b92ffaSHans Petter Selasky 		} hdr;
954*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_eth eth;
955*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_ipv4 ipv4;
956*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_ipv4_ext ipv4_ext;
957*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_tcp_udp tcp_udp;
958*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_ipv6 ipv6;
959*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_tunnel tunnel;
960*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_action_tag flow_tag;
961*d6b92ffaSHans Petter Selasky 		struct ibv_kern_spec_action_drop drop;
962*d6b92ffaSHans Petter Selasky 	};
963*d6b92ffaSHans Petter Selasky };
964*d6b92ffaSHans Petter Selasky 
965*d6b92ffaSHans Petter Selasky struct ibv_kern_flow_attr {
966*d6b92ffaSHans Petter Selasky 	__u32 type;
967*d6b92ffaSHans Petter Selasky 	__u16 size;
968*d6b92ffaSHans Petter Selasky 	__u16 priority;
969*d6b92ffaSHans Petter Selasky 	__u8 num_of_specs;
970*d6b92ffaSHans Petter Selasky 	__u8 reserved[2];
971*d6b92ffaSHans Petter Selasky 	__u8 port;
972*d6b92ffaSHans Petter Selasky 	__u32 flags;
973*d6b92ffaSHans Petter Selasky 	/* Following are the optional layers according to user request
974*d6b92ffaSHans Petter Selasky 	 * struct ibv_kern_flow_spec_xxx
975*d6b92ffaSHans Petter Selasky 	 * struct ibv_kern_flow_spec_yyy
976*d6b92ffaSHans Petter Selasky 	 */
977*d6b92ffaSHans Petter Selasky };
978*d6b92ffaSHans Petter Selasky 
979*d6b92ffaSHans Petter Selasky struct ibv_post_send {
980*d6b92ffaSHans Petter Selasky 	__u32 command;
981*d6b92ffaSHans Petter Selasky 	__u16 in_words;
982*d6b92ffaSHans Petter Selasky 	__u16 out_words;
983*d6b92ffaSHans Petter Selasky 	__u64 response;
984*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
985*d6b92ffaSHans Petter Selasky 	__u32 wr_count;
986*d6b92ffaSHans Petter Selasky 	__u32 sge_count;
987*d6b92ffaSHans Petter Selasky 	__u32 wqe_size;
988*d6b92ffaSHans Petter Selasky 	struct ibv_kern_send_wr send_wr[0];
989*d6b92ffaSHans Petter Selasky };
990*d6b92ffaSHans Petter Selasky 
991*d6b92ffaSHans Petter Selasky struct ibv_post_send_resp {
992*d6b92ffaSHans Petter Selasky 	__u32 bad_wr;
993*d6b92ffaSHans Petter Selasky };
994*d6b92ffaSHans Petter Selasky 
995*d6b92ffaSHans Petter Selasky struct ibv_kern_recv_wr {
996*d6b92ffaSHans Petter Selasky 	__u64 wr_id;
997*d6b92ffaSHans Petter Selasky 	__u32 num_sge;
998*d6b92ffaSHans Petter Selasky 	__u32 reserved;
999*d6b92ffaSHans Petter Selasky };
1000*d6b92ffaSHans Petter Selasky 
1001*d6b92ffaSHans Petter Selasky struct ibv_post_recv {
1002*d6b92ffaSHans Petter Selasky 	__u32 command;
1003*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1004*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1005*d6b92ffaSHans Petter Selasky 	__u64 response;
1006*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1007*d6b92ffaSHans Petter Selasky 	__u32 wr_count;
1008*d6b92ffaSHans Petter Selasky 	__u32 sge_count;
1009*d6b92ffaSHans Petter Selasky 	__u32 wqe_size;
1010*d6b92ffaSHans Petter Selasky 	struct ibv_kern_recv_wr recv_wr[0];
1011*d6b92ffaSHans Petter Selasky };
1012*d6b92ffaSHans Petter Selasky 
1013*d6b92ffaSHans Petter Selasky struct ibv_post_recv_resp {
1014*d6b92ffaSHans Petter Selasky 	__u32 bad_wr;
1015*d6b92ffaSHans Petter Selasky };
1016*d6b92ffaSHans Petter Selasky 
1017*d6b92ffaSHans Petter Selasky struct ibv_post_srq_recv {
1018*d6b92ffaSHans Petter Selasky 	__u32 command;
1019*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1020*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1021*d6b92ffaSHans Petter Selasky 	__u64 response;
1022*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1023*d6b92ffaSHans Petter Selasky 	__u32 wr_count;
1024*d6b92ffaSHans Petter Selasky 	__u32 sge_count;
1025*d6b92ffaSHans Petter Selasky 	__u32 wqe_size;
1026*d6b92ffaSHans Petter Selasky 	struct ibv_kern_recv_wr recv_wr[0];
1027*d6b92ffaSHans Petter Selasky };
1028*d6b92ffaSHans Petter Selasky 
1029*d6b92ffaSHans Petter Selasky struct ibv_post_srq_recv_resp {
1030*d6b92ffaSHans Petter Selasky 	__u32 bad_wr;
1031*d6b92ffaSHans Petter Selasky };
1032*d6b92ffaSHans Petter Selasky 
1033*d6b92ffaSHans Petter Selasky struct ibv_create_ah {
1034*d6b92ffaSHans Petter Selasky 	__u32 command;
1035*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1036*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1037*d6b92ffaSHans Petter Selasky 	__u64 response;
1038*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
1039*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
1040*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1041*d6b92ffaSHans Petter Selasky 	struct ibv_kern_ah_attr attr;
1042*d6b92ffaSHans Petter Selasky };
1043*d6b92ffaSHans Petter Selasky 
1044*d6b92ffaSHans Petter Selasky struct ibv_create_ah_resp {
1045*d6b92ffaSHans Petter Selasky 	__u32 handle;
1046*d6b92ffaSHans Petter Selasky };
1047*d6b92ffaSHans Petter Selasky 
1048*d6b92ffaSHans Petter Selasky struct ibv_destroy_ah {
1049*d6b92ffaSHans Petter Selasky 	__u32 command;
1050*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1051*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1052*d6b92ffaSHans Petter Selasky 	__u32 ah_handle;
1053*d6b92ffaSHans Petter Selasky };
1054*d6b92ffaSHans Petter Selasky 
1055*d6b92ffaSHans Petter Selasky struct ibv_attach_mcast {
1056*d6b92ffaSHans Petter Selasky 	__u32 command;
1057*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1058*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1059*d6b92ffaSHans Petter Selasky 	__u8  gid[16];
1060*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1061*d6b92ffaSHans Petter Selasky 	__u16 mlid;
1062*d6b92ffaSHans Petter Selasky 	__u16 reserved;
1063*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1064*d6b92ffaSHans Petter Selasky };
1065*d6b92ffaSHans Petter Selasky 
1066*d6b92ffaSHans Petter Selasky struct ibv_create_flow  {
1067*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1068*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1069*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1070*d6b92ffaSHans Petter Selasky 	struct ibv_kern_flow_attr flow_attr;
1071*d6b92ffaSHans Petter Selasky };
1072*d6b92ffaSHans Petter Selasky 
1073*d6b92ffaSHans Petter Selasky struct ibv_create_flow_resp {
1074*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1075*d6b92ffaSHans Petter Selasky 	__u32 flow_handle;
1076*d6b92ffaSHans Petter Selasky };
1077*d6b92ffaSHans Petter Selasky 
1078*d6b92ffaSHans Petter Selasky struct ibv_destroy_flow  {
1079*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1080*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1081*d6b92ffaSHans Petter Selasky 	__u32 flow_handle;
1082*d6b92ffaSHans Petter Selasky };
1083*d6b92ffaSHans Petter Selasky 
1084*d6b92ffaSHans Petter Selasky struct ibv_detach_mcast {
1085*d6b92ffaSHans Petter Selasky 	__u32 command;
1086*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1087*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1088*d6b92ffaSHans Petter Selasky 	__u8  gid[16];
1089*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1090*d6b92ffaSHans Petter Selasky 	__u16 mlid;
1091*d6b92ffaSHans Petter Selasky 	__u16 reserved;
1092*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1093*d6b92ffaSHans Petter Selasky };
1094*d6b92ffaSHans Petter Selasky 
1095*d6b92ffaSHans Petter Selasky struct ibv_create_srq {
1096*d6b92ffaSHans Petter Selasky 	__u32 command;
1097*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1098*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1099*d6b92ffaSHans Petter Selasky 	__u64 response;
1100*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
1101*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
1102*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1103*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1104*d6b92ffaSHans Petter Selasky 	__u32 srq_limit;
1105*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1106*d6b92ffaSHans Petter Selasky };
1107*d6b92ffaSHans Petter Selasky 
1108*d6b92ffaSHans Petter Selasky struct ibv_create_xsrq {
1109*d6b92ffaSHans Petter Selasky 	__u32 command;
1110*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1111*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1112*d6b92ffaSHans Petter Selasky 	__u64 response;
1113*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
1114*d6b92ffaSHans Petter Selasky 	__u32 srq_type;
1115*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
1116*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1117*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1118*d6b92ffaSHans Petter Selasky 	__u32 srq_limit;
1119*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1120*d6b92ffaSHans Petter Selasky 	__u32 xrcd_handle;
1121*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
1122*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1123*d6b92ffaSHans Petter Selasky };
1124*d6b92ffaSHans Petter Selasky 
1125*d6b92ffaSHans Petter Selasky struct ibv_create_srq_resp {
1126*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1127*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1128*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1129*d6b92ffaSHans Petter Selasky 	__u32 srqn;
1130*d6b92ffaSHans Petter Selasky };
1131*d6b92ffaSHans Petter Selasky 
1132*d6b92ffaSHans Petter Selasky struct ibv_modify_srq {
1133*d6b92ffaSHans Petter Selasky 	__u32 command;
1134*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1135*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1136*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1137*d6b92ffaSHans Petter Selasky 	__u32 attr_mask;
1138*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1139*d6b92ffaSHans Petter Selasky 	__u32 srq_limit;
1140*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1141*d6b92ffaSHans Petter Selasky };
1142*d6b92ffaSHans Petter Selasky 
1143*d6b92ffaSHans Petter Selasky struct ibv_query_srq {
1144*d6b92ffaSHans Petter Selasky 	__u32 command;
1145*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1146*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1147*d6b92ffaSHans Petter Selasky 	__u64 response;
1148*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1149*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1150*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1151*d6b92ffaSHans Petter Selasky };
1152*d6b92ffaSHans Petter Selasky 
1153*d6b92ffaSHans Petter Selasky struct ibv_query_srq_resp {
1154*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1155*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1156*d6b92ffaSHans Petter Selasky 	__u32 srq_limit;
1157*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1158*d6b92ffaSHans Petter Selasky };
1159*d6b92ffaSHans Petter Selasky 
1160*d6b92ffaSHans Petter Selasky struct ibv_destroy_srq {
1161*d6b92ffaSHans Petter Selasky 	__u32 command;
1162*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1163*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1164*d6b92ffaSHans Petter Selasky 	__u64 response;
1165*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1166*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1167*d6b92ffaSHans Petter Selasky };
1168*d6b92ffaSHans Petter Selasky 
1169*d6b92ffaSHans Petter Selasky struct ibv_destroy_srq_resp {
1170*d6b92ffaSHans Petter Selasky 	__u32 events_reported;
1171*d6b92ffaSHans Petter Selasky };
1172*d6b92ffaSHans Petter Selasky 
1173*d6b92ffaSHans Petter Selasky /*
1174*d6b92ffaSHans Petter Selasky  * Compatibility with older ABI versions
1175*d6b92ffaSHans Petter Selasky  */
1176*d6b92ffaSHans Petter Selasky 
1177*d6b92ffaSHans Petter Selasky enum {
1178*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_PARAMS_V2,
1179*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_GET_CONTEXT_V2,
1180*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_DEVICE_V2,
1181*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_PORT_V2,
1182*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_GID_V2,
1183*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_PKEY_V2,
1184*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ALLOC_PD_V2,
1185*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEALLOC_PD_V2,
1186*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_AH_V2,
1187*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_AH_V2,
1188*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_AH_V2,
1189*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_AH_V2,
1190*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REG_MR_V2,
1191*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REG_SMR_V2,
1192*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REREG_MR_V2,
1193*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_MR_V2,
1194*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEREG_MR_V2,
1195*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ALLOC_MW_V2,
1196*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_BIND_MW_V2,
1197*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DEALLOC_MW_V2,
1198*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_CQ_V2,
1199*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_RESIZE_CQ_V2,
1200*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_CQ_V2,
1201*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POLL_CQ_V2,
1202*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_PEEK_CQ_V2,
1203*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ_V2,
1204*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_QP_V2,
1205*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_QP_V2,
1206*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_QP_V2,
1207*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_QP_V2,
1208*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_SEND_V2,
1209*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_RECV_V2,
1210*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_ATTACH_MCAST_V2,
1211*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DETACH_MCAST_V2,
1212*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_SRQ_V2,
1213*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_SRQ_V2,
1214*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_SRQ_V2,
1215*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_SRQ_V2,
1216*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_POST_SRQ_RECV_V2,
1217*d6b92ffaSHans Petter Selasky 	/*
1218*d6b92ffaSHans Petter Selasky 	 * Set commands that didn't exist to -1 so our compile-time
1219*d6b92ffaSHans Petter Selasky 	 * trick opcodes in IBV_INIT_CMD() doesn't break.
1220*d6b92ffaSHans Petter Selasky 	 */
1221*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL_V2 = -1,
1222*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_OPEN_XRCD_V2 = -1,
1223*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CLOSE_XRCD_V2 = -1,
1224*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_XSRQ_V2 = -1,
1225*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_OPEN_QP_V2 = -1,
1226*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_FLOW_V2 = -1,
1227*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_FLOW_V2 = -1,
1228*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_QUERY_DEVICE_EX_V2 = -1,
1229*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_QP_EX_V2 = -1,
1230*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_CQ_EX_V2 = -1,
1231*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_WQ_V2 = -1,
1232*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_WQ_V2 = -1,
1233*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_WQ_V2 = -1,
1234*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_CREATE_RWQ_IND_TBL_V2 = -1,
1235*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_DESTROY_RWQ_IND_TBL_V2 = -1,
1236*d6b92ffaSHans Petter Selasky 	IB_USER_VERBS_CMD_MODIFY_QP_EX_V2 = -1,
1237*d6b92ffaSHans Petter Selasky };
1238*d6b92ffaSHans Petter Selasky 
1239*d6b92ffaSHans Petter Selasky struct ibv_modify_srq_v3 {
1240*d6b92ffaSHans Petter Selasky 	__u32 command;
1241*d6b92ffaSHans Petter Selasky 	__u16 in_words;
1242*d6b92ffaSHans Petter Selasky 	__u16 out_words;
1243*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1244*d6b92ffaSHans Petter Selasky 	__u32 attr_mask;
1245*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1246*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1247*d6b92ffaSHans Petter Selasky 	__u32 srq_limit;
1248*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1249*d6b92ffaSHans Petter Selasky 	__u64 driver_data[0];
1250*d6b92ffaSHans Petter Selasky };
1251*d6b92ffaSHans Petter Selasky 
1252*d6b92ffaSHans Petter Selasky struct ibv_create_qp_resp_v3 {
1253*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1254*d6b92ffaSHans Petter Selasky 	__u32 qpn;
1255*d6b92ffaSHans Petter Selasky };
1256*d6b92ffaSHans Petter Selasky 
1257*d6b92ffaSHans Petter Selasky struct ibv_create_qp_resp_v4 {
1258*d6b92ffaSHans Petter Selasky 	__u32 qp_handle;
1259*d6b92ffaSHans Petter Selasky 	__u32 qpn;
1260*d6b92ffaSHans Petter Selasky 	__u32 max_send_wr;
1261*d6b92ffaSHans Petter Selasky 	__u32 max_recv_wr;
1262*d6b92ffaSHans Petter Selasky 	__u32 max_send_sge;
1263*d6b92ffaSHans Petter Selasky 	__u32 max_recv_sge;
1264*d6b92ffaSHans Petter Selasky 	__u32 max_inline_data;
1265*d6b92ffaSHans Petter Selasky };
1266*d6b92ffaSHans Petter Selasky 
1267*d6b92ffaSHans Petter Selasky struct ibv_create_srq_resp_v5 {
1268*d6b92ffaSHans Petter Selasky 	__u32 srq_handle;
1269*d6b92ffaSHans Petter Selasky };
1270*d6b92ffaSHans Petter Selasky 
1271*d6b92ffaSHans Petter Selasky struct ibv_create_wq {
1272*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1273*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1274*d6b92ffaSHans Petter Selasky 	__u32 wq_type;
1275*d6b92ffaSHans Petter Selasky 	__u64 user_handle;
1276*d6b92ffaSHans Petter Selasky 	__u32 pd_handle;
1277*d6b92ffaSHans Petter Selasky 	__u32 cq_handle;
1278*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1279*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1280*d6b92ffaSHans Petter Selasky 	__u32 create_flags;
1281*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1282*d6b92ffaSHans Petter Selasky };
1283*d6b92ffaSHans Petter Selasky 
1284*d6b92ffaSHans Petter Selasky struct ibv_create_wq_resp {
1285*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1286*d6b92ffaSHans Petter Selasky 	__u32 response_length;
1287*d6b92ffaSHans Petter Selasky 	__u32 wq_handle;
1288*d6b92ffaSHans Petter Selasky 	__u32 max_wr;
1289*d6b92ffaSHans Petter Selasky 	__u32 max_sge;
1290*d6b92ffaSHans Petter Selasky 	__u32 wqn;
1291*d6b92ffaSHans Petter Selasky };
1292*d6b92ffaSHans Petter Selasky 
1293*d6b92ffaSHans Petter Selasky struct ibv_destroy_wq {
1294*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1295*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1296*d6b92ffaSHans Petter Selasky 	__u32 wq_handle;
1297*d6b92ffaSHans Petter Selasky };
1298*d6b92ffaSHans Petter Selasky 
1299*d6b92ffaSHans Petter Selasky struct ibv_destroy_wq_resp {
1300*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1301*d6b92ffaSHans Petter Selasky 	__u32 response_length;
1302*d6b92ffaSHans Petter Selasky 	__u32 events_reported;
1303*d6b92ffaSHans Petter Selasky 	__u32 reserved;
1304*d6b92ffaSHans Petter Selasky };
1305*d6b92ffaSHans Petter Selasky 
1306*d6b92ffaSHans Petter Selasky struct ibv_modify_wq  {
1307*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1308*d6b92ffaSHans Petter Selasky 	__u32 attr_mask;
1309*d6b92ffaSHans Petter Selasky 	__u32 wq_handle;
1310*d6b92ffaSHans Petter Selasky 	__u32 wq_state;
1311*d6b92ffaSHans Petter Selasky 	__u32 curr_wq_state;
1312*d6b92ffaSHans Petter Selasky 	__u32 flags;
1313*d6b92ffaSHans Petter Selasky 	__u32 flags_mask;
1314*d6b92ffaSHans Petter Selasky };
1315*d6b92ffaSHans Petter Selasky 
1316*d6b92ffaSHans Petter Selasky struct ibv_create_rwq_ind_table {
1317*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1318*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1319*d6b92ffaSHans Petter Selasky 	__u32 log_ind_tbl_size;
1320*d6b92ffaSHans Petter Selasky 	/* Following are wq handles based on log_ind_tbl_size, must be 64 bytes aligned.
1321*d6b92ffaSHans Petter Selasky 	 * __u32 wq_handle1
1322*d6b92ffaSHans Petter Selasky 	 * __u32 wq_handle2
1323*d6b92ffaSHans Petter Selasky 	 */
1324*d6b92ffaSHans Petter Selasky };
1325*d6b92ffaSHans Petter Selasky 
1326*d6b92ffaSHans Petter Selasky struct ibv_create_rwq_ind_table_resp {
1327*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1328*d6b92ffaSHans Petter Selasky 	__u32 response_length;
1329*d6b92ffaSHans Petter Selasky 	__u32 ind_tbl_handle;
1330*d6b92ffaSHans Petter Selasky 	__u32 ind_tbl_num;
1331*d6b92ffaSHans Petter Selasky };
1332*d6b92ffaSHans Petter Selasky 
1333*d6b92ffaSHans Petter Selasky struct ibv_destroy_rwq_ind_table {
1334*d6b92ffaSHans Petter Selasky 	struct ex_hdr hdr;
1335*d6b92ffaSHans Petter Selasky 	__u32 comp_mask;
1336*d6b92ffaSHans Petter Selasky 	__u32 ind_tbl_handle;
1337*d6b92ffaSHans Petter Selasky };
1338*d6b92ffaSHans Petter Selasky 
1339*d6b92ffaSHans Petter Selasky #endif /* KERN_ABI_H */
1340