Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
  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
 47enum {
 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};
 86
 87/*
 88 * Make sure that all structs defined in this file remain laid out so
 89 * that they pack the same way on 32-bit and 64-bit architectures (to
 90 * avoid incompatibility between 32-bit userspace and 64-bit kernels).
 91 * Specifically:
 92 *  - Do not use pointer types -- pass pointers in __u64 instead.
 93 *  - Make sure that any structure larger than 4 bytes is padded to a
 94 *    multiple of 8 bytes.  Otherwise the structure size will be
 95 *    different between 32-bit and 64-bit architectures.
 96 */
 97
 98struct ib_uverbs_async_event_desc {
 99	__u64 element;
100	__u32 event_type;	/* enum ib_event_type */
101	__u32 reserved;
102};
103
104struct ib_uverbs_comp_event_desc {
105	__u64 cq_handle;
106};
107
108/*
109 * All commands from userspace should start with a __u32 command field
110 * followed by __u16 in_words and out_words fields (which give the
111 * length of the command block and response buffer if any in 32-bit
112 * words).  The kernel driver will read these fields first and read
113 * the rest of the command struct based on these value.
114 */
115
116struct ib_uverbs_cmd_hdr {
117	__u32 command;
118	__u16 in_words;
119	__u16 out_words;
120};
121
122struct ib_uverbs_get_context {
123	__u64 response;
124	__u64 driver_data[0];
125};
126
127struct ib_uverbs_get_context_resp {
128	__u32 async_fd;
129	__u32 num_comp_vectors;
130};
131
132struct ib_uverbs_query_device {
133	__u64 response;
134	__u64 driver_data[0];
135};
136
137struct ib_uverbs_query_device_resp {
138	__u64 fw_ver;
139	__be64 node_guid;
140	__be64 sys_image_guid;
141	__u64 max_mr_size;
142	__u64 page_size_cap;
143	__u32 vendor_id;
144	__u32 vendor_part_id;
145	__u32 hw_ver;
146	__u32 max_qp;
147	__u32 max_qp_wr;
148	__u32 device_cap_flags;
149	__u32 max_sge;
150	__u32 max_sge_rd;
151	__u32 max_cq;
152	__u32 max_cqe;
153	__u32 max_mr;
154	__u32 max_pd;
155	__u32 max_qp_rd_atom;
156	__u32 max_ee_rd_atom;
157	__u32 max_res_rd_atom;
158	__u32 max_qp_init_rd_atom;
159	__u32 max_ee_init_rd_atom;
160	__u32 atomic_cap;
161	__u32 max_ee;
162	__u32 max_rdd;
163	__u32 max_mw;
164	__u32 max_raw_ipv6_qp;
165	__u32 max_raw_ethy_qp;
166	__u32 max_mcast_grp;
167	__u32 max_mcast_qp_attach;
168	__u32 max_total_mcast_qp_attach;
169	__u32 max_ah;
170	__u32 max_fmr;
171	__u32 max_map_per_fmr;
172	__u32 max_srq;
173	__u32 max_srq_wr;
174	__u32 max_srq_sge;
175	__u16 max_pkeys;
176	__u8  local_ca_ack_delay;
177	__u8  phys_port_cnt;
178	__u8  reserved[4];
179};
180
181struct ib_uverbs_query_port {
182	__u64 response;
183	__u8  port_num;
184	__u8  reserved[7];
185	__u64 driver_data[0];
186};
187
188struct ib_uverbs_query_port_resp {
189	__u32 port_cap_flags;
190	__u32 max_msg_sz;
191	__u32 bad_pkey_cntr;
192	__u32 qkey_viol_cntr;
193	__u32 gid_tbl_len;
194	__u16 pkey_tbl_len;
195	__u16 lid;
196	__u16 sm_lid;
197	__u8  state;
198	__u8  max_mtu;
199	__u8  active_mtu;
200	__u8  lmc;
201	__u8  max_vl_num;
202	__u8  sm_sl;
203	__u8  subnet_timeout;
204	__u8  init_type_reply;
205	__u8  active_width;
206	__u8  active_speed;
207	__u8  phys_state;
208	__u8  link_layer;
209	__u8  reserved[2];
210};
211
212struct ib_uverbs_alloc_pd {
213	__u64 response;
214	__u64 driver_data[0];
215};
216
217struct ib_uverbs_alloc_pd_resp {
218	__u32 pd_handle;
219};
220
221struct ib_uverbs_dealloc_pd {
222	__u32 pd_handle;
223};
224
225struct ib_uverbs_reg_mr {
226	__u64 response;
227	__u64 start;
228	__u64 length;
229	__u64 hca_va;
230	__u32 pd_handle;
231	__u32 access_flags;
232	__u64 driver_data[0];
233};
234
235struct ib_uverbs_reg_mr_resp {
236	__u32 mr_handle;
237	__u32 lkey;
238	__u32 rkey;
239};
240
241struct ib_uverbs_dereg_mr {
242	__u32 mr_handle;
243};
244
245struct ib_uverbs_create_comp_channel {
246	__u64 response;
247};
248
249struct ib_uverbs_create_comp_channel_resp {
250	__u32 fd;
251};
252
253struct ib_uverbs_create_cq {
254	__u64 response;
255	__u64 user_handle;
256	__u32 cqe;
257	__u32 comp_vector;
258	__s32 comp_channel;
259	__u32 reserved;
260	__u64 driver_data[0];
261};
262
263struct ib_uverbs_create_cq_resp {
264	__u32 cq_handle;
265	__u32 cqe;
266};
267
268struct ib_uverbs_resize_cq {
269	__u64 response;
270	__u32 cq_handle;
271	__u32 cqe;
272	__u64 driver_data[0];
273};
274
275struct ib_uverbs_resize_cq_resp {
276	__u32 cqe;
277	__u32 reserved;
278	__u64 driver_data[0];
279};
280
281struct ib_uverbs_poll_cq {
282	__u64 response;
283	__u32 cq_handle;
284	__u32 ne;
285};
286
287struct ib_uverbs_wc {
288	__u64 wr_id;
289	__u32 status;
290	__u32 opcode;
291	__u32 vendor_err;
292	__u32 byte_len;
293	union {
294		__u32 imm_data;
295		__u32 invalidate_rkey;
296	} ex;
297	__u32 qp_num;
298	__u32 src_qp;
299	__u32 wc_flags;
300	__u16 pkey_index;
301	__u16 slid;
302	__u8 sl;
303	__u8 dlid_path_bits;
304	__u8 port_num;
305	__u8 reserved;
306};
307
308struct ib_uverbs_poll_cq_resp {
309	__u32 count;
310	__u32 reserved;
311	struct ib_uverbs_wc wc[0];
312};
313
314struct ib_uverbs_req_notify_cq {
315	__u32 cq_handle;
316	__u32 solicited_only;
317};
318
319struct ib_uverbs_destroy_cq {
320	__u64 response;
321	__u32 cq_handle;
322	__u32 reserved;
323};
324
325struct ib_uverbs_destroy_cq_resp {
326	__u32 comp_events_reported;
327	__u32 async_events_reported;
328};
329
330struct ib_uverbs_global_route {
331	__u8  dgid[16];
332	__u32 flow_label;
333	__u8  sgid_index;
334	__u8  hop_limit;
335	__u8  traffic_class;
336	__u8  reserved;
337};
338
339struct ib_uverbs_ah_attr {
340	struct ib_uverbs_global_route grh;
341	__u16 dlid;
342	__u8  sl;
343	__u8  src_path_bits;
344	__u8  static_rate;
345	__u8  is_global;
346	__u8  port_num;
347	__u8  reserved;
348};
349
350struct ib_uverbs_qp_attr {
351	__u32	qp_attr_mask;
352	__u32	qp_state;
353	__u32	cur_qp_state;
354	__u32	path_mtu;
355	__u32	path_mig_state;
356	__u32	qkey;
357	__u32	rq_psn;
358	__u32	sq_psn;
359	__u32	dest_qp_num;
360	__u32	qp_access_flags;
361
362	struct ib_uverbs_ah_attr ah_attr;
363	struct ib_uverbs_ah_attr alt_ah_attr;
364
365	/* ib_qp_cap */
366	__u32	max_send_wr;
367	__u32	max_recv_wr;
368	__u32	max_send_sge;
369	__u32	max_recv_sge;
370	__u32	max_inline_data;
371
372	__u16	pkey_index;
373	__u16	alt_pkey_index;
374	__u8	en_sqd_async_notify;
375	__u8	sq_draining;
376	__u8	max_rd_atomic;
377	__u8	max_dest_rd_atomic;
378	__u8	min_rnr_timer;
379	__u8	port_num;
380	__u8	timeout;
381	__u8	retry_cnt;
382	__u8	rnr_retry;
383	__u8	alt_port_num;
384	__u8	alt_timeout;
385	__u8	reserved[5];
386};
387
388struct ib_uverbs_create_qp {
389	__u64 response;
390	__u64 user_handle;
391	__u32 pd_handle;
392	__u32 send_cq_handle;
393	__u32 recv_cq_handle;
394	__u32 srq_handle;
395	__u32 max_send_wr;
396	__u32 max_recv_wr;
397	__u32 max_send_sge;
398	__u32 max_recv_sge;
399	__u32 max_inline_data;
400	__u8  sq_sig_all;
401	__u8  qp_type;
402	__u8  is_srq;
403	__u8  reserved;
404	__u64 driver_data[0];
405};
406
407struct ib_uverbs_create_qp_resp {
408	__u32 qp_handle;
409	__u32 qpn;
410	__u32 max_send_wr;
411	__u32 max_recv_wr;
412	__u32 max_send_sge;
413	__u32 max_recv_sge;
414	__u32 max_inline_data;
415	__u32 reserved;
416};
417
418/*
419 * This struct needs to remain a multiple of 8 bytes to keep the
420 * alignment of the modify QP parameters.
421 */
422struct ib_uverbs_qp_dest {
423	__u8  dgid[16];
424	__u32 flow_label;
425	__u16 dlid;
426	__u16 reserved;
427	__u8  sgid_index;
428	__u8  hop_limit;
429	__u8  traffic_class;
430	__u8  sl;
431	__u8  src_path_bits;
432	__u8  static_rate;
433	__u8  is_global;
434	__u8  port_num;
435};
436
437struct ib_uverbs_query_qp {
438	__u64 response;
439	__u32 qp_handle;
440	__u32 attr_mask;
441	__u64 driver_data[0];
442};
443
444struct ib_uverbs_query_qp_resp {
445	struct ib_uverbs_qp_dest dest;
446	struct ib_uverbs_qp_dest alt_dest;
447	__u32 max_send_wr;
448	__u32 max_recv_wr;
449	__u32 max_send_sge;
450	__u32 max_recv_sge;
451	__u32 max_inline_data;
452	__u32 qkey;
453	__u32 rq_psn;
454	__u32 sq_psn;
455	__u32 dest_qp_num;
456	__u32 qp_access_flags;
457	__u16 pkey_index;
458	__u16 alt_pkey_index;
459	__u8  qp_state;
460	__u8  cur_qp_state;
461	__u8  path_mtu;
462	__u8  path_mig_state;
463	__u8  sq_draining;
464	__u8  max_rd_atomic;
465	__u8  max_dest_rd_atomic;
466	__u8  min_rnr_timer;
467	__u8  port_num;
468	__u8  timeout;
469	__u8  retry_cnt;
470	__u8  rnr_retry;
471	__u8  alt_port_num;
472	__u8  alt_timeout;
473	__u8  sq_sig_all;
474	__u8  reserved[5];
475	__u64 driver_data[0];
476};
477
478struct ib_uverbs_modify_qp {
479	struct ib_uverbs_qp_dest dest;
480	struct ib_uverbs_qp_dest alt_dest;
481	__u32 qp_handle;
482	__u32 attr_mask;
483	__u32 qkey;
484	__u32 rq_psn;
485	__u32 sq_psn;
486	__u32 dest_qp_num;
487	__u32 qp_access_flags;
488	__u16 pkey_index;
489	__u16 alt_pkey_index;
490	__u8  qp_state;
491	__u8  cur_qp_state;
492	__u8  path_mtu;
493	__u8  path_mig_state;
494	__u8  en_sqd_async_notify;
495	__u8  max_rd_atomic;
496	__u8  max_dest_rd_atomic;
497	__u8  min_rnr_timer;
498	__u8  port_num;
499	__u8  timeout;
500	__u8  retry_cnt;
501	__u8  rnr_retry;
502	__u8  alt_port_num;
503	__u8  alt_timeout;
504	__u8  reserved[2];
505	__u64 driver_data[0];
506};
507
508struct ib_uverbs_modify_qp_resp {
509};
510
511struct ib_uverbs_destroy_qp {
512	__u64 response;
513	__u32 qp_handle;
514	__u32 reserved;
515};
516
517struct ib_uverbs_destroy_qp_resp {
518	__u32 events_reported;
519};
520
521/*
522 * The ib_uverbs_sge structure isn't used anywhere, since we assume
523 * the ib_sge structure is packed the same way on 32-bit and 64-bit
524 * architectures in both kernel and user space.  It's just here to
525 * document the ABI.
526 */
527struct ib_uverbs_sge {
528	__u64 addr;
529	__u32 length;
530	__u32 lkey;
531};
532
533struct ib_uverbs_send_wr {
534	__u64 wr_id;
535	__u32 num_sge;
536	__u32 opcode;
537	__u32 send_flags;
538	union {
539		__u32 imm_data;
540		__u32 invalidate_rkey;
541	} ex;
542	union {
543		struct {
544			__u64 remote_addr;
545			__u32 rkey;
546			__u32 reserved;
547		} rdma;
548		struct {
549			__u64 remote_addr;
550			__u64 compare_add;
551			__u64 swap;
552			__u32 rkey;
553			__u32 reserved;
554		} atomic;
555		struct {
556			__u32 ah;
557			__u32 remote_qpn;
558			__u32 remote_qkey;
559			__u32 reserved;
560		} ud;
561	} wr;
562};
563
564struct ib_uverbs_post_send {
565	__u64 response;
566	__u32 qp_handle;
567	__u32 wr_count;
568	__u32 sge_count;
569	__u32 wqe_size;
570	struct ib_uverbs_send_wr send_wr[0];
571};
572
573struct ib_uverbs_post_send_resp {
574	__u32 bad_wr;
575};
576
577struct ib_uverbs_recv_wr {
578	__u64 wr_id;
579	__u32 num_sge;
580	__u32 reserved;
581};
582
583struct ib_uverbs_post_recv {
584	__u64 response;
585	__u32 qp_handle;
586	__u32 wr_count;
587	__u32 sge_count;
588	__u32 wqe_size;
589	struct ib_uverbs_recv_wr recv_wr[0];
590};
591
592struct ib_uverbs_post_recv_resp {
593	__u32 bad_wr;
594};
595
596struct ib_uverbs_post_srq_recv {
597	__u64 response;
598	__u32 srq_handle;
599	__u32 wr_count;
600	__u32 sge_count;
601	__u32 wqe_size;
602	struct ib_uverbs_recv_wr recv[0];
603};
604
605struct ib_uverbs_post_srq_recv_resp {
606	__u32 bad_wr;
607};
608
609struct ib_uverbs_create_ah {
610	__u64 response;
611	__u64 user_handle;
612	__u32 pd_handle;
613	__u32 reserved;
614	struct ib_uverbs_ah_attr attr;
615};
616
617struct ib_uverbs_create_ah_resp {
618	__u32 ah_handle;
619};
620
621struct ib_uverbs_destroy_ah {
622	__u32 ah_handle;
623};
624
625struct ib_uverbs_attach_mcast {
626	__u8  gid[16];
627	__u32 qp_handle;
628	__u16 mlid;
629	__u16 reserved;
630	__u64 driver_data[0];
631};
632
633struct ib_uverbs_detach_mcast {
634	__u8  gid[16];
635	__u32 qp_handle;
636	__u16 mlid;
637	__u16 reserved;
638	__u64 driver_data[0];
639};
640
641struct ib_uverbs_create_srq {
642	__u64 response;
643	__u64 user_handle;
644	__u32 pd_handle;
645	__u32 max_wr;
646	__u32 max_sge;
647	__u32 srq_limit;
648	__u64 driver_data[0];
649};
650
651struct ib_uverbs_create_srq_resp {
652	__u32 srq_handle;
653	__u32 max_wr;
654	__u32 max_sge;
655	__u32 reserved;
656};
657
658struct ib_uverbs_modify_srq {
659	__u32 srq_handle;
660	__u32 attr_mask;
661	__u32 max_wr;
662	__u32 srq_limit;
663	__u64 driver_data[0];
664};
665
666struct ib_uverbs_query_srq {
667	__u64 response;
668	__u32 srq_handle;
669	__u32 reserved;
670	__u64 driver_data[0];
671};
672
673struct ib_uverbs_query_srq_resp {
674	__u32 max_wr;
675	__u32 max_sge;
676	__u32 srq_limit;
677	__u32 reserved;
678};
679
680struct ib_uverbs_destroy_srq {
681	__u64 response;
682	__u32 srq_handle;
683	__u32 reserved;
684};
685
686struct ib_uverbs_destroy_srq_resp {
687	__u32 events_reported;
688};
689
690#endif /* IB_USER_VERBS_H */