OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [rdma/] [ib_user_verbs.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.