2  * Copyright (c) 2005 Topspin Communications.  All rights reserved.
 
   3  * Copyright (c) 2005 Cisco Systems.  All rights reserved.
 
   5  * This software is available to you under a choice of one of two
 
   6  * licenses.  You may choose to be licensed under the terms of the GNU
 
   7  * General Public License (GPL) Version 2, available from the file
 
   8  * COPYING in the main directory of this source tree, or the
 
   9  * OpenIB.org BSD license below:
 
  11  *     Redistribution and use in source and binary forms, with or
 
  12  *     without modification, are permitted provided that the following
 
  15  *      - Redistributions of source code must retain the above
 
  16  *        copyright notice, this list of conditions and the following
 
  19  *      - Redistributions in binary form must reproduce the above
 
  20  *        copyright notice, this list of conditions and the following
 
  21  *        disclaimer in the documentation and/or other materials
 
  22  *        provided with the distribution.
 
  24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
  25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
  26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
  27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 
  28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 
  29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
  30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
  33  * $Id: ib_user_verbs.h 2708 2005-06-24 17:27:21Z roland $
 
  36 #ifndef IB_USER_VERBS_H
 
  37 #define IB_USER_VERBS_H
 
  39 #include <linux/types.h>
 
  42  * Increment this value if any changes that break userspace ABI
 
  43  * compatibility are made.
 
  45 #define IB_USER_VERBS_ABI_VERSION       1
 
  48         IB_USER_VERBS_CMD_QUERY_PARAMS,
 
  49         IB_USER_VERBS_CMD_GET_CONTEXT,
 
  50         IB_USER_VERBS_CMD_QUERY_DEVICE,
 
  51         IB_USER_VERBS_CMD_QUERY_PORT,
 
  52         IB_USER_VERBS_CMD_QUERY_GID,
 
  53         IB_USER_VERBS_CMD_QUERY_PKEY,
 
  54         IB_USER_VERBS_CMD_ALLOC_PD,
 
  55         IB_USER_VERBS_CMD_DEALLOC_PD,
 
  56         IB_USER_VERBS_CMD_CREATE_AH,
 
  57         IB_USER_VERBS_CMD_MODIFY_AH,
 
  58         IB_USER_VERBS_CMD_QUERY_AH,
 
  59         IB_USER_VERBS_CMD_DESTROY_AH,
 
  60         IB_USER_VERBS_CMD_REG_MR,
 
  61         IB_USER_VERBS_CMD_REG_SMR,
 
  62         IB_USER_VERBS_CMD_REREG_MR,
 
  63         IB_USER_VERBS_CMD_QUERY_MR,
 
  64         IB_USER_VERBS_CMD_DEREG_MR,
 
  65         IB_USER_VERBS_CMD_ALLOC_MW,
 
  66         IB_USER_VERBS_CMD_BIND_MW,
 
  67         IB_USER_VERBS_CMD_DEALLOC_MW,
 
  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
 
  85  * Make sure that all structs defined in this file remain laid out so
 
  86  * that they pack the same way on 32-bit and 64-bit architectures (to
 
  87  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
 
  88  * In particular do not use pointer types -- pass pointers in __u64
 
  92 struct ib_uverbs_async_event_desc {
 
  94         __u32 event_type;       /* enum ib_event_type */
 
  98 struct ib_uverbs_comp_event_desc {
 
 103  * All commands from userspace should start with a __u32 command field
 
 104  * followed by __u16 in_words and out_words fields (which give the
 
 105  * length of the command block and response buffer if any in 32-bit
 
 106  * words).  The kernel driver will read these fields first and read
 
 107  * the rest of the command struct based on these value.
 
 110 struct ib_uverbs_cmd_hdr {
 
 117  * No driver_data for "query params" command, since this is intended
 
 118  * to be a core function with no possible device dependence.
 
 120 struct ib_uverbs_query_params {
 
 124 struct ib_uverbs_query_params_resp {
 
 128 struct ib_uverbs_get_context {
 
 131         __u64 driver_data[0];
 
 134 struct ib_uverbs_get_context_resp {
 
 139 struct ib_uverbs_query_device {
 
 141         __u64 driver_data[0];
 
 144 struct ib_uverbs_query_device_resp {
 
 147         __u64 sys_image_guid;
 
 151         __u32 vendor_part_id;
 
 155         __u32 device_cap_flags;
 
 162         __u32 max_qp_rd_atom;
 
 163         __u32 max_ee_rd_atom;
 
 164         __u32 max_res_rd_atom;
 
 165         __u32 max_qp_init_rd_atom;
 
 166         __u32 max_ee_init_rd_atom;
 
 171         __u32 max_raw_ipv6_qp;
 
 172         __u32 max_raw_ethy_qp;
 
 174         __u32 max_mcast_qp_attach;
 
 175         __u32 max_total_mcast_qp_attach;
 
 178         __u32 max_map_per_fmr;
 
 183         __u8  local_ca_ack_delay;
 
 188 struct ib_uverbs_query_port {
 
 192         __u64 driver_data[0];
 
 195 struct ib_uverbs_query_port_resp {
 
 196         __u32 port_cap_flags;
 
 199         __u32 qkey_viol_cntr;
 
 211         __u8  init_type_reply;
 
 218 struct ib_uverbs_query_gid {
 
 223         __u64 driver_data[0];
 
 226 struct ib_uverbs_query_gid_resp {
 
 230 struct ib_uverbs_query_pkey {
 
 235         __u64 driver_data[0];
 
 238 struct ib_uverbs_query_pkey_resp {
 
 243 struct ib_uverbs_alloc_pd {
 
 245         __u64 driver_data[0];
 
 248 struct ib_uverbs_alloc_pd_resp {
 
 252 struct ib_uverbs_dealloc_pd {
 
 256 struct ib_uverbs_reg_mr {
 
 263         __u64 driver_data[0];
 
 266 struct ib_uverbs_reg_mr_resp {
 
 272 struct ib_uverbs_dereg_mr {
 
 276 struct ib_uverbs_create_cq {
 
 281         __u64 driver_data[0];
 
 284 struct ib_uverbs_create_cq_resp {
 
 289 struct ib_uverbs_destroy_cq {
 
 293 struct ib_uverbs_create_qp {
 
 297         __u32 send_cq_handle;
 
 298         __u32 recv_cq_handle;
 
 304         __u32 max_inline_data;
 
 309         __u64 driver_data[0];
 
 312 struct ib_uverbs_create_qp_resp {
 
 318  * This struct needs to remain a multiple of 8 bytes to keep the
 
 319  * alignment of the modify QP parameters.
 
 321 struct ib_uverbs_qp_dest {
 
 336 struct ib_uverbs_modify_qp {
 
 337         struct ib_uverbs_qp_dest dest;
 
 338         struct ib_uverbs_qp_dest alt_dest;
 
 345         __u32 qp_access_flags;
 
 347         __u16 alt_pkey_index;
 
 352         __u8  en_sqd_async_notify;
 
 354         __u8  max_dest_rd_atomic;
 
 363         __u64 driver_data[0];
 
 366 struct ib_uverbs_modify_qp_resp {
 
 369 struct ib_uverbs_destroy_qp {
 
 373 struct ib_uverbs_attach_mcast {
 
 378         __u64 driver_data[0];
 
 381 struct ib_uverbs_detach_mcast {
 
 386         __u64 driver_data[0];
 
 389 #endif /* IB_USER_VERBS_H */