1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#ifndef IB_USER_VERBS_H
38#define IB_USER_VERBS_H
39
40#include <linux/types.h>
41
42
43
44
45
46#define IB_USER_VERBS_ABI_VERSION 6
47#define IB_USER_VERBS_CMD_THRESHOLD 50
48
49enum {
50 IB_USER_VERBS_CMD_GET_CONTEXT,
51 IB_USER_VERBS_CMD_QUERY_DEVICE,
52 IB_USER_VERBS_CMD_QUERY_PORT,
53 IB_USER_VERBS_CMD_ALLOC_PD,
54 IB_USER_VERBS_CMD_DEALLOC_PD,
55 IB_USER_VERBS_CMD_CREATE_AH,
56 IB_USER_VERBS_CMD_MODIFY_AH,
57 IB_USER_VERBS_CMD_QUERY_AH,
58 IB_USER_VERBS_CMD_DESTROY_AH,
59 IB_USER_VERBS_CMD_REG_MR,
60 IB_USER_VERBS_CMD_REG_SMR,
61 IB_USER_VERBS_CMD_REREG_MR,
62 IB_USER_VERBS_CMD_QUERY_MR,
63 IB_USER_VERBS_CMD_DEREG_MR,
64 IB_USER_VERBS_CMD_ALLOC_MW,
65 IB_USER_VERBS_CMD_BIND_MW,
66 IB_USER_VERBS_CMD_DEALLOC_MW,
67 IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
68 IB_USER_VERBS_CMD_CREATE_CQ,
69 IB_USER_VERBS_CMD_RESIZE_CQ,
70 IB_USER_VERBS_CMD_DESTROY_CQ,
71 IB_USER_VERBS_CMD_POLL_CQ,
72 IB_USER_VERBS_CMD_PEEK_CQ,
73 IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
74 IB_USER_VERBS_CMD_CREATE_QP,
75 IB_USER_VERBS_CMD_QUERY_QP,
76 IB_USER_VERBS_CMD_MODIFY_QP,
77 IB_USER_VERBS_CMD_DESTROY_QP,
78 IB_USER_VERBS_CMD_POST_SEND,
79 IB_USER_VERBS_CMD_POST_RECV,
80 IB_USER_VERBS_CMD_ATTACH_MCAST,
81 IB_USER_VERBS_CMD_DETACH_MCAST,
82 IB_USER_VERBS_CMD_CREATE_SRQ,
83 IB_USER_VERBS_CMD_MODIFY_SRQ,
84 IB_USER_VERBS_CMD_QUERY_SRQ,
85 IB_USER_VERBS_CMD_DESTROY_SRQ,
86 IB_USER_VERBS_CMD_POST_SRQ_RECV,
87 IB_USER_VERBS_CMD_OPEN_XRCD,
88 IB_USER_VERBS_CMD_CLOSE_XRCD,
89 IB_USER_VERBS_CMD_CREATE_XSRQ,
90 IB_USER_VERBS_CMD_OPEN_QP,
91};
92
93enum {
94 IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,
95 IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,
96 IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,
97 IB_USER_VERBS_EX_CMD_MODIFY_QP = IB_USER_VERBS_CMD_MODIFY_QP,
98 IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
99 IB_USER_VERBS_EX_CMD_DESTROY_FLOW,
100 IB_USER_VERBS_EX_CMD_CREATE_WQ,
101 IB_USER_VERBS_EX_CMD_MODIFY_WQ,
102 IB_USER_VERBS_EX_CMD_DESTROY_WQ,
103 IB_USER_VERBS_EX_CMD_CREATE_RWQ_IND_TBL,
104 IB_USER_VERBS_EX_CMD_DESTROY_RWQ_IND_TBL,
105 IB_USER_VERBS_EX_CMD_MODIFY_CQ
106};
107
108
109
110
111
112
113
114
115
116
117
118
119struct ib_uverbs_async_event_desc {
120 __aligned_u64 element;
121 __u32 event_type;
122 __u32 reserved;
123};
124
125struct ib_uverbs_comp_event_desc {
126 __aligned_u64 cq_handle;
127};
128
129struct ib_uverbs_cq_moderation_caps {
130 __u16 max_cq_moderation_count;
131 __u16 max_cq_moderation_period;
132 __u32 reserved;
133};
134
135
136
137
138
139
140
141
142
143#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
144#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u
145
146struct ib_uverbs_cmd_hdr {
147 __u32 command;
148 __u16 in_words;
149 __u16 out_words;
150};
151
152struct ib_uverbs_ex_cmd_hdr {
153 __aligned_u64 response;
154 __u16 provider_in_words;
155 __u16 provider_out_words;
156 __u32 cmd_hdr_reserved;
157};
158
159struct ib_uverbs_get_context {
160 __aligned_u64 response;
161 __aligned_u64 driver_data[0];
162};
163
164struct ib_uverbs_get_context_resp {
165 __u32 async_fd;
166 __u32 num_comp_vectors;
167};
168
169struct ib_uverbs_query_device {
170 __aligned_u64 response;
171 __aligned_u64 driver_data[0];
172};
173
174struct ib_uverbs_query_device_resp {
175 __aligned_u64 fw_ver;
176 __be64 node_guid;
177 __be64 sys_image_guid;
178 __aligned_u64 max_mr_size;
179 __aligned_u64 page_size_cap;
180 __u32 vendor_id;
181 __u32 vendor_part_id;
182 __u32 hw_ver;
183 __u32 max_qp;
184 __u32 max_qp_wr;
185 __u32 device_cap_flags;
186 __u32 max_sge;
187 __u32 max_sge_rd;
188 __u32 max_cq;
189 __u32 max_cqe;
190 __u32 max_mr;
191 __u32 max_pd;
192 __u32 max_qp_rd_atom;
193 __u32 max_ee_rd_atom;
194 __u32 max_res_rd_atom;
195 __u32 max_qp_init_rd_atom;
196 __u32 max_ee_init_rd_atom;
197 __u32 atomic_cap;
198 __u32 max_ee;
199 __u32 max_rdd;
200 __u32 max_mw;
201 __u32 max_raw_ipv6_qp;
202 __u32 max_raw_ethy_qp;
203 __u32 max_mcast_grp;
204 __u32 max_mcast_qp_attach;
205 __u32 max_total_mcast_qp_attach;
206 __u32 max_ah;
207 __u32 max_fmr;
208 __u32 max_map_per_fmr;
209 __u32 max_srq;
210 __u32 max_srq_wr;
211 __u32 max_srq_sge;
212 __u16 max_pkeys;
213 __u8 local_ca_ack_delay;
214 __u8 phys_port_cnt;
215 __u8 reserved[4];
216};
217
218struct ib_uverbs_ex_query_device {
219 __u32 comp_mask;
220 __u32 reserved;
221};
222
223struct ib_uverbs_odp_caps {
224 __aligned_u64 general_caps;
225 struct {
226 __u32 rc_odp_caps;
227 __u32 uc_odp_caps;
228 __u32 ud_odp_caps;
229 } per_transport_caps;
230 __u32 reserved;
231};
232
233struct ib_uverbs_rss_caps {
234
235
236
237
238 __u32 supported_qpts;
239 __u32 max_rwq_indirection_tables;
240 __u32 max_rwq_indirection_table_size;
241 __u32 reserved;
242};
243
244struct ib_uverbs_tm_caps {
245
246 __u32 max_rndv_hdr_size;
247
248 __u32 max_num_tags;
249
250 __u32 flags;
251
252 __u32 max_ops;
253
254 __u32 max_sge;
255 __u32 reserved;
256};
257
258struct ib_uverbs_ex_query_device_resp {
259 struct ib_uverbs_query_device_resp base;
260 __u32 comp_mask;
261 __u32 response_length;
262 struct ib_uverbs_odp_caps odp_caps;
263 __aligned_u64 timestamp_mask;
264 __aligned_u64 hca_core_clock;
265 __aligned_u64 device_cap_flags_ex;
266 struct ib_uverbs_rss_caps rss_caps;
267 __u32 max_wq_type_rq;
268 __u32 raw_packet_caps;
269 struct ib_uverbs_tm_caps tm_caps;
270 struct ib_uverbs_cq_moderation_caps cq_moderation_caps;
271 __aligned_u64 max_dm_size;
272};
273
274struct ib_uverbs_query_port {
275 __aligned_u64 response;
276 __u8 port_num;
277 __u8 reserved[7];
278 __aligned_u64 driver_data[0];
279};
280
281struct ib_uverbs_query_port_resp {
282 __u32 port_cap_flags;
283 __u32 max_msg_sz;
284 __u32 bad_pkey_cntr;
285 __u32 qkey_viol_cntr;
286 __u32 gid_tbl_len;
287 __u16 pkey_tbl_len;
288 __u16 lid;
289 __u16 sm_lid;
290 __u8 state;
291 __u8 max_mtu;
292 __u8 active_mtu;
293 __u8 lmc;
294 __u8 max_vl_num;
295 __u8 sm_sl;
296 __u8 subnet_timeout;
297 __u8 init_type_reply;
298 __u8 active_width;
299 __u8 active_speed;
300 __u8 phys_state;
301 __u8 link_layer;
302 __u8 flags;
303 __u8 reserved;
304};
305
306struct ib_uverbs_alloc_pd {
307 __aligned_u64 response;
308 __aligned_u64 driver_data[0];
309};
310
311struct ib_uverbs_alloc_pd_resp {
312 __u32 pd_handle;
313};
314
315struct ib_uverbs_dealloc_pd {
316 __u32 pd_handle;
317};
318
319struct ib_uverbs_open_xrcd {
320 __aligned_u64 response;
321 __u32 fd;
322 __u32 oflags;
323 __aligned_u64 driver_data[0];
324};
325
326struct ib_uverbs_open_xrcd_resp {
327 __u32 xrcd_handle;
328};
329
330struct ib_uverbs_close_xrcd {
331 __u32 xrcd_handle;
332};
333
334struct ib_uverbs_reg_mr {
335 __aligned_u64 response;
336 __aligned_u64 start;
337 __aligned_u64 length;
338 __aligned_u64 hca_va;
339 __u32 pd_handle;
340 __u32 access_flags;
341 __aligned_u64 driver_data[0];
342};
343
344struct ib_uverbs_reg_mr_resp {
345 __u32 mr_handle;
346 __u32 lkey;
347 __u32 rkey;
348};
349
350struct ib_uverbs_rereg_mr {
351 __aligned_u64 response;
352 __u32 mr_handle;
353 __u32 flags;
354 __aligned_u64 start;
355 __aligned_u64 length;
356 __aligned_u64 hca_va;
357 __u32 pd_handle;
358 __u32 access_flags;
359};
360
361struct ib_uverbs_rereg_mr_resp {
362 __u32 lkey;
363 __u32 rkey;
364};
365
366struct ib_uverbs_dereg_mr {
367 __u32 mr_handle;
368};
369
370struct ib_uverbs_alloc_mw {
371 __aligned_u64 response;
372 __u32 pd_handle;
373 __u8 mw_type;
374 __u8 reserved[3];
375};
376
377struct ib_uverbs_alloc_mw_resp {
378 __u32 mw_handle;
379 __u32 rkey;
380};
381
382struct ib_uverbs_dealloc_mw {
383 __u32 mw_handle;
384};
385
386struct ib_uverbs_create_comp_channel {
387 __aligned_u64 response;
388};
389
390struct ib_uverbs_create_comp_channel_resp {
391 __u32 fd;
392};
393
394struct ib_uverbs_create_cq {
395 __aligned_u64 response;
396 __aligned_u64 user_handle;
397 __u32 cqe;
398 __u32 comp_vector;
399 __s32 comp_channel;
400 __u32 reserved;
401 __aligned_u64 driver_data[0];
402};
403
404enum ib_uverbs_ex_create_cq_flags {
405 IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,
406 IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,
407};
408
409struct ib_uverbs_ex_create_cq {
410 __aligned_u64 user_handle;
411 __u32 cqe;
412 __u32 comp_vector;
413 __s32 comp_channel;
414 __u32 comp_mask;
415 __u32 flags;
416 __u32 reserved;
417};
418
419struct ib_uverbs_create_cq_resp {
420 __u32 cq_handle;
421 __u32 cqe;
422};
423
424struct ib_uverbs_ex_create_cq_resp {
425 struct ib_uverbs_create_cq_resp base;
426 __u32 comp_mask;
427 __u32 response_length;
428};
429
430struct ib_uverbs_resize_cq {
431 __aligned_u64 response;
432 __u32 cq_handle;
433 __u32 cqe;
434 __aligned_u64 driver_data[0];
435};
436
437struct ib_uverbs_resize_cq_resp {
438 __u32 cqe;
439 __u32 reserved;
440 __aligned_u64 driver_data[0];
441};
442
443struct ib_uverbs_poll_cq {
444 __aligned_u64 response;
445 __u32 cq_handle;
446 __u32 ne;
447};
448
449struct ib_uverbs_wc {
450 __aligned_u64 wr_id;
451 __u32 status;
452 __u32 opcode;
453 __u32 vendor_err;
454 __u32 byte_len;
455 union {
456 __be32 imm_data;
457 __u32 invalidate_rkey;
458 } ex;
459 __u32 qp_num;
460 __u32 src_qp;
461 __u32 wc_flags;
462 __u16 pkey_index;
463 __u16 slid;
464 __u8 sl;
465 __u8 dlid_path_bits;
466 __u8 port_num;
467 __u8 reserved;
468};
469
470struct ib_uverbs_poll_cq_resp {
471 __u32 count;
472 __u32 reserved;
473 struct ib_uverbs_wc wc[0];
474};
475
476struct ib_uverbs_req_notify_cq {
477 __u32 cq_handle;
478 __u32 solicited_only;
479};
480
481struct ib_uverbs_destroy_cq {
482 __aligned_u64 response;
483 __u32 cq_handle;
484 __u32 reserved;
485};
486
487struct ib_uverbs_destroy_cq_resp {
488 __u32 comp_events_reported;
489 __u32 async_events_reported;
490};
491
492struct ib_uverbs_global_route {
493 __u8 dgid[16];
494 __u32 flow_label;
495 __u8 sgid_index;
496 __u8 hop_limit;
497 __u8 traffic_class;
498 __u8 reserved;
499};
500
501struct ib_uverbs_ah_attr {
502 struct ib_uverbs_global_route grh;
503 __u16 dlid;
504 __u8 sl;
505 __u8 src_path_bits;
506 __u8 static_rate;
507 __u8 is_global;
508 __u8 port_num;
509 __u8 reserved;
510};
511
512struct ib_uverbs_qp_attr {
513 __u32 qp_attr_mask;
514 __u32 qp_state;
515 __u32 cur_qp_state;
516 __u32 path_mtu;
517 __u32 path_mig_state;
518 __u32 qkey;
519 __u32 rq_psn;
520 __u32 sq_psn;
521 __u32 dest_qp_num;
522 __u32 qp_access_flags;
523
524 struct ib_uverbs_ah_attr ah_attr;
525 struct ib_uverbs_ah_attr alt_ah_attr;
526
527
528 __u32 max_send_wr;
529 __u32 max_recv_wr;
530 __u32 max_send_sge;
531 __u32 max_recv_sge;
532 __u32 max_inline_data;
533
534 __u16 pkey_index;
535 __u16 alt_pkey_index;
536 __u8 en_sqd_async_notify;
537 __u8 sq_draining;
538 __u8 max_rd_atomic;
539 __u8 max_dest_rd_atomic;
540 __u8 min_rnr_timer;
541 __u8 port_num;
542 __u8 timeout;
543 __u8 retry_cnt;
544 __u8 rnr_retry;
545 __u8 alt_port_num;
546 __u8 alt_timeout;
547 __u8 reserved[5];
548};
549
550struct ib_uverbs_create_qp {
551 __aligned_u64 response;
552 __aligned_u64 user_handle;
553 __u32 pd_handle;
554 __u32 send_cq_handle;
555 __u32 recv_cq_handle;
556 __u32 srq_handle;
557 __u32 max_send_wr;
558 __u32 max_recv_wr;
559 __u32 max_send_sge;
560 __u32 max_recv_sge;
561 __u32 max_inline_data;
562 __u8 sq_sig_all;
563 __u8 qp_type;
564 __u8 is_srq;
565 __u8 reserved;
566 __aligned_u64 driver_data[0];
567};
568
569enum ib_uverbs_create_qp_mask {
570 IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1UL << 0,
571};
572
573enum {
574 IB_UVERBS_CREATE_QP_SUP_COMP_MASK = IB_UVERBS_CREATE_QP_MASK_IND_TABLE,
575};
576
577enum {
578
579
580
581 IB_USER_LEGACY_LAST_QP_ATTR_MASK = 1ULL << 20,
582};
583
584enum {
585
586
587
588 IB_USER_LAST_QP_ATTR_MASK = 1ULL << 25,
589};
590
591struct ib_uverbs_ex_create_qp {
592 __aligned_u64 user_handle;
593 __u32 pd_handle;
594 __u32 send_cq_handle;
595 __u32 recv_cq_handle;
596 __u32 srq_handle;
597 __u32 max_send_wr;
598 __u32 max_recv_wr;
599 __u32 max_send_sge;
600 __u32 max_recv_sge;
601 __u32 max_inline_data;
602 __u8 sq_sig_all;
603 __u8 qp_type;
604 __u8 is_srq;
605 __u8 reserved;
606 __u32 comp_mask;
607 __u32 create_flags;
608 __u32 rwq_ind_tbl_handle;
609 __u32 source_qpn;
610};
611
612struct ib_uverbs_open_qp {
613 __aligned_u64 response;
614 __aligned_u64 user_handle;
615 __u32 pd_handle;
616 __u32 qpn;
617 __u8 qp_type;
618 __u8 reserved[7];
619 __aligned_u64 driver_data[0];
620};
621
622
623struct ib_uverbs_create_qp_resp {
624 __u32 qp_handle;
625 __u32 qpn;
626 __u32 max_send_wr;
627 __u32 max_recv_wr;
628 __u32 max_send_sge;
629 __u32 max_recv_sge;
630 __u32 max_inline_data;
631 __u32 reserved;
632};
633
634struct ib_uverbs_ex_create_qp_resp {
635 struct ib_uverbs_create_qp_resp base;
636 __u32 comp_mask;
637 __u32 response_length;
638};
639
640
641
642
643
644struct ib_uverbs_qp_dest {
645 __u8 dgid[16];
646 __u32 flow_label;
647 __u16 dlid;
648 __u16 reserved;
649 __u8 sgid_index;
650 __u8 hop_limit;
651 __u8 traffic_class;
652 __u8 sl;
653 __u8 src_path_bits;
654 __u8 static_rate;
655 __u8 is_global;
656 __u8 port_num;
657};
658
659struct ib_uverbs_query_qp {
660 __aligned_u64 response;
661 __u32 qp_handle;
662 __u32 attr_mask;
663 __aligned_u64 driver_data[0];
664};
665
666struct ib_uverbs_query_qp_resp {
667 struct ib_uverbs_qp_dest dest;
668 struct ib_uverbs_qp_dest alt_dest;
669 __u32 max_send_wr;
670 __u32 max_recv_wr;
671 __u32 max_send_sge;
672 __u32 max_recv_sge;
673 __u32 max_inline_data;
674 __u32 qkey;
675 __u32 rq_psn;
676 __u32 sq_psn;
677 __u32 dest_qp_num;
678 __u32 qp_access_flags;
679 __u16 pkey_index;
680 __u16 alt_pkey_index;
681 __u8 qp_state;
682 __u8 cur_qp_state;
683 __u8 path_mtu;
684 __u8 path_mig_state;
685 __u8 sq_draining;
686 __u8 max_rd_atomic;
687 __u8 max_dest_rd_atomic;
688 __u8 min_rnr_timer;
689 __u8 port_num;
690 __u8 timeout;
691 __u8 retry_cnt;
692 __u8 rnr_retry;
693 __u8 alt_port_num;
694 __u8 alt_timeout;
695 __u8 sq_sig_all;
696 __u8 reserved[5];
697 __aligned_u64 driver_data[0];
698};
699
700struct ib_uverbs_modify_qp {
701 struct ib_uverbs_qp_dest dest;
702 struct ib_uverbs_qp_dest alt_dest;
703 __u32 qp_handle;
704 __u32 attr_mask;
705 __u32 qkey;
706 __u32 rq_psn;
707 __u32 sq_psn;
708 __u32 dest_qp_num;
709 __u32 qp_access_flags;
710 __u16 pkey_index;
711 __u16 alt_pkey_index;
712 __u8 qp_state;
713 __u8 cur_qp_state;
714 __u8 path_mtu;
715 __u8 path_mig_state;
716 __u8 en_sqd_async_notify;
717 __u8 max_rd_atomic;
718 __u8 max_dest_rd_atomic;
719 __u8 min_rnr_timer;
720 __u8 port_num;
721 __u8 timeout;
722 __u8 retry_cnt;
723 __u8 rnr_retry;
724 __u8 alt_port_num;
725 __u8 alt_timeout;
726 __u8 reserved[2];
727 __aligned_u64 driver_data[0];
728};
729
730struct ib_uverbs_ex_modify_qp {
731 struct ib_uverbs_modify_qp base;
732 __u32 rate_limit;
733 __u32 reserved;
734};
735
736struct ib_uverbs_modify_qp_resp {
737};
738
739struct ib_uverbs_ex_modify_qp_resp {
740 __u32 comp_mask;
741 __u32 response_length;
742};
743
744struct ib_uverbs_destroy_qp {
745 __aligned_u64 response;
746 __u32 qp_handle;
747 __u32 reserved;
748};
749
750struct ib_uverbs_destroy_qp_resp {
751 __u32 events_reported;
752};
753
754
755
756
757
758
759
760struct ib_uverbs_sge {
761 __aligned_u64 addr;
762 __u32 length;
763 __u32 lkey;
764};
765
766struct ib_uverbs_send_wr {
767 __aligned_u64 wr_id;
768 __u32 num_sge;
769 __u32 opcode;
770 __u32 send_flags;
771 union {
772 __be32 imm_data;
773 __u32 invalidate_rkey;
774 } ex;
775 union {
776 struct {
777 __aligned_u64 remote_addr;
778 __u32 rkey;
779 __u32 reserved;
780 } rdma;
781 struct {
782 __aligned_u64 remote_addr;
783 __aligned_u64 compare_add;
784 __aligned_u64 swap;
785 __u32 rkey;
786 __u32 reserved;
787 } atomic;
788 struct {
789 __u32 ah;
790 __u32 remote_qpn;
791 __u32 remote_qkey;
792 __u32 reserved;
793 } ud;
794 } wr;
795};
796
797struct ib_uverbs_post_send {
798 __aligned_u64 response;
799 __u32 qp_handle;
800 __u32 wr_count;
801 __u32 sge_count;
802 __u32 wqe_size;
803 struct ib_uverbs_send_wr send_wr[0];
804};
805
806struct ib_uverbs_post_send_resp {
807 __u32 bad_wr;
808};
809
810struct ib_uverbs_recv_wr {
811 __aligned_u64 wr_id;
812 __u32 num_sge;
813 __u32 reserved;
814};
815
816struct ib_uverbs_post_recv {
817 __aligned_u64 response;
818 __u32 qp_handle;
819 __u32 wr_count;
820 __u32 sge_count;
821 __u32 wqe_size;
822 struct ib_uverbs_recv_wr recv_wr[0];
823};
824
825struct ib_uverbs_post_recv_resp {
826 __u32 bad_wr;
827};
828
829struct ib_uverbs_post_srq_recv {
830 __aligned_u64 response;
831 __u32 srq_handle;
832 __u32 wr_count;
833 __u32 sge_count;
834 __u32 wqe_size;
835 struct ib_uverbs_recv_wr recv[0];
836};
837
838struct ib_uverbs_post_srq_recv_resp {
839 __u32 bad_wr;
840};
841
842struct ib_uverbs_create_ah {
843 __aligned_u64 response;
844 __aligned_u64 user_handle;
845 __u32 pd_handle;
846 __u32 reserved;
847 struct ib_uverbs_ah_attr attr;
848};
849
850struct ib_uverbs_create_ah_resp {
851 __u32 ah_handle;
852};
853
854struct ib_uverbs_destroy_ah {
855 __u32 ah_handle;
856};
857
858struct ib_uverbs_attach_mcast {
859 __u8 gid[16];
860 __u32 qp_handle;
861 __u16 mlid;
862 __u16 reserved;
863 __aligned_u64 driver_data[0];
864};
865
866struct ib_uverbs_detach_mcast {
867 __u8 gid[16];
868 __u32 qp_handle;
869 __u16 mlid;
870 __u16 reserved;
871 __aligned_u64 driver_data[0];
872};
873
874struct ib_uverbs_flow_spec_hdr {
875 __u32 type;
876 __u16 size;
877 __u16 reserved;
878
879 __aligned_u64 flow_spec_data[0];
880};
881
882struct ib_uverbs_flow_eth_filter {
883 __u8 dst_mac[6];
884 __u8 src_mac[6];
885 __be16 ether_type;
886 __be16 vlan_tag;
887};
888
889struct ib_uverbs_flow_spec_eth {
890 union {
891 struct ib_uverbs_flow_spec_hdr hdr;
892 struct {
893 __u32 type;
894 __u16 size;
895 __u16 reserved;
896 };
897 };
898 struct ib_uverbs_flow_eth_filter val;
899 struct ib_uverbs_flow_eth_filter mask;
900};
901
902struct ib_uverbs_flow_ipv4_filter {
903 __be32 src_ip;
904 __be32 dst_ip;
905 __u8 proto;
906 __u8 tos;
907 __u8 ttl;
908 __u8 flags;
909};
910
911struct ib_uverbs_flow_spec_ipv4 {
912 union {
913 struct ib_uverbs_flow_spec_hdr hdr;
914 struct {
915 __u32 type;
916 __u16 size;
917 __u16 reserved;
918 };
919 };
920 struct ib_uverbs_flow_ipv4_filter val;
921 struct ib_uverbs_flow_ipv4_filter mask;
922};
923
924struct ib_uverbs_flow_tcp_udp_filter {
925 __be16 dst_port;
926 __be16 src_port;
927};
928
929struct ib_uverbs_flow_spec_tcp_udp {
930 union {
931 struct ib_uverbs_flow_spec_hdr hdr;
932 struct {
933 __u32 type;
934 __u16 size;
935 __u16 reserved;
936 };
937 };
938 struct ib_uverbs_flow_tcp_udp_filter val;
939 struct ib_uverbs_flow_tcp_udp_filter mask;
940};
941
942struct ib_uverbs_flow_ipv6_filter {
943 __u8 src_ip[16];
944 __u8 dst_ip[16];
945 __be32 flow_label;
946 __u8 next_hdr;
947 __u8 traffic_class;
948 __u8 hop_limit;
949 __u8 reserved;
950};
951
952struct ib_uverbs_flow_spec_ipv6 {
953 union {
954 struct ib_uverbs_flow_spec_hdr hdr;
955 struct {
956 __u32 type;
957 __u16 size;
958 __u16 reserved;
959 };
960 };
961 struct ib_uverbs_flow_ipv6_filter val;
962 struct ib_uverbs_flow_ipv6_filter mask;
963};
964
965struct ib_uverbs_flow_spec_action_tag {
966 union {
967 struct ib_uverbs_flow_spec_hdr hdr;
968 struct {
969 __u32 type;
970 __u16 size;
971 __u16 reserved;
972 };
973 };
974 __u32 tag_id;
975 __u32 reserved1;
976};
977
978struct ib_uverbs_flow_spec_action_drop {
979 union {
980 struct ib_uverbs_flow_spec_hdr hdr;
981 struct {
982 __u32 type;
983 __u16 size;
984 __u16 reserved;
985 };
986 };
987};
988
989struct ib_uverbs_flow_spec_action_handle {
990 union {
991 struct ib_uverbs_flow_spec_hdr hdr;
992 struct {
993 __u32 type;
994 __u16 size;
995 __u16 reserved;
996 };
997 };
998 __u32 handle;
999 __u32 reserved1;
1000};
1001
1002struct ib_uverbs_flow_spec_action_count {
1003 union {
1004 struct ib_uverbs_flow_spec_hdr hdr;
1005 struct {
1006 __u32 type;
1007 __u16 size;
1008 __u16 reserved;
1009 };
1010 };
1011 __u32 handle;
1012 __u32 reserved1;
1013};
1014
1015struct ib_uverbs_flow_tunnel_filter {
1016 __be32 tunnel_id;
1017};
1018
1019struct ib_uverbs_flow_spec_tunnel {
1020 union {
1021 struct ib_uverbs_flow_spec_hdr hdr;
1022 struct {
1023 __u32 type;
1024 __u16 size;
1025 __u16 reserved;
1026 };
1027 };
1028 struct ib_uverbs_flow_tunnel_filter val;
1029 struct ib_uverbs_flow_tunnel_filter mask;
1030};
1031
1032struct ib_uverbs_flow_spec_esp_filter {
1033 __u32 spi;
1034 __u32 seq;
1035};
1036
1037struct ib_uverbs_flow_spec_esp {
1038 union {
1039 struct ib_uverbs_flow_spec_hdr hdr;
1040 struct {
1041 __u32 type;
1042 __u16 size;
1043 __u16 reserved;
1044 };
1045 };
1046 struct ib_uverbs_flow_spec_esp_filter val;
1047 struct ib_uverbs_flow_spec_esp_filter mask;
1048};
1049
1050struct ib_uverbs_flow_gre_filter {
1051
1052
1053
1054
1055
1056
1057
1058
1059 __be16 c_ks_res0_ver;
1060 __be16 protocol;
1061 __be32 key;
1062};
1063
1064struct ib_uverbs_flow_spec_gre {
1065 union {
1066 struct ib_uverbs_flow_spec_hdr hdr;
1067 struct {
1068 __u32 type;
1069 __u16 size;
1070 __u16 reserved;
1071 };
1072 };
1073 struct ib_uverbs_flow_gre_filter val;
1074 struct ib_uverbs_flow_gre_filter mask;
1075};
1076
1077struct ib_uverbs_flow_mpls_filter {
1078
1079
1080
1081
1082
1083
1084 __be32 label;
1085};
1086
1087struct ib_uverbs_flow_spec_mpls {
1088 union {
1089 struct ib_uverbs_flow_spec_hdr hdr;
1090 struct {
1091 __u32 type;
1092 __u16 size;
1093 __u16 reserved;
1094 };
1095 };
1096 struct ib_uverbs_flow_mpls_filter val;
1097 struct ib_uverbs_flow_mpls_filter mask;
1098};
1099
1100struct ib_uverbs_flow_attr {
1101 __u32 type;
1102 __u16 size;
1103 __u16 priority;
1104 __u8 num_of_specs;
1105 __u8 reserved[2];
1106 __u8 port;
1107 __u32 flags;
1108
1109
1110
1111
1112 struct ib_uverbs_flow_spec_hdr flow_specs[0];
1113};
1114
1115struct ib_uverbs_create_flow {
1116 __u32 comp_mask;
1117 __u32 qp_handle;
1118 struct ib_uverbs_flow_attr flow_attr;
1119};
1120
1121struct ib_uverbs_create_flow_resp {
1122 __u32 comp_mask;
1123 __u32 flow_handle;
1124};
1125
1126struct ib_uverbs_destroy_flow {
1127 __u32 comp_mask;
1128 __u32 flow_handle;
1129};
1130
1131struct ib_uverbs_create_srq {
1132 __aligned_u64 response;
1133 __aligned_u64 user_handle;
1134 __u32 pd_handle;
1135 __u32 max_wr;
1136 __u32 max_sge;
1137 __u32 srq_limit;
1138 __aligned_u64 driver_data[0];
1139};
1140
1141struct ib_uverbs_create_xsrq {
1142 __aligned_u64 response;
1143 __aligned_u64 user_handle;
1144 __u32 srq_type;
1145 __u32 pd_handle;
1146 __u32 max_wr;
1147 __u32 max_sge;
1148 __u32 srq_limit;
1149 __u32 max_num_tags;
1150 __u32 xrcd_handle;
1151 __u32 cq_handle;
1152 __aligned_u64 driver_data[0];
1153};
1154
1155struct ib_uverbs_create_srq_resp {
1156 __u32 srq_handle;
1157 __u32 max_wr;
1158 __u32 max_sge;
1159 __u32 srqn;
1160};
1161
1162struct ib_uverbs_modify_srq {
1163 __u32 srq_handle;
1164 __u32 attr_mask;
1165 __u32 max_wr;
1166 __u32 srq_limit;
1167 __aligned_u64 driver_data[0];
1168};
1169
1170struct ib_uverbs_query_srq {
1171 __aligned_u64 response;
1172 __u32 srq_handle;
1173 __u32 reserved;
1174 __aligned_u64 driver_data[0];
1175};
1176
1177struct ib_uverbs_query_srq_resp {
1178 __u32 max_wr;
1179 __u32 max_sge;
1180 __u32 srq_limit;
1181 __u32 reserved;
1182};
1183
1184struct ib_uverbs_destroy_srq {
1185 __aligned_u64 response;
1186 __u32 srq_handle;
1187 __u32 reserved;
1188};
1189
1190struct ib_uverbs_destroy_srq_resp {
1191 __u32 events_reported;
1192};
1193
1194struct ib_uverbs_ex_create_wq {
1195 __u32 comp_mask;
1196 __u32 wq_type;
1197 __aligned_u64 user_handle;
1198 __u32 pd_handle;
1199 __u32 cq_handle;
1200 __u32 max_wr;
1201 __u32 max_sge;
1202 __u32 create_flags;
1203 __u32 reserved;
1204};
1205
1206struct ib_uverbs_ex_create_wq_resp {
1207 __u32 comp_mask;
1208 __u32 response_length;
1209 __u32 wq_handle;
1210 __u32 max_wr;
1211 __u32 max_sge;
1212 __u32 wqn;
1213};
1214
1215struct ib_uverbs_ex_destroy_wq {
1216 __u32 comp_mask;
1217 __u32 wq_handle;
1218};
1219
1220struct ib_uverbs_ex_destroy_wq_resp {
1221 __u32 comp_mask;
1222 __u32 response_length;
1223 __u32 events_reported;
1224 __u32 reserved;
1225};
1226
1227struct ib_uverbs_ex_modify_wq {
1228 __u32 attr_mask;
1229 __u32 wq_handle;
1230 __u32 wq_state;
1231 __u32 curr_wq_state;
1232 __u32 flags;
1233 __u32 flags_mask;
1234};
1235
1236
1237#define IB_USER_VERBS_MAX_LOG_IND_TBL_SIZE 0x0d
1238struct ib_uverbs_ex_create_rwq_ind_table {
1239 __u32 comp_mask;
1240 __u32 log_ind_tbl_size;
1241
1242
1243
1244
1245 __u32 wq_handles[0];
1246};
1247
1248struct ib_uverbs_ex_create_rwq_ind_table_resp {
1249 __u32 comp_mask;
1250 __u32 response_length;
1251 __u32 ind_tbl_handle;
1252 __u32 ind_tbl_num;
1253};
1254
1255struct ib_uverbs_ex_destroy_rwq_ind_table {
1256 __u32 comp_mask;
1257 __u32 ind_tbl_handle;
1258};
1259
1260struct ib_uverbs_cq_moderation {
1261 __u16 cq_count;
1262 __u16 cq_period;
1263};
1264
1265struct ib_uverbs_ex_modify_cq {
1266 __u32 cq_handle;
1267 __u32 attr_mask;
1268 struct ib_uverbs_cq_moderation attr;
1269 __u32 reserved;
1270};
1271
1272#define IB_DEVICE_NAME_MAX 64
1273
1274#endif
1275