root/include/uapi/rdma/ib_user_verbs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
   2 /*
   3  * Copyright (c) 2005 Topspin Communications.  All rights reserved.
   4  * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
   5  * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
   6  * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
   7  *
   8  * This software is available to you under a choice of one of two
   9  * licenses.  You may choose to be licensed under the terms of the GNU
  10  * General Public License (GPL) Version 2, available from the file
  11  * COPYING in the main directory of this source tree, or the
  12  * OpenIB.org BSD license below:
  13  *
  14  *     Redistribution and use in source and binary forms, with or
  15  *     without modification, are permitted provided that the following
  16  *     conditions are met:
  17  *
  18  *      - Redistributions of source code must retain the above
  19  *        copyright notice, this list of conditions and the following
  20  *        disclaimer.
  21  *
  22  *      - Redistributions in binary form must reproduce the above
  23  *        copyright notice, this list of conditions and the following
  24  *        disclaimer in the documentation and/or other materials
  25  *        provided with the distribution.
  26  *
  27  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  28  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  29  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  30  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  31  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  32  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  33  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  34  * SOFTWARE.
  35  */
  36 
  37 #ifndef IB_USER_VERBS_H
  38 #define IB_USER_VERBS_H
  39 
  40 #include <linux/types.h>
  41 
  42 /*
  43  * Increment this value if any changes that break userspace ABI
  44  * compatibility are made.
  45  */
  46 #define IB_USER_VERBS_ABI_VERSION       6
  47 #define IB_USER_VERBS_CMD_THRESHOLD    50
  48 
  49 enum ib_uverbs_write_cmds {
  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 
  93 enum {
  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  * Make sure that all structs defined in this file remain laid out so
 110  * that they pack the same way on 32-bit and 64-bit architectures (to
 111  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
 112  * Specifically:
 113  *  - Do not use pointer types -- pass pointers in __u64 instead.
 114  *  - Make sure that any structure larger than 4 bytes is padded to a
 115  *    multiple of 8 bytes.  Otherwise the structure size will be
 116  *    different between 32-bit and 64-bit architectures.
 117  */
 118 
 119 struct ib_uverbs_async_event_desc {
 120         __aligned_u64 element;
 121         __u32 event_type;       /* enum ib_event_type */
 122         __u32 reserved;
 123 };
 124 
 125 struct ib_uverbs_comp_event_desc {
 126         __aligned_u64 cq_handle;
 127 };
 128 
 129 struct ib_uverbs_cq_moderation_caps {
 130         __u16     max_cq_moderation_count;
 131         __u16     max_cq_moderation_period;
 132         __u32     reserved;
 133 };
 134 
 135 /*
 136  * All commands from userspace should start with a __u32 command field
 137  * followed by __u16 in_words and out_words fields (which give the
 138  * length of the command block and response buffer if any in 32-bit
 139  * words).  The kernel driver will read these fields first and read
 140  * the rest of the command struct based on these value.
 141  */
 142 
 143 #define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
 144 #define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u
 145 
 146 struct ib_uverbs_cmd_hdr {
 147         __u32 command;
 148         __u16 in_words;
 149         __u16 out_words;
 150 };
 151 
 152 struct 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 
 159 struct ib_uverbs_get_context {
 160         __aligned_u64 response;
 161         __aligned_u64 driver_data[0];
 162 };
 163 
 164 struct ib_uverbs_get_context_resp {
 165         __u32 async_fd;
 166         __u32 num_comp_vectors;
 167         __aligned_u64 driver_data[0];
 168 };
 169 
 170 struct ib_uverbs_query_device {
 171         __aligned_u64 response;
 172         __aligned_u64 driver_data[0];
 173 };
 174 
 175 struct ib_uverbs_query_device_resp {
 176         __aligned_u64 fw_ver;
 177         __be64 node_guid;
 178         __be64 sys_image_guid;
 179         __aligned_u64 max_mr_size;
 180         __aligned_u64 page_size_cap;
 181         __u32 vendor_id;
 182         __u32 vendor_part_id;
 183         __u32 hw_ver;
 184         __u32 max_qp;
 185         __u32 max_qp_wr;
 186         __u32 device_cap_flags;
 187         __u32 max_sge;
 188         __u32 max_sge_rd;
 189         __u32 max_cq;
 190         __u32 max_cqe;
 191         __u32 max_mr;
 192         __u32 max_pd;
 193         __u32 max_qp_rd_atom;
 194         __u32 max_ee_rd_atom;
 195         __u32 max_res_rd_atom;
 196         __u32 max_qp_init_rd_atom;
 197         __u32 max_ee_init_rd_atom;
 198         __u32 atomic_cap;
 199         __u32 max_ee;
 200         __u32 max_rdd;
 201         __u32 max_mw;
 202         __u32 max_raw_ipv6_qp;
 203         __u32 max_raw_ethy_qp;
 204         __u32 max_mcast_grp;
 205         __u32 max_mcast_qp_attach;
 206         __u32 max_total_mcast_qp_attach;
 207         __u32 max_ah;
 208         __u32 max_fmr;
 209         __u32 max_map_per_fmr;
 210         __u32 max_srq;
 211         __u32 max_srq_wr;
 212         __u32 max_srq_sge;
 213         __u16 max_pkeys;
 214         __u8  local_ca_ack_delay;
 215         __u8  phys_port_cnt;
 216         __u8  reserved[4];
 217 };
 218 
 219 struct ib_uverbs_ex_query_device {
 220         __u32 comp_mask;
 221         __u32 reserved;
 222 };
 223 
 224 struct ib_uverbs_odp_caps {
 225         __aligned_u64 general_caps;
 226         struct {
 227                 __u32 rc_odp_caps;
 228                 __u32 uc_odp_caps;
 229                 __u32 ud_odp_caps;
 230         } per_transport_caps;
 231         __u32 reserved;
 232 };
 233 
 234 struct ib_uverbs_rss_caps {
 235         /* Corresponding bit will be set if qp type from
 236          * 'enum ib_qp_type' is supported, e.g.
 237          * supported_qpts |= 1 << IB_QPT_UD
 238          */
 239         __u32 supported_qpts;
 240         __u32 max_rwq_indirection_tables;
 241         __u32 max_rwq_indirection_table_size;
 242         __u32 reserved;
 243 };
 244 
 245 struct ib_uverbs_tm_caps {
 246         /* Max size of rendezvous request message */
 247         __u32 max_rndv_hdr_size;
 248         /* Max number of entries in tag matching list */
 249         __u32 max_num_tags;
 250         /* TM flags */
 251         __u32 flags;
 252         /* Max number of outstanding list operations */
 253         __u32 max_ops;
 254         /* Max number of SGE in tag matching entry */
 255         __u32 max_sge;
 256         __u32 reserved;
 257 };
 258 
 259 struct ib_uverbs_ex_query_device_resp {
 260         struct ib_uverbs_query_device_resp base;
 261         __u32 comp_mask;
 262         __u32 response_length;
 263         struct ib_uverbs_odp_caps odp_caps;
 264         __aligned_u64 timestamp_mask;
 265         __aligned_u64 hca_core_clock; /* in KHZ */
 266         __aligned_u64 device_cap_flags_ex;
 267         struct ib_uverbs_rss_caps rss_caps;
 268         __u32  max_wq_type_rq;
 269         __u32 raw_packet_caps;
 270         struct ib_uverbs_tm_caps tm_caps;
 271         struct ib_uverbs_cq_moderation_caps cq_moderation_caps;
 272         __aligned_u64 max_dm_size;
 273         __u32 xrc_odp_caps;
 274         __u32 reserved;
 275 };
 276 
 277 struct ib_uverbs_query_port {
 278         __aligned_u64 response;
 279         __u8  port_num;
 280         __u8  reserved[7];
 281         __aligned_u64 driver_data[0];
 282 };
 283 
 284 struct ib_uverbs_query_port_resp {
 285         __u32 port_cap_flags;           /* see ib_uverbs_query_port_cap_flags */
 286         __u32 max_msg_sz;
 287         __u32 bad_pkey_cntr;
 288         __u32 qkey_viol_cntr;
 289         __u32 gid_tbl_len;
 290         __u16 pkey_tbl_len;
 291         __u16 lid;
 292         __u16 sm_lid;
 293         __u8  state;
 294         __u8  max_mtu;
 295         __u8  active_mtu;
 296         __u8  lmc;
 297         __u8  max_vl_num;
 298         __u8  sm_sl;
 299         __u8  subnet_timeout;
 300         __u8  init_type_reply;
 301         __u8  active_width;
 302         __u8  active_speed;
 303         __u8  phys_state;
 304         __u8  link_layer;
 305         __u8  flags;                    /* see ib_uverbs_query_port_flags */
 306         __u8  reserved;
 307 };
 308 
 309 struct ib_uverbs_alloc_pd {
 310         __aligned_u64 response;
 311         __aligned_u64 driver_data[0];
 312 };
 313 
 314 struct ib_uverbs_alloc_pd_resp {
 315         __u32 pd_handle;
 316         __u32 driver_data[0];
 317 };
 318 
 319 struct ib_uverbs_dealloc_pd {
 320         __u32 pd_handle;
 321 };
 322 
 323 struct ib_uverbs_open_xrcd {
 324         __aligned_u64 response;
 325         __u32 fd;
 326         __u32 oflags;
 327         __aligned_u64 driver_data[0];
 328 };
 329 
 330 struct ib_uverbs_open_xrcd_resp {
 331         __u32 xrcd_handle;
 332         __u32 driver_data[0];
 333 };
 334 
 335 struct ib_uverbs_close_xrcd {
 336         __u32 xrcd_handle;
 337 };
 338 
 339 struct ib_uverbs_reg_mr {
 340         __aligned_u64 response;
 341         __aligned_u64 start;
 342         __aligned_u64 length;
 343         __aligned_u64 hca_va;
 344         __u32 pd_handle;
 345         __u32 access_flags;
 346         __aligned_u64 driver_data[0];
 347 };
 348 
 349 struct ib_uverbs_reg_mr_resp {
 350         __u32 mr_handle;
 351         __u32 lkey;
 352         __u32 rkey;
 353         __u32 driver_data[0];
 354 };
 355 
 356 struct ib_uverbs_rereg_mr {
 357         __aligned_u64 response;
 358         __u32 mr_handle;
 359         __u32 flags;
 360         __aligned_u64 start;
 361         __aligned_u64 length;
 362         __aligned_u64 hca_va;
 363         __u32 pd_handle;
 364         __u32 access_flags;
 365         __aligned_u64 driver_data[0];
 366 };
 367 
 368 struct ib_uverbs_rereg_mr_resp {
 369         __u32 lkey;
 370         __u32 rkey;
 371         __aligned_u64 driver_data[0];
 372 };
 373 
 374 struct ib_uverbs_dereg_mr {
 375         __u32 mr_handle;
 376 };
 377 
 378 struct ib_uverbs_alloc_mw {
 379         __aligned_u64 response;
 380         __u32 pd_handle;
 381         __u8  mw_type;
 382         __u8  reserved[3];
 383         __aligned_u64 driver_data[0];
 384 };
 385 
 386 struct ib_uverbs_alloc_mw_resp {
 387         __u32 mw_handle;
 388         __u32 rkey;
 389         __aligned_u64 driver_data[0];
 390 };
 391 
 392 struct ib_uverbs_dealloc_mw {
 393         __u32 mw_handle;
 394 };
 395 
 396 struct ib_uverbs_create_comp_channel {
 397         __aligned_u64 response;
 398 };
 399 
 400 struct ib_uverbs_create_comp_channel_resp {
 401         __u32 fd;
 402 };
 403 
 404 struct ib_uverbs_create_cq {
 405         __aligned_u64 response;
 406         __aligned_u64 user_handle;
 407         __u32 cqe;
 408         __u32 comp_vector;
 409         __s32 comp_channel;
 410         __u32 reserved;
 411         __aligned_u64 driver_data[0];
 412 };
 413 
 414 enum ib_uverbs_ex_create_cq_flags {
 415         IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,
 416         IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,
 417 };
 418 
 419 struct ib_uverbs_ex_create_cq {
 420         __aligned_u64 user_handle;
 421         __u32 cqe;
 422         __u32 comp_vector;
 423         __s32 comp_channel;
 424         __u32 comp_mask;
 425         __u32 flags;  /* bitmask of ib_uverbs_ex_create_cq_flags */
 426         __u32 reserved;
 427 };
 428 
 429 struct ib_uverbs_create_cq_resp {
 430         __u32 cq_handle;
 431         __u32 cqe;
 432         __aligned_u64 driver_data[0];
 433 };
 434 
 435 struct ib_uverbs_ex_create_cq_resp {
 436         struct ib_uverbs_create_cq_resp base;
 437         __u32 comp_mask;
 438         __u32 response_length;
 439 };
 440 
 441 struct ib_uverbs_resize_cq {
 442         __aligned_u64 response;
 443         __u32 cq_handle;
 444         __u32 cqe;
 445         __aligned_u64 driver_data[0];
 446 };
 447 
 448 struct ib_uverbs_resize_cq_resp {
 449         __u32 cqe;
 450         __u32 reserved;
 451         __aligned_u64 driver_data[0];
 452 };
 453 
 454 struct ib_uverbs_poll_cq {
 455         __aligned_u64 response;
 456         __u32 cq_handle;
 457         __u32 ne;
 458 };
 459 
 460 struct ib_uverbs_wc {
 461         __aligned_u64 wr_id;
 462         __u32 status;
 463         __u32 opcode;
 464         __u32 vendor_err;
 465         __u32 byte_len;
 466         union {
 467                 __be32 imm_data;
 468                 __u32 invalidate_rkey;
 469         } ex;
 470         __u32 qp_num;
 471         __u32 src_qp;
 472         __u32 wc_flags;
 473         __u16 pkey_index;
 474         __u16 slid;
 475         __u8 sl;
 476         __u8 dlid_path_bits;
 477         __u8 port_num;
 478         __u8 reserved;
 479 };
 480 
 481 struct ib_uverbs_poll_cq_resp {
 482         __u32 count;
 483         __u32 reserved;
 484         struct ib_uverbs_wc wc[0];
 485 };
 486 
 487 struct ib_uverbs_req_notify_cq {
 488         __u32 cq_handle;
 489         __u32 solicited_only;
 490 };
 491 
 492 struct ib_uverbs_destroy_cq {
 493         __aligned_u64 response;
 494         __u32 cq_handle;
 495         __u32 reserved;
 496 };
 497 
 498 struct ib_uverbs_destroy_cq_resp {
 499         __u32 comp_events_reported;
 500         __u32 async_events_reported;
 501 };
 502 
 503 struct ib_uverbs_global_route {
 504         __u8  dgid[16];
 505         __u32 flow_label;
 506         __u8  sgid_index;
 507         __u8  hop_limit;
 508         __u8  traffic_class;
 509         __u8  reserved;
 510 };
 511 
 512 struct ib_uverbs_ah_attr {
 513         struct ib_uverbs_global_route grh;
 514         __u16 dlid;
 515         __u8  sl;
 516         __u8  src_path_bits;
 517         __u8  static_rate;
 518         __u8  is_global;
 519         __u8  port_num;
 520         __u8  reserved;
 521 };
 522 
 523 struct ib_uverbs_qp_attr {
 524         __u32   qp_attr_mask;
 525         __u32   qp_state;
 526         __u32   cur_qp_state;
 527         __u32   path_mtu;
 528         __u32   path_mig_state;
 529         __u32   qkey;
 530         __u32   rq_psn;
 531         __u32   sq_psn;
 532         __u32   dest_qp_num;
 533         __u32   qp_access_flags;
 534 
 535         struct ib_uverbs_ah_attr ah_attr;
 536         struct ib_uverbs_ah_attr alt_ah_attr;
 537 
 538         /* ib_qp_cap */
 539         __u32   max_send_wr;
 540         __u32   max_recv_wr;
 541         __u32   max_send_sge;
 542         __u32   max_recv_sge;
 543         __u32   max_inline_data;
 544 
 545         __u16   pkey_index;
 546         __u16   alt_pkey_index;
 547         __u8    en_sqd_async_notify;
 548         __u8    sq_draining;
 549         __u8    max_rd_atomic;
 550         __u8    max_dest_rd_atomic;
 551         __u8    min_rnr_timer;
 552         __u8    port_num;
 553         __u8    timeout;
 554         __u8    retry_cnt;
 555         __u8    rnr_retry;
 556         __u8    alt_port_num;
 557         __u8    alt_timeout;
 558         __u8    reserved[5];
 559 };
 560 
 561 struct ib_uverbs_create_qp {
 562         __aligned_u64 response;
 563         __aligned_u64 user_handle;
 564         __u32 pd_handle;
 565         __u32 send_cq_handle;
 566         __u32 recv_cq_handle;
 567         __u32 srq_handle;
 568         __u32 max_send_wr;
 569         __u32 max_recv_wr;
 570         __u32 max_send_sge;
 571         __u32 max_recv_sge;
 572         __u32 max_inline_data;
 573         __u8  sq_sig_all;
 574         __u8  qp_type;
 575         __u8  is_srq;
 576         __u8  reserved;
 577         __aligned_u64 driver_data[0];
 578 };
 579 
 580 enum ib_uverbs_create_qp_mask {
 581         IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1UL << 0,
 582 };
 583 
 584 enum {
 585         IB_UVERBS_CREATE_QP_SUP_COMP_MASK = IB_UVERBS_CREATE_QP_MASK_IND_TABLE,
 586 };
 587 
 588 enum {
 589         /*
 590          * This value is equal to IB_QP_DEST_QPN.
 591          */
 592         IB_USER_LEGACY_LAST_QP_ATTR_MASK = 1ULL << 20,
 593 };
 594 
 595 enum {
 596         /*
 597          * This value is equal to IB_QP_RATE_LIMIT.
 598          */
 599         IB_USER_LAST_QP_ATTR_MASK = 1ULL << 25,
 600 };
 601 
 602 struct ib_uverbs_ex_create_qp {
 603         __aligned_u64 user_handle;
 604         __u32 pd_handle;
 605         __u32 send_cq_handle;
 606         __u32 recv_cq_handle;
 607         __u32 srq_handle;
 608         __u32 max_send_wr;
 609         __u32 max_recv_wr;
 610         __u32 max_send_sge;
 611         __u32 max_recv_sge;
 612         __u32 max_inline_data;
 613         __u8  sq_sig_all;
 614         __u8  qp_type;
 615         __u8  is_srq;
 616         __u8 reserved;
 617         __u32 comp_mask;
 618         __u32 create_flags;
 619         __u32 rwq_ind_tbl_handle;
 620         __u32  source_qpn;
 621 };
 622 
 623 struct ib_uverbs_open_qp {
 624         __aligned_u64 response;
 625         __aligned_u64 user_handle;
 626         __u32 pd_handle;
 627         __u32 qpn;
 628         __u8  qp_type;
 629         __u8  reserved[7];
 630         __aligned_u64 driver_data[0];
 631 };
 632 
 633 /* also used for open response */
 634 struct ib_uverbs_create_qp_resp {
 635         __u32 qp_handle;
 636         __u32 qpn;
 637         __u32 max_send_wr;
 638         __u32 max_recv_wr;
 639         __u32 max_send_sge;
 640         __u32 max_recv_sge;
 641         __u32 max_inline_data;
 642         __u32 reserved;
 643         __u32 driver_data[0];
 644 };
 645 
 646 struct ib_uverbs_ex_create_qp_resp {
 647         struct ib_uverbs_create_qp_resp base;
 648         __u32 comp_mask;
 649         __u32 response_length;
 650 };
 651 
 652 /*
 653  * This struct needs to remain a multiple of 8 bytes to keep the
 654  * alignment of the modify QP parameters.
 655  */
 656 struct ib_uverbs_qp_dest {
 657         __u8  dgid[16];
 658         __u32 flow_label;
 659         __u16 dlid;
 660         __u16 reserved;
 661         __u8  sgid_index;
 662         __u8  hop_limit;
 663         __u8  traffic_class;
 664         __u8  sl;
 665         __u8  src_path_bits;
 666         __u8  static_rate;
 667         __u8  is_global;
 668         __u8  port_num;
 669 };
 670 
 671 struct ib_uverbs_query_qp {
 672         __aligned_u64 response;
 673         __u32 qp_handle;
 674         __u32 attr_mask;
 675         __aligned_u64 driver_data[0];
 676 };
 677 
 678 struct ib_uverbs_query_qp_resp {
 679         struct ib_uverbs_qp_dest dest;
 680         struct ib_uverbs_qp_dest alt_dest;
 681         __u32 max_send_wr;
 682         __u32 max_recv_wr;
 683         __u32 max_send_sge;
 684         __u32 max_recv_sge;
 685         __u32 max_inline_data;
 686         __u32 qkey;
 687         __u32 rq_psn;
 688         __u32 sq_psn;
 689         __u32 dest_qp_num;
 690         __u32 qp_access_flags;
 691         __u16 pkey_index;
 692         __u16 alt_pkey_index;
 693         __u8  qp_state;
 694         __u8  cur_qp_state;
 695         __u8  path_mtu;
 696         __u8  path_mig_state;
 697         __u8  sq_draining;
 698         __u8  max_rd_atomic;
 699         __u8  max_dest_rd_atomic;
 700         __u8  min_rnr_timer;
 701         __u8  port_num;
 702         __u8  timeout;
 703         __u8  retry_cnt;
 704         __u8  rnr_retry;
 705         __u8  alt_port_num;
 706         __u8  alt_timeout;
 707         __u8  sq_sig_all;
 708         __u8  reserved[5];
 709         __aligned_u64 driver_data[0];
 710 };
 711 
 712 struct ib_uverbs_modify_qp {
 713         struct ib_uverbs_qp_dest dest;
 714         struct ib_uverbs_qp_dest alt_dest;
 715         __u32 qp_handle;
 716         __u32 attr_mask;
 717         __u32 qkey;
 718         __u32 rq_psn;
 719         __u32 sq_psn;
 720         __u32 dest_qp_num;
 721         __u32 qp_access_flags;
 722         __u16 pkey_index;
 723         __u16 alt_pkey_index;
 724         __u8  qp_state;
 725         __u8  cur_qp_state;
 726         __u8  path_mtu;
 727         __u8  path_mig_state;
 728         __u8  en_sqd_async_notify;
 729         __u8  max_rd_atomic;
 730         __u8  max_dest_rd_atomic;
 731         __u8  min_rnr_timer;
 732         __u8  port_num;
 733         __u8  timeout;
 734         __u8  retry_cnt;
 735         __u8  rnr_retry;
 736         __u8  alt_port_num;
 737         __u8  alt_timeout;
 738         __u8  reserved[2];
 739         __aligned_u64 driver_data[0];
 740 };
 741 
 742 struct ib_uverbs_ex_modify_qp {
 743         struct ib_uverbs_modify_qp base;
 744         __u32   rate_limit;
 745         __u32   reserved;
 746 };
 747 
 748 struct ib_uverbs_ex_modify_qp_resp {
 749         __u32  comp_mask;
 750         __u32  response_length;
 751 };
 752 
 753 struct ib_uverbs_destroy_qp {
 754         __aligned_u64 response;
 755         __u32 qp_handle;
 756         __u32 reserved;
 757 };
 758 
 759 struct ib_uverbs_destroy_qp_resp {
 760         __u32 events_reported;
 761 };
 762 
 763 /*
 764  * The ib_uverbs_sge structure isn't used anywhere, since we assume
 765  * the ib_sge structure is packed the same way on 32-bit and 64-bit
 766  * architectures in both kernel and user space.  It's just here to
 767  * document the ABI.
 768  */
 769 struct ib_uverbs_sge {
 770         __aligned_u64 addr;
 771         __u32 length;
 772         __u32 lkey;
 773 };
 774 
 775 enum ib_uverbs_wr_opcode {
 776         IB_UVERBS_WR_RDMA_WRITE = 0,
 777         IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
 778         IB_UVERBS_WR_SEND = 2,
 779         IB_UVERBS_WR_SEND_WITH_IMM = 3,
 780         IB_UVERBS_WR_RDMA_READ = 4,
 781         IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
 782         IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
 783         IB_UVERBS_WR_LOCAL_INV = 7,
 784         IB_UVERBS_WR_BIND_MW = 8,
 785         IB_UVERBS_WR_SEND_WITH_INV = 9,
 786         IB_UVERBS_WR_TSO = 10,
 787         IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
 788         IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
 789         IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
 790         /* Review enum ib_wr_opcode before modifying this */
 791 };
 792 
 793 struct ib_uverbs_send_wr {
 794         __aligned_u64 wr_id;
 795         __u32 num_sge;
 796         __u32 opcode;           /* see enum ib_uverbs_wr_opcode */
 797         __u32 send_flags;
 798         union {
 799                 __be32 imm_data;
 800                 __u32 invalidate_rkey;
 801         } ex;
 802         union {
 803                 struct {
 804                         __aligned_u64 remote_addr;
 805                         __u32 rkey;
 806                         __u32 reserved;
 807                 } rdma;
 808                 struct {
 809                         __aligned_u64 remote_addr;
 810                         __aligned_u64 compare_add;
 811                         __aligned_u64 swap;
 812                         __u32 rkey;
 813                         __u32 reserved;
 814                 } atomic;
 815                 struct {
 816                         __u32 ah;
 817                         __u32 remote_qpn;
 818                         __u32 remote_qkey;
 819                         __u32 reserved;
 820                 } ud;
 821         } wr;
 822 };
 823 
 824 struct ib_uverbs_post_send {
 825         __aligned_u64 response;
 826         __u32 qp_handle;
 827         __u32 wr_count;
 828         __u32 sge_count;
 829         __u32 wqe_size;
 830         struct ib_uverbs_send_wr send_wr[0];
 831 };
 832 
 833 struct ib_uverbs_post_send_resp {
 834         __u32 bad_wr;
 835 };
 836 
 837 struct ib_uverbs_recv_wr {
 838         __aligned_u64 wr_id;
 839         __u32 num_sge;
 840         __u32 reserved;
 841 };
 842 
 843 struct ib_uverbs_post_recv {
 844         __aligned_u64 response;
 845         __u32 qp_handle;
 846         __u32 wr_count;
 847         __u32 sge_count;
 848         __u32 wqe_size;
 849         struct ib_uverbs_recv_wr recv_wr[0];
 850 };
 851 
 852 struct ib_uverbs_post_recv_resp {
 853         __u32 bad_wr;
 854 };
 855 
 856 struct ib_uverbs_post_srq_recv {
 857         __aligned_u64 response;
 858         __u32 srq_handle;
 859         __u32 wr_count;
 860         __u32 sge_count;
 861         __u32 wqe_size;
 862         struct ib_uverbs_recv_wr recv[0];
 863 };
 864 
 865 struct ib_uverbs_post_srq_recv_resp {
 866         __u32 bad_wr;
 867 };
 868 
 869 struct ib_uverbs_create_ah {
 870         __aligned_u64 response;
 871         __aligned_u64 user_handle;
 872         __u32 pd_handle;
 873         __u32 reserved;
 874         struct ib_uverbs_ah_attr attr;
 875         __aligned_u64 driver_data[0];
 876 };
 877 
 878 struct ib_uverbs_create_ah_resp {
 879         __u32 ah_handle;
 880         __u32 driver_data[0];
 881 };
 882 
 883 struct ib_uverbs_destroy_ah {
 884         __u32 ah_handle;
 885 };
 886 
 887 struct ib_uverbs_attach_mcast {
 888         __u8  gid[16];
 889         __u32 qp_handle;
 890         __u16 mlid;
 891         __u16 reserved;
 892         __aligned_u64 driver_data[0];
 893 };
 894 
 895 struct ib_uverbs_detach_mcast {
 896         __u8  gid[16];
 897         __u32 qp_handle;
 898         __u16 mlid;
 899         __u16 reserved;
 900         __aligned_u64 driver_data[0];
 901 };
 902 
 903 struct ib_uverbs_flow_spec_hdr {
 904         __u32 type;
 905         __u16 size;
 906         __u16 reserved;
 907         /* followed by flow_spec */
 908         __aligned_u64 flow_spec_data[0];
 909 };
 910 
 911 struct ib_uverbs_flow_eth_filter {
 912         __u8  dst_mac[6];
 913         __u8  src_mac[6];
 914         __be16 ether_type;
 915         __be16 vlan_tag;
 916 };
 917 
 918 struct ib_uverbs_flow_spec_eth {
 919         union {
 920                 struct ib_uverbs_flow_spec_hdr hdr;
 921                 struct {
 922                         __u32 type;
 923                         __u16 size;
 924                         __u16 reserved;
 925                 };
 926         };
 927         struct ib_uverbs_flow_eth_filter val;
 928         struct ib_uverbs_flow_eth_filter mask;
 929 };
 930 
 931 struct ib_uverbs_flow_ipv4_filter {
 932         __be32 src_ip;
 933         __be32 dst_ip;
 934         __u8    proto;
 935         __u8    tos;
 936         __u8    ttl;
 937         __u8    flags;
 938 };
 939 
 940 struct ib_uverbs_flow_spec_ipv4 {
 941         union {
 942                 struct ib_uverbs_flow_spec_hdr hdr;
 943                 struct {
 944                         __u32 type;
 945                         __u16 size;
 946                         __u16 reserved;
 947                 };
 948         };
 949         struct ib_uverbs_flow_ipv4_filter val;
 950         struct ib_uverbs_flow_ipv4_filter mask;
 951 };
 952 
 953 struct ib_uverbs_flow_tcp_udp_filter {
 954         __be16 dst_port;
 955         __be16 src_port;
 956 };
 957 
 958 struct ib_uverbs_flow_spec_tcp_udp {
 959         union {
 960                 struct ib_uverbs_flow_spec_hdr hdr;
 961                 struct {
 962                         __u32 type;
 963                         __u16 size;
 964                         __u16 reserved;
 965                 };
 966         };
 967         struct ib_uverbs_flow_tcp_udp_filter val;
 968         struct ib_uverbs_flow_tcp_udp_filter mask;
 969 };
 970 
 971 struct ib_uverbs_flow_ipv6_filter {
 972         __u8    src_ip[16];
 973         __u8    dst_ip[16];
 974         __be32  flow_label;
 975         __u8    next_hdr;
 976         __u8    traffic_class;
 977         __u8    hop_limit;
 978         __u8    reserved;
 979 };
 980 
 981 struct ib_uverbs_flow_spec_ipv6 {
 982         union {
 983                 struct ib_uverbs_flow_spec_hdr hdr;
 984                 struct {
 985                         __u32 type;
 986                         __u16 size;
 987                         __u16 reserved;
 988                 };
 989         };
 990         struct ib_uverbs_flow_ipv6_filter val;
 991         struct ib_uverbs_flow_ipv6_filter mask;
 992 };
 993 
 994 struct ib_uverbs_flow_spec_action_tag {
 995         union {
 996                 struct ib_uverbs_flow_spec_hdr hdr;
 997                 struct {
 998                         __u32 type;
 999                         __u16 size;
1000                         __u16 reserved;
1001                 };
1002         };
1003         __u32                         tag_id;
1004         __u32                         reserved1;
1005 };
1006 
1007 struct ib_uverbs_flow_spec_action_drop {
1008         union {
1009                 struct ib_uverbs_flow_spec_hdr hdr;
1010                 struct {
1011                         __u32 type;
1012                         __u16 size;
1013                         __u16 reserved;
1014                 };
1015         };
1016 };
1017 
1018 struct ib_uverbs_flow_spec_action_handle {
1019         union {
1020                 struct ib_uverbs_flow_spec_hdr hdr;
1021                 struct {
1022                         __u32 type;
1023                         __u16 size;
1024                         __u16 reserved;
1025                 };
1026         };
1027         __u32                         handle;
1028         __u32                         reserved1;
1029 };
1030 
1031 struct ib_uverbs_flow_spec_action_count {
1032         union {
1033                 struct ib_uverbs_flow_spec_hdr hdr;
1034                 struct {
1035                         __u32 type;
1036                         __u16 size;
1037                         __u16 reserved;
1038                 };
1039         };
1040         __u32                         handle;
1041         __u32                         reserved1;
1042 };
1043 
1044 struct ib_uverbs_flow_tunnel_filter {
1045         __be32 tunnel_id;
1046 };
1047 
1048 struct ib_uverbs_flow_spec_tunnel {
1049         union {
1050                 struct ib_uverbs_flow_spec_hdr hdr;
1051                 struct {
1052                         __u32 type;
1053                         __u16 size;
1054                         __u16 reserved;
1055                 };
1056         };
1057         struct ib_uverbs_flow_tunnel_filter val;
1058         struct ib_uverbs_flow_tunnel_filter mask;
1059 };
1060 
1061 struct ib_uverbs_flow_spec_esp_filter {
1062         __u32 spi;
1063         __u32 seq;
1064 };
1065 
1066 struct ib_uverbs_flow_spec_esp {
1067         union {
1068                 struct ib_uverbs_flow_spec_hdr hdr;
1069                 struct {
1070                         __u32 type;
1071                         __u16 size;
1072                         __u16 reserved;
1073                 };
1074         };
1075         struct ib_uverbs_flow_spec_esp_filter val;
1076         struct ib_uverbs_flow_spec_esp_filter mask;
1077 };
1078 
1079 struct ib_uverbs_flow_gre_filter {
1080         /* c_ks_res0_ver field is bits 0-15 in offset 0 of a standard GRE header:
1081          * bit 0 - C - checksum bit.
1082          * bit 1 - reserved. set to 0.
1083          * bit 2 - key bit.
1084          * bit 3 - sequence number bit.
1085          * bits 4:12 - reserved. set to 0.
1086          * bits 13:15 - GRE version.
1087          */
1088         __be16 c_ks_res0_ver;
1089         __be16 protocol;
1090         __be32 key;
1091 };
1092 
1093 struct ib_uverbs_flow_spec_gre {
1094         union {
1095                 struct ib_uverbs_flow_spec_hdr hdr;
1096                 struct {
1097                         __u32 type;
1098                         __u16 size;
1099                         __u16 reserved;
1100                 };
1101         };
1102         struct ib_uverbs_flow_gre_filter     val;
1103         struct ib_uverbs_flow_gre_filter     mask;
1104 };
1105 
1106 struct ib_uverbs_flow_mpls_filter {
1107         /* The field includes the entire MPLS label:
1108          * bits 0:19 - label field.
1109          * bits 20:22 - traffic class field.
1110          * bits 23 - bottom of stack bit.
1111          * bits 24:31 - ttl field.
1112          */
1113         __be32 label;
1114 };
1115 
1116 struct ib_uverbs_flow_spec_mpls {
1117         union {
1118                 struct ib_uverbs_flow_spec_hdr hdr;
1119                 struct {
1120                         __u32 type;
1121                         __u16 size;
1122                         __u16 reserved;
1123                 };
1124         };
1125         struct ib_uverbs_flow_mpls_filter     val;
1126         struct ib_uverbs_flow_mpls_filter     mask;
1127 };
1128 
1129 struct ib_uverbs_flow_attr {
1130         __u32 type;
1131         __u16 size;
1132         __u16 priority;
1133         __u8  num_of_specs;
1134         __u8  reserved[2];
1135         __u8  port;
1136         __u32 flags;
1137         /* Following are the optional layers according to user request
1138          * struct ib_flow_spec_xxx
1139          * struct ib_flow_spec_yyy
1140          */
1141         struct ib_uverbs_flow_spec_hdr flow_specs[0];
1142 };
1143 
1144 struct ib_uverbs_create_flow  {
1145         __u32 comp_mask;
1146         __u32 qp_handle;
1147         struct ib_uverbs_flow_attr flow_attr;
1148 };
1149 
1150 struct ib_uverbs_create_flow_resp {
1151         __u32 comp_mask;
1152         __u32 flow_handle;
1153 };
1154 
1155 struct ib_uverbs_destroy_flow  {
1156         __u32 comp_mask;
1157         __u32 flow_handle;
1158 };
1159 
1160 struct ib_uverbs_create_srq {
1161         __aligned_u64 response;
1162         __aligned_u64 user_handle;
1163         __u32 pd_handle;
1164         __u32 max_wr;
1165         __u32 max_sge;
1166         __u32 srq_limit;
1167         __aligned_u64 driver_data[0];
1168 };
1169 
1170 struct ib_uverbs_create_xsrq {
1171         __aligned_u64 response;
1172         __aligned_u64 user_handle;
1173         __u32 srq_type;
1174         __u32 pd_handle;
1175         __u32 max_wr;
1176         __u32 max_sge;
1177         __u32 srq_limit;
1178         __u32 max_num_tags;
1179         __u32 xrcd_handle;
1180         __u32 cq_handle;
1181         __aligned_u64 driver_data[0];
1182 };
1183 
1184 struct ib_uverbs_create_srq_resp {
1185         __u32 srq_handle;
1186         __u32 max_wr;
1187         __u32 max_sge;
1188         __u32 srqn;
1189         __u32 driver_data[0];
1190 };
1191 
1192 struct ib_uverbs_modify_srq {
1193         __u32 srq_handle;
1194         __u32 attr_mask;
1195         __u32 max_wr;
1196         __u32 srq_limit;
1197         __aligned_u64 driver_data[0];
1198 };
1199 
1200 struct ib_uverbs_query_srq {
1201         __aligned_u64 response;
1202         __u32 srq_handle;
1203         __u32 reserved;
1204         __aligned_u64 driver_data[0];
1205 };
1206 
1207 struct ib_uverbs_query_srq_resp {
1208         __u32 max_wr;
1209         __u32 max_sge;
1210         __u32 srq_limit;
1211         __u32 reserved;
1212 };
1213 
1214 struct ib_uverbs_destroy_srq {
1215         __aligned_u64 response;
1216         __u32 srq_handle;
1217         __u32 reserved;
1218 };
1219 
1220 struct ib_uverbs_destroy_srq_resp {
1221         __u32 events_reported;
1222 };
1223 
1224 struct ib_uverbs_ex_create_wq  {
1225         __u32 comp_mask;
1226         __u32 wq_type;
1227         __aligned_u64 user_handle;
1228         __u32 pd_handle;
1229         __u32 cq_handle;
1230         __u32 max_wr;
1231         __u32 max_sge;
1232         __u32 create_flags; /* Use enum ib_wq_flags */
1233         __u32 reserved;
1234 };
1235 
1236 struct ib_uverbs_ex_create_wq_resp {
1237         __u32 comp_mask;
1238         __u32 response_length;
1239         __u32 wq_handle;
1240         __u32 max_wr;
1241         __u32 max_sge;
1242         __u32 wqn;
1243 };
1244 
1245 struct ib_uverbs_ex_destroy_wq  {
1246         __u32 comp_mask;
1247         __u32 wq_handle;
1248 };
1249 
1250 struct ib_uverbs_ex_destroy_wq_resp {
1251         __u32 comp_mask;
1252         __u32 response_length;
1253         __u32 events_reported;
1254         __u32 reserved;
1255 };
1256 
1257 struct ib_uverbs_ex_modify_wq  {
1258         __u32 attr_mask;
1259         __u32 wq_handle;
1260         __u32 wq_state;
1261         __u32 curr_wq_state;
1262         __u32 flags; /* Use enum ib_wq_flags */
1263         __u32 flags_mask; /* Use enum ib_wq_flags */
1264 };
1265 
1266 /* Prevent memory allocation rather than max expected size */
1267 #define IB_USER_VERBS_MAX_LOG_IND_TBL_SIZE 0x0d
1268 struct ib_uverbs_ex_create_rwq_ind_table  {
1269         __u32 comp_mask;
1270         __u32 log_ind_tbl_size;
1271         /* Following are the wq handles according to log_ind_tbl_size
1272          * wq_handle1
1273          * wq_handle2
1274          */
1275         __u32 wq_handles[0];
1276 };
1277 
1278 struct ib_uverbs_ex_create_rwq_ind_table_resp {
1279         __u32 comp_mask;
1280         __u32 response_length;
1281         __u32 ind_tbl_handle;
1282         __u32 ind_tbl_num;
1283 };
1284 
1285 struct ib_uverbs_ex_destroy_rwq_ind_table  {
1286         __u32 comp_mask;
1287         __u32 ind_tbl_handle;
1288 };
1289 
1290 struct ib_uverbs_cq_moderation {
1291         __u16 cq_count;
1292         __u16 cq_period;
1293 };
1294 
1295 struct ib_uverbs_ex_modify_cq {
1296         __u32 cq_handle;
1297         __u32 attr_mask;
1298         struct ib_uverbs_cq_moderation attr;
1299         __u32 reserved;
1300 };
1301 
1302 #define IB_DEVICE_NAME_MAX 64
1303 
1304 #endif /* IB_USER_VERBS_H */

/* [<][>][^][v][top][bottom][index][help] */