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