]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/ofed/include/rdma/ib_user_verbs.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / ofed / include / rdma / ib_user_verbs.h
1 /*
2  * Copyright (c) 2005 Topspin Communications.  All rights reserved.
3  * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
4  * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
5  * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
6  *
7  * This software is available to you under a choice of one of two
8  * licenses.  You may choose to be licensed under the terms of the GNU
9  * General Public License (GPL) Version 2, available from the file
10  * COPYING in the main directory of this source tree, or the
11  * OpenIB.org BSD license below:
12  *
13  *     Redistribution and use in source and binary forms, with or
14  *     without modification, are permitted provided that the following
15  *     conditions are met:
16  *
17  *      - Redistributions of source code must retain the above
18  *        copyright notice, this list of conditions and the following
19  *        disclaimer.
20  *
21  *      - Redistributions in binary form must reproduce the above
22  *        copyright notice, this list of conditions and the following
23  *        disclaimer in the documentation and/or other materials
24  *        provided with the distribution.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33  * SOFTWARE.
34  */
35
36 #ifndef IB_USER_VERBS_H
37 #define IB_USER_VERBS_H
38
39 #include <linux/types.h>
40
41 /*
42  * Increment this value if any changes that break userspace ABI
43  * compatibility are made.
44  */
45 #define IB_USER_VERBS_ABI_VERSION       6
46
47 enum {
48         IB_USER_VERBS_CMD_GET_CONTEXT,
49         IB_USER_VERBS_CMD_QUERY_DEVICE,
50         IB_USER_VERBS_CMD_QUERY_PORT,
51         IB_USER_VERBS_CMD_ALLOC_PD,
52         IB_USER_VERBS_CMD_DEALLOC_PD,
53         IB_USER_VERBS_CMD_CREATE_AH,
54         IB_USER_VERBS_CMD_MODIFY_AH,
55         IB_USER_VERBS_CMD_QUERY_AH,
56         IB_USER_VERBS_CMD_DESTROY_AH,
57         IB_USER_VERBS_CMD_REG_MR,
58         IB_USER_VERBS_CMD_REG_SMR,
59         IB_USER_VERBS_CMD_REREG_MR,
60         IB_USER_VERBS_CMD_QUERY_MR,
61         IB_USER_VERBS_CMD_DEREG_MR,
62         IB_USER_VERBS_CMD_ALLOC_MW,
63         IB_USER_VERBS_CMD_BIND_MW,
64         IB_USER_VERBS_CMD_DEALLOC_MW,
65         IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
66         IB_USER_VERBS_CMD_CREATE_CQ,
67         IB_USER_VERBS_CMD_RESIZE_CQ,
68         IB_USER_VERBS_CMD_DESTROY_CQ,
69         IB_USER_VERBS_CMD_POLL_CQ,
70         IB_USER_VERBS_CMD_PEEK_CQ,
71         IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
72         IB_USER_VERBS_CMD_CREATE_QP,
73         IB_USER_VERBS_CMD_QUERY_QP,
74         IB_USER_VERBS_CMD_MODIFY_QP,
75         IB_USER_VERBS_CMD_DESTROY_QP,
76         IB_USER_VERBS_CMD_POST_SEND,
77         IB_USER_VERBS_CMD_POST_RECV,
78         IB_USER_VERBS_CMD_ATTACH_MCAST,
79         IB_USER_VERBS_CMD_DETACH_MCAST,
80         IB_USER_VERBS_CMD_CREATE_SRQ,
81         IB_USER_VERBS_CMD_MODIFY_SRQ,
82         IB_USER_VERBS_CMD_QUERY_SRQ,
83         IB_USER_VERBS_CMD_DESTROY_SRQ,
84         IB_USER_VERBS_CMD_POST_SRQ_RECV,
85         IB_USER_VERBS_CMD_CREATE_XRC_SRQ,
86         IB_USER_VERBS_CMD_OPEN_XRC_DOMAIN,
87         IB_USER_VERBS_CMD_CLOSE_XRC_DOMAIN,
88         IB_USER_VERBS_CMD_CREATE_XRC_RCV_QP,
89         IB_USER_VERBS_CMD_MODIFY_XRC_RCV_QP,
90         IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP,
91         IB_USER_VERBS_CMD_REG_XRC_RCV_QP,
92         IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP,
93 };
94
95 /*
96  * Make sure that all structs defined in this file remain laid out so
97  * that they pack the same way on 32-bit and 64-bit architectures (to
98  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
99  * Specifically:
100  *  - Do not use pointer types -- pass pointers in __u64 instead.
101  *  - Make sure that any structure larger than 4 bytes is padded to a
102  *    multiple of 8 bytes.  Otherwise the structure size will be
103  *    different between 32-bit and 64-bit architectures.
104  */
105
106 struct ib_uverbs_async_event_desc {
107         __u64 element;
108         __u32 event_type;       /* enum ib_event_type */
109         __u32 reserved;
110 };
111
112 struct ib_uverbs_comp_event_desc {
113         __u64 cq_handle;
114 };
115
116 /*
117  * All commands from userspace should start with a __u32 command field
118  * followed by __u16 in_words and out_words fields (which give the
119  * length of the command block and response buffer if any in 32-bit
120  * words).  The kernel driver will read these fields first and read
121  * the rest of the command struct based on these value.
122  */
123
124 struct ib_uverbs_cmd_hdr {
125         __u32 command;
126         __u16 in_words;
127         __u16 out_words;
128 };
129
130 struct ib_uverbs_get_context {
131         __u64 response;
132         __u64 driver_data[0];
133 };
134
135 struct ib_uverbs_get_context_resp {
136         __u32 async_fd;
137         __u32 num_comp_vectors;
138 };
139
140 struct ib_uverbs_query_device {
141         __u64 response;
142         __u64 driver_data[0];
143 };
144
145 struct ib_uverbs_query_device_resp {
146         __u64 fw_ver;
147         __be64 node_guid;
148         __be64 sys_image_guid;
149         __u64 max_mr_size;
150         __u64 page_size_cap;
151         __u32 vendor_id;
152         __u32 vendor_part_id;
153         __u32 hw_ver;
154         __u32 max_qp;
155         __u32 max_qp_wr;
156         __u32 device_cap_flags;
157         __u32 max_sge;
158         __u32 max_sge_rd;
159         __u32 max_cq;
160         __u32 max_cqe;
161         __u32 max_mr;
162         __u32 max_pd;
163         __u32 max_qp_rd_atom;
164         __u32 max_ee_rd_atom;
165         __u32 max_res_rd_atom;
166         __u32 max_qp_init_rd_atom;
167         __u32 max_ee_init_rd_atom;
168         __u32 atomic_cap;
169         __u32 max_ee;
170         __u32 max_rdd;
171         __u32 max_mw;
172         __u32 max_raw_ipv6_qp;
173         __u32 max_raw_ethy_qp;
174         __u32 max_mcast_grp;
175         __u32 max_mcast_qp_attach;
176         __u32 max_total_mcast_qp_attach;
177         __u32 max_ah;
178         __u32 max_fmr;
179         __u32 max_map_per_fmr;
180         __u32 max_srq;
181         __u32 max_srq_wr;
182         __u32 max_srq_sge;
183         __u16 max_pkeys;
184         __u8  local_ca_ack_delay;
185         __u8  phys_port_cnt;
186         __u8  reserved[4];
187 };
188
189 struct ib_uverbs_query_port {
190         __u64 response;
191         __u8  port_num;
192         __u8  reserved[7];
193         __u64 driver_data[0];
194 };
195
196 struct ib_uverbs_query_port_resp {
197         __u32 port_cap_flags;
198         __u32 max_msg_sz;
199         __u32 bad_pkey_cntr;
200         __u32 qkey_viol_cntr;
201         __u32 gid_tbl_len;
202         __u16 pkey_tbl_len;
203         __u16 lid;
204         __u16 sm_lid;
205         __u8  state;
206         __u8  max_mtu;
207         __u8  active_mtu;
208         __u8  lmc;
209         __u8  max_vl_num;
210         __u8  sm_sl;
211         __u8  subnet_timeout;
212         __u8  init_type_reply;
213         __u8  active_width;
214         __u8  active_speed;
215         __u8  phys_state;
216         __u8  link_layer;
217         __u8  reserved[2];
218 };
219
220 struct ib_uverbs_alloc_pd {
221         __u64 response;
222         __u64 driver_data[0];
223 };
224
225 struct ib_uverbs_alloc_pd_resp {
226         __u32 pd_handle;
227 };
228
229 struct ib_uverbs_dealloc_pd {
230         __u32 pd_handle;
231 };
232
233 struct ib_uverbs_reg_mr {
234         __u64 response;
235         __u64 start;
236         __u64 length;
237         __u64 hca_va;
238         __u32 pd_handle;
239         __u32 access_flags;
240         __u64 driver_data[0];
241 };
242
243 struct ib_uverbs_reg_mr_resp {
244         __u32 mr_handle;
245         __u32 lkey;
246         __u32 rkey;
247 };
248
249 struct ib_uverbs_dereg_mr {
250         __u32 mr_handle;
251 };
252
253 struct ib_uverbs_create_comp_channel {
254         __u64 response;
255 };
256
257 struct ib_uverbs_create_comp_channel_resp {
258         __u32 fd;
259 };
260
261 struct ib_uverbs_create_cq {
262         __u64 response;
263         __u64 user_handle;
264         __u32 cqe;
265         __u32 comp_vector;
266         __s32 comp_channel;
267         __u32 reserved;
268         __u64 driver_data[0];
269 };
270
271 struct ib_uverbs_create_cq_resp {
272         __u32 cq_handle;
273         __u32 cqe;
274 };
275
276 struct ib_uverbs_resize_cq {
277         __u64 response;
278         __u32 cq_handle;
279         __u32 cqe;
280         __u64 driver_data[0];
281 };
282
283 struct ib_uverbs_resize_cq_resp {
284         __u32 cqe;
285         __u32 reserved;
286         __u64 driver_data[0];
287 };
288
289 struct ib_uverbs_poll_cq {
290         __u64 response;
291         __u32 cq_handle;
292         __u32 ne;
293 };
294
295 struct ib_uverbs_wc {
296         __u64 wr_id;
297         __u32 status;
298         __u32 opcode;
299         __u32 vendor_err;
300         __u32 byte_len;
301         union {
302                 __u32 imm_data;
303                 __u32 invalidate_rkey;
304         } ex;
305         __u32 qp_num;
306         __u32 src_qp;
307         __u32 wc_flags;
308         __u16 pkey_index;
309         __u16 slid;
310         __u8 sl;
311         __u8 dlid_path_bits;
312         __u8 port_num;
313         __u8 reserved;
314 };
315
316 struct ib_uverbs_poll_cq_resp {
317         __u32 count;
318         __u32 reserved;
319         struct ib_uverbs_wc wc[0];
320 };
321
322 struct ib_uverbs_req_notify_cq {
323         __u32 cq_handle;
324         __u32 solicited_only;
325 };
326
327 struct ib_uverbs_destroy_cq {
328         __u64 response;
329         __u32 cq_handle;
330         __u32 reserved;
331 };
332
333 struct ib_uverbs_destroy_cq_resp {
334         __u32 comp_events_reported;
335         __u32 async_events_reported;
336 };
337
338 struct ib_uverbs_global_route {
339         __u8  dgid[16];
340         __u32 flow_label;
341         __u8  sgid_index;
342         __u8  hop_limit;
343         __u8  traffic_class;
344         __u8  reserved;
345 };
346
347 struct ib_uverbs_ah_attr {
348         struct ib_uverbs_global_route grh;
349         __u16 dlid;
350         __u8  sl;
351         __u8  src_path_bits;
352         __u8  static_rate;
353         __u8  is_global;
354         __u8  port_num;
355         __u8  reserved;
356 };
357
358 struct ib_uverbs_qp_attr {
359         __u32   qp_attr_mask;
360         __u32   qp_state;
361         __u32   cur_qp_state;
362         __u32   path_mtu;
363         __u32   path_mig_state;
364         __u32   qkey;
365         __u32   rq_psn;
366         __u32   sq_psn;
367         __u32   dest_qp_num;
368         __u32   qp_access_flags;
369
370         struct ib_uverbs_ah_attr ah_attr;
371         struct ib_uverbs_ah_attr alt_ah_attr;
372
373         /* ib_qp_cap */
374         __u32   max_send_wr;
375         __u32   max_recv_wr;
376         __u32   max_send_sge;
377         __u32   max_recv_sge;
378         __u32   max_inline_data;
379
380         __u16   pkey_index;
381         __u16   alt_pkey_index;
382         __u8    en_sqd_async_notify;
383         __u8    sq_draining;
384         __u8    max_rd_atomic;
385         __u8    max_dest_rd_atomic;
386         __u8    min_rnr_timer;
387         __u8    port_num;
388         __u8    timeout;
389         __u8    retry_cnt;
390         __u8    rnr_retry;
391         __u8    alt_port_num;
392         __u8    alt_timeout;
393         __u8    reserved[5];
394 };
395
396 struct ib_uverbs_create_qp {
397         __u64 response;
398         __u64 user_handle;
399         __u32 pd_handle;
400         __u32 send_cq_handle;
401         __u32 recv_cq_handle;
402         __u32 srq_handle;
403         __u32 max_send_wr;
404         __u32 max_recv_wr;
405         __u32 max_send_sge;
406         __u32 max_recv_sge;
407         __u32 max_inline_data;
408         __u8  sq_sig_all;
409         __u8  qp_type;
410         __u8  is_srq;
411         __u8  reserved;
412         __u64 driver_data[0];
413 };
414
415 struct ib_uverbs_create_qp_resp {
416         __u32 qp_handle;
417         __u32 qpn;
418         __u32 max_send_wr;
419         __u32 max_recv_wr;
420         __u32 max_send_sge;
421         __u32 max_recv_sge;
422         __u32 max_inline_data;
423         __u32 reserved;
424 };
425
426 /*
427  * This struct needs to remain a multiple of 8 bytes to keep the
428  * alignment of the modify QP parameters.
429  */
430 struct ib_uverbs_qp_dest {
431         __u8  dgid[16];
432         __u32 flow_label;
433         __u16 dlid;
434         __u16 reserved;
435         __u8  sgid_index;
436         __u8  hop_limit;
437         __u8  traffic_class;
438         __u8  sl;
439         __u8  src_path_bits;
440         __u8  static_rate;
441         __u8  is_global;
442         __u8  port_num;
443 };
444
445 struct ib_uverbs_query_qp {
446         __u64 response;
447         __u32 qp_handle;
448         __u32 attr_mask;
449         __u64 driver_data[0];
450 };
451
452 struct ib_uverbs_query_qp_resp {
453         struct ib_uverbs_qp_dest dest;
454         struct ib_uverbs_qp_dest alt_dest;
455         __u32 max_send_wr;
456         __u32 max_recv_wr;
457         __u32 max_send_sge;
458         __u32 max_recv_sge;
459         __u32 max_inline_data;
460         __u32 qkey;
461         __u32 rq_psn;
462         __u32 sq_psn;
463         __u32 dest_qp_num;
464         __u32 qp_access_flags;
465         __u16 pkey_index;
466         __u16 alt_pkey_index;
467         __u8  qp_state;
468         __u8  cur_qp_state;
469         __u8  path_mtu;
470         __u8  path_mig_state;
471         __u8  sq_draining;
472         __u8  max_rd_atomic;
473         __u8  max_dest_rd_atomic;
474         __u8  min_rnr_timer;
475         __u8  port_num;
476         __u8  timeout;
477         __u8  retry_cnt;
478         __u8  rnr_retry;
479         __u8  alt_port_num;
480         __u8  alt_timeout;
481         __u8  sq_sig_all;
482         __u8  reserved[5];
483         __u64 driver_data[0];
484 };
485
486 struct ib_uverbs_modify_qp {
487         struct ib_uverbs_qp_dest dest;
488         struct ib_uverbs_qp_dest alt_dest;
489         __u32 qp_handle;
490         __u32 attr_mask;
491         __u32 qkey;
492         __u32 rq_psn;
493         __u32 sq_psn;
494         __u32 dest_qp_num;
495         __u32 qp_access_flags;
496         __u16 pkey_index;
497         __u16 alt_pkey_index;
498         __u8  qp_state;
499         __u8  cur_qp_state;
500         __u8  path_mtu;
501         __u8  path_mig_state;
502         __u8  en_sqd_async_notify;
503         __u8  max_rd_atomic;
504         __u8  max_dest_rd_atomic;
505         __u8  min_rnr_timer;
506         __u8  port_num;
507         __u8  timeout;
508         __u8  retry_cnt;
509         __u8  rnr_retry;
510         __u8  alt_port_num;
511         __u8  alt_timeout;
512         __u8  reserved[2];
513         __u64 driver_data[0];
514 };
515
516 struct ib_uverbs_modify_qp_resp {
517 };
518
519 struct ib_uverbs_destroy_qp {
520         __u64 response;
521         __u32 qp_handle;
522         __u32 reserved;
523 };
524
525 struct ib_uverbs_destroy_qp_resp {
526         __u32 events_reported;
527 };
528
529 /*
530  * The ib_uverbs_sge structure isn't used anywhere, since we assume
531  * the ib_sge structure is packed the same way on 32-bit and 64-bit
532  * architectures in both kernel and user space.  It's just here to
533  * document the ABI.
534  */
535 struct ib_uverbs_sge {
536         __u64 addr;
537         __u32 length;
538         __u32 lkey;
539 };
540
541 struct ib_uverbs_send_wr {
542         __u64 wr_id;
543         __u32 num_sge;
544         __u32 opcode;
545         __u32 send_flags;
546         union {
547                 __u32 imm_data;
548                 __u32 invalidate_rkey;
549         } ex;
550         union {
551                 struct {
552                         __u64 remote_addr;
553                         __u32 rkey;
554                         __u32 reserved;
555                 } rdma;
556                 struct {
557                         __u64 remote_addr;
558                         __u64 compare_add;
559                         __u64 swap;
560                         __u32 rkey;
561                         __u32 reserved;
562                 } atomic;
563                 struct {
564                         __u32 ah;
565                         __u32 remote_qpn;
566                         __u32 remote_qkey;
567                         __u32 reserved;
568                 } ud;
569         } wr;
570 };
571
572 struct ib_uverbs_post_send {
573         __u64 response;
574         __u32 qp_handle;
575         __u32 wr_count;
576         __u32 sge_count;
577         __u32 wqe_size;
578         struct ib_uverbs_send_wr send_wr[0];
579 };
580
581 struct ib_uverbs_post_send_resp {
582         __u32 bad_wr;
583 };
584
585 struct ib_uverbs_recv_wr {
586         __u64 wr_id;
587         __u32 num_sge;
588         __u32 reserved;
589 };
590
591 struct ib_uverbs_post_recv {
592         __u64 response;
593         __u32 qp_handle;
594         __u32 wr_count;
595         __u32 sge_count;
596         __u32 wqe_size;
597         struct ib_uverbs_recv_wr recv_wr[0];
598 };
599
600 struct ib_uverbs_post_recv_resp {
601         __u32 bad_wr;
602 };
603
604 struct ib_uverbs_post_srq_recv {
605         __u64 response;
606         __u32 srq_handle;
607         __u32 wr_count;
608         __u32 sge_count;
609         __u32 wqe_size;
610         struct ib_uverbs_recv_wr recv[0];
611 };
612
613 struct ib_uverbs_post_srq_recv_resp {
614         __u32 bad_wr;
615 };
616
617 struct ib_uverbs_create_ah {
618         __u64 response;
619         __u64 user_handle;
620         __u32 pd_handle;
621         __u32 reserved;
622         struct ib_uverbs_ah_attr attr;
623 };
624
625 struct ib_uverbs_create_ah_resp {
626         __u32 ah_handle;
627 };
628
629 struct ib_uverbs_destroy_ah {
630         __u32 ah_handle;
631 };
632
633 struct ib_uverbs_attach_mcast {
634         __u8  gid[16];
635         __u32 qp_handle;
636         __u16 mlid;
637         __u16 reserved;
638         __u64 driver_data[0];
639 };
640
641 struct ib_uverbs_detach_mcast {
642         __u8  gid[16];
643         __u32 qp_handle;
644         __u16 mlid;
645         __u16 reserved;
646         __u64 driver_data[0];
647 };
648
649 struct ib_uverbs_create_srq {
650         __u64 response;
651         __u64 user_handle;
652         __u32 pd_handle;
653         __u32 max_wr;
654         __u32 max_sge;
655         __u32 srq_limit;
656         __u64 driver_data[0];
657 };
658
659 struct ib_uverbs_create_xrc_srq {
660         __u64 response;
661         __u64 user_handle;
662         __u32 pd_handle;
663         __u32 max_wr;
664         __u32 max_sge;
665         __u32 srq_limit;
666         __u32 xrcd_handle;
667         __u32 xrc_cq;
668         __u64 driver_data[0];
669 };
670
671 struct ib_uverbs_create_srq_resp {
672         __u32 srq_handle;
673         __u32 max_wr;
674         __u32 max_sge;
675         __u32 reserved;
676 };
677
678 struct ib_uverbs_modify_srq {
679         __u32 srq_handle;
680         __u32 attr_mask;
681         __u32 max_wr;
682         __u32 srq_limit;
683         __u64 driver_data[0];
684 };
685
686 struct ib_uverbs_query_srq {
687         __u64 response;
688         __u32 srq_handle;
689         __u32 reserved;
690         __u64 driver_data[0];
691 };
692
693 struct ib_uverbs_query_srq_resp {
694         __u32 max_wr;
695         __u32 max_sge;
696         __u32 srq_limit;
697         __u32 reserved;
698 };
699
700 struct ib_uverbs_destroy_srq {
701         __u64 response;
702         __u32 srq_handle;
703         __u32 reserved;
704 };
705
706 struct ib_uverbs_destroy_srq_resp {
707         __u32 events_reported;
708 };
709
710 struct ib_uverbs_open_xrc_domain {
711         __u64 response;
712         __u32 fd;
713         __u32 oflags;
714         __u64 driver_data[0];
715 };
716
717 struct ib_uverbs_open_xrc_domain_resp {
718         __u32 xrcd_handle;
719 };
720
721 struct ib_uverbs_close_xrc_domain {
722         __u64 response;
723         __u32 xrcd_handle;
724         __u32 reserved;
725         __u64 driver_data[0];
726 };
727
728 struct ib_uverbs_create_xrc_rcv_qp {
729         __u64 response;
730         __u64 user_handle;
731         __u32 xrc_domain_handle;
732         __u32 max_send_wr;
733         __u32 max_recv_wr;
734         __u32 max_send_sge;
735         __u32 max_recv_sge;
736         __u32 max_inline_data;
737         __u8  sq_sig_all;
738         __u8  qp_type;
739         __u8  reserved[6];
740         __u64 driver_data[0];
741 };
742
743 struct ib_uverbs_create_xrc_rcv_qp_resp {
744         __u32 qpn;
745         __u32 reserved;
746 };
747
748 struct ib_uverbs_modify_xrc_rcv_qp {
749         __u32 xrc_domain_handle;
750         __u32 qp_num;
751         struct ib_uverbs_qp_dest dest;
752         struct ib_uverbs_qp_dest alt_dest;
753         __u32 attr_mask;
754         __u32 qkey;
755         __u32 rq_psn;
756         __u32 sq_psn;
757         __u32 dest_qp_num;
758         __u32 qp_access_flags;
759         __u16 pkey_index;
760         __u16 alt_pkey_index;
761         __u8  qp_state;
762         __u8  cur_qp_state;
763         __u8  path_mtu;
764         __u8  path_mig_state;
765         __u8  en_sqd_async_notify;
766         __u8  max_rd_atomic;
767         __u8  max_dest_rd_atomic;
768         __u8  min_rnr_timer;
769         __u8  port_num;
770         __u8  timeout;
771         __u8  retry_cnt;
772         __u8  rnr_retry;
773         __u8  alt_port_num;
774         __u8  alt_timeout;
775         __u8  reserved[6];
776         __u64 driver_data[0];
777 };
778
779 struct ib_uverbs_query_xrc_rcv_qp {
780         __u64 response;
781         __u32 xrc_domain_handle;
782         __u32 qp_num;
783         __u32 attr_mask;
784         __u32 reserved;
785         __u64 driver_data[0];
786 };
787
788 struct ib_uverbs_reg_xrc_rcv_qp {
789         __u32 xrc_domain_handle;
790         __u32 qp_num;
791         __u64 driver_data[0];
792 };
793
794 struct ib_uverbs_unreg_xrc_rcv_qp {
795         __u32 xrc_domain_handle;
796         __u32 qp_num;
797         __u64 driver_data[0];
798 };
799
800
801 #endif /* IB_USER_VERBS_H */