1415 lines · 30.0 KB · C
RawDownload
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) *//* * Copyright (c) 2005 Topspin Communications.  All rights reserved. * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved. * Copyright (c) 2005 PathScale, Inc.  All rights reserved. * Copyright (c) 2006 Mellanox Technologies.  All rights reserved. * * This software is available to you under a choice of one of two * licenses.  You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * *     Redistribution and use in source and binary forms, with or *     without modification, are permitted provided that the following *     conditions are met: * *      - Redistributions of source code must retain the above *        copyright notice, this list of conditions and the following *        disclaimer. * *      - Redistributions in binary form must reproduce the above *        copyright notice, this list of conditions and the following *        disclaimer in the documentation and/or other materials *        provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef IB_USER_VERBS_H#define IB_USER_VERBS_H #include <linux/types.h> /* * Increment this value if any changes that break userspace ABI * compatibility are made. */#define IB_USER_VERBS_ABI_VERSION	6#define IB_USER_VERBS_CMD_THRESHOLD    50 enum ib_uverbs_write_cmds {	IB_USER_VERBS_CMD_GET_CONTEXT,	IB_USER_VERBS_CMD_QUERY_DEVICE,	IB_USER_VERBS_CMD_QUERY_PORT,	IB_USER_VERBS_CMD_ALLOC_PD,	IB_USER_VERBS_CMD_DEALLOC_PD,	IB_USER_VERBS_CMD_CREATE_AH,	IB_USER_VERBS_CMD_MODIFY_AH,	IB_USER_VERBS_CMD_QUERY_AH,	IB_USER_VERBS_CMD_DESTROY_AH,	IB_USER_VERBS_CMD_REG_MR,	IB_USER_VERBS_CMD_REG_SMR,	IB_USER_VERBS_CMD_REREG_MR,	IB_USER_VERBS_CMD_QUERY_MR,	IB_USER_VERBS_CMD_DEREG_MR,	IB_USER_VERBS_CMD_ALLOC_MW,	IB_USER_VERBS_CMD_BIND_MW,	IB_USER_VERBS_CMD_DEALLOC_MW,	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,	IB_USER_VERBS_CMD_CREATE_CQ,	IB_USER_VERBS_CMD_RESIZE_CQ,	IB_USER_VERBS_CMD_DESTROY_CQ,	IB_USER_VERBS_CMD_POLL_CQ,	IB_USER_VERBS_CMD_PEEK_CQ,	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,	IB_USER_VERBS_CMD_CREATE_QP,	IB_USER_VERBS_CMD_QUERY_QP,	IB_USER_VERBS_CMD_MODIFY_QP,	IB_USER_VERBS_CMD_DESTROY_QP,	IB_USER_VERBS_CMD_POST_SEND,	IB_USER_VERBS_CMD_POST_RECV,	IB_USER_VERBS_CMD_ATTACH_MCAST,	IB_USER_VERBS_CMD_DETACH_MCAST,	IB_USER_VERBS_CMD_CREATE_SRQ,	IB_USER_VERBS_CMD_MODIFY_SRQ,	IB_USER_VERBS_CMD_QUERY_SRQ,	IB_USER_VERBS_CMD_DESTROY_SRQ,	IB_USER_VERBS_CMD_POST_SRQ_RECV,	IB_USER_VERBS_CMD_OPEN_XRCD,	IB_USER_VERBS_CMD_CLOSE_XRCD,	IB_USER_VERBS_CMD_CREATE_XSRQ,	IB_USER_VERBS_CMD_OPEN_QP,}; enum {	IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,	IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,	IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,	IB_USER_VERBS_EX_CMD_MODIFY_QP = IB_USER_VERBS_CMD_MODIFY_QP,	IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,	IB_USER_VERBS_EX_CMD_DESTROY_FLOW,	IB_USER_VERBS_EX_CMD_CREATE_WQ,	IB_USER_VERBS_EX_CMD_MODIFY_WQ,	IB_USER_VERBS_EX_CMD_DESTROY_WQ,	IB_USER_VERBS_EX_CMD_CREATE_RWQ_IND_TBL,	IB_USER_VERBS_EX_CMD_DESTROY_RWQ_IND_TBL,	IB_USER_VERBS_EX_CMD_MODIFY_CQ}; /* see IBA A19.4.1.1 Placement Types */enum ib_placement_type {	IB_FLUSH_GLOBAL = 1U << 0,	IB_FLUSH_PERSISTENT = 1U << 1,}; /* see IBA A19.4.1.2 Selectivity Level */enum ib_selectivity_level {	IB_FLUSH_RANGE = 0,	IB_FLUSH_MR,}; /* * Make sure that all structs defined in this file remain laid out so * that they pack the same way on 32-bit and 64-bit architectures (to * avoid incompatibility between 32-bit userspace and 64-bit kernels). * Specifically: *  - Do not use pointer types -- pass pointers in __u64 instead. *  - Make sure that any structure larger than 4 bytes is padded to a *    multiple of 8 bytes.  Otherwise the structure size will be *    different between 32-bit and 64-bit architectures. */ struct ib_uverbs_async_event_desc {	__aligned_u64 element;	__u32 event_type;	/* enum ib_event_type */	__u32 reserved;}; struct ib_uverbs_comp_event_desc {	__aligned_u64 cq_handle;}; struct ib_uverbs_cq_moderation_caps {	__u16     max_cq_moderation_count;	__u16     max_cq_moderation_period;	__u32     reserved;}; /* * All commands from userspace should start with a __u32 command field * followed by __u16 in_words and out_words fields (which give the * length of the command block and response buffer if any in 32-bit * words).  The kernel driver will read these fields first and read * the rest of the command struct based on these value. */ #define IB_USER_VERBS_CMD_COMMAND_MASK 0xff#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u struct ib_uverbs_cmd_hdr {	__u32 command;	__u16 in_words;	__u16 out_words;}; struct ib_uverbs_ex_cmd_hdr {	__aligned_u64 response;	__u16 provider_in_words;	__u16 provider_out_words;	__u32 cmd_hdr_reserved;}; struct ib_uverbs_get_context {	__aligned_u64 response;	__aligned_u64 driver_data[];}; struct ib_uverbs_get_context_resp {	__u32 async_fd;	__u32 num_comp_vectors;	__aligned_u64 driver_data[];}; struct ib_uverbs_query_device {	__aligned_u64 response;	__aligned_u64 driver_data[];}; struct ib_uverbs_query_device_resp {	__aligned_u64 fw_ver;	__be64 node_guid;	__be64 sys_image_guid;	__aligned_u64 max_mr_size;	__aligned_u64 page_size_cap;	__u32 vendor_id;	__u32 vendor_part_id;	__u32 hw_ver;	__u32 max_qp;	__u32 max_qp_wr;	__u32 device_cap_flags;	__u32 max_sge;	__u32 max_sge_rd;	__u32 max_cq;	__u32 max_cqe;	__u32 max_mr;	__u32 max_pd;	__u32 max_qp_rd_atom;	__u32 max_ee_rd_atom;	__u32 max_res_rd_atom;	__u32 max_qp_init_rd_atom;	__u32 max_ee_init_rd_atom;	__u32 atomic_cap;	__u32 max_ee;	__u32 max_rdd;	__u32 max_mw;	__u32 max_raw_ipv6_qp;	__u32 max_raw_ethy_qp;	__u32 max_mcast_grp;	__u32 max_mcast_qp_attach;	__u32 max_total_mcast_qp_attach;	__u32 max_ah;	__u32 max_fmr;	__u32 max_map_per_fmr;	__u32 max_srq;	__u32 max_srq_wr;	__u32 max_srq_sge;	__u16 max_pkeys;	__u8  local_ca_ack_delay;	__u8  phys_port_cnt;	__u8  reserved[4];}; struct ib_uverbs_ex_query_device {	__u32 comp_mask;	__u32 reserved;}; enum ib_uverbs_odp_general_cap_bits {	IB_UVERBS_ODP_SUPPORT          = 1 << 0,	IB_UVERBS_ODP_SUPPORT_IMPLICIT = 1 << 1,}; enum ib_uverbs_odp_transport_cap_bits {	IB_UVERBS_ODP_SUPPORT_SEND     = 1 << 0,	IB_UVERBS_ODP_SUPPORT_RECV     = 1 << 1,	IB_UVERBS_ODP_SUPPORT_WRITE    = 1 << 2,	IB_UVERBS_ODP_SUPPORT_READ     = 1 << 3,	IB_UVERBS_ODP_SUPPORT_ATOMIC   = 1 << 4,	IB_UVERBS_ODP_SUPPORT_SRQ_RECV = 1 << 5,	IB_UVERBS_ODP_SUPPORT_FLUSH    = 1 << 6,	IB_UVERBS_ODP_SUPPORT_ATOMIC_WRITE     = 1 << 7,}; struct ib_uverbs_odp_caps {	__aligned_u64 general_caps;	struct {		__u32 rc_odp_caps;		__u32 uc_odp_caps;		__u32 ud_odp_caps;	} per_transport_caps;	__u32 reserved;}; struct ib_uverbs_rss_caps {	/* Corresponding bit will be set if qp type from	 * 'enum ib_qp_type' is supported, e.g.	 * supported_qpts |= 1 << IB_QPT_UD	 */	__u32 supported_qpts;	__u32 max_rwq_indirection_tables;	__u32 max_rwq_indirection_table_size;	__u32 reserved;}; struct ib_uverbs_tm_caps {	/* Max size of rendezvous request message */	__u32 max_rndv_hdr_size;	/* Max number of entries in tag matching list */	__u32 max_num_tags;	/* TM flags */	__u32 flags;	/* Max number of outstanding list operations */	__u32 max_ops;	/* Max number of SGE in tag matching entry */	__u32 max_sge;	__u32 reserved;}; struct ib_uverbs_ex_query_device_resp {	struct ib_uverbs_query_device_resp base;	__u32 comp_mask;	__u32 response_length;	struct ib_uverbs_odp_caps odp_caps;	__aligned_u64 timestamp_mask;	__aligned_u64 hca_core_clock; /* in KHZ */	__aligned_u64 device_cap_flags_ex;	struct ib_uverbs_rss_caps rss_caps;	__u32  max_wq_type_rq;	__u32 raw_packet_caps;	struct ib_uverbs_tm_caps tm_caps;	struct ib_uverbs_cq_moderation_caps cq_moderation_caps;	__aligned_u64 max_dm_size;	__u32 xrc_odp_caps;	__u32 reserved;}; struct ib_uverbs_query_port {	__aligned_u64 response;	__u8  port_num;	__u8  reserved[7];	__aligned_u64 driver_data[];}; struct ib_uverbs_query_port_resp {	__u32 port_cap_flags;		/* see ib_uverbs_query_port_cap_flags */	__u32 max_msg_sz;	__u32 bad_pkey_cntr;	__u32 qkey_viol_cntr;	__u32 gid_tbl_len;	__u16 pkey_tbl_len;	__u16 lid;	__u16 sm_lid;	__u8  state;	__u8  max_mtu;	__u8  active_mtu;	__u8  lmc;	__u8  max_vl_num;	__u8  sm_sl;	__u8  subnet_timeout;	__u8  init_type_reply;	__u8  active_width;	__u8  active_speed;	__u8  phys_state;	__u8  link_layer;	__u8  flags;			/* see ib_uverbs_query_port_flags */	__u8  reserved;}; struct ib_uverbs_alloc_pd {	__aligned_u64 response;	__aligned_u64 driver_data[];}; struct ib_uverbs_alloc_pd_resp {	__u32 pd_handle;	__u32 driver_data[];}; struct ib_uverbs_dealloc_pd {	__u32 pd_handle;}; struct ib_uverbs_open_xrcd {	__aligned_u64 response;	__u32 fd;	__u32 oflags;	__aligned_u64 driver_data[];}; struct ib_uverbs_open_xrcd_resp {	__u32 xrcd_handle;	__u32 driver_data[];}; struct ib_uverbs_close_xrcd {	__u32 xrcd_handle;}; struct ib_uverbs_reg_mr {	__aligned_u64 response;	__aligned_u64 start;	__aligned_u64 length;	__aligned_u64 hca_va;	__u32 pd_handle;	__u32 access_flags;	__aligned_u64 driver_data[];}; struct ib_uverbs_reg_mr_resp {	__u32 mr_handle;	__u32 lkey;	__u32 rkey;	__u32 driver_data[];}; struct ib_uverbs_rereg_mr {	__aligned_u64 response;	__u32 mr_handle;	__u32 flags;	__aligned_u64 start;	__aligned_u64 length;	__aligned_u64 hca_va;	__u32 pd_handle;	__u32 access_flags;	__aligned_u64 driver_data[];}; struct ib_uverbs_rereg_mr_resp {	__u32 lkey;	__u32 rkey;	__aligned_u64 driver_data[];}; struct ib_uverbs_dereg_mr {	__u32 mr_handle;}; struct ib_uverbs_alloc_mw {	__aligned_u64 response;	__u32 pd_handle;	__u8  mw_type;	__u8  reserved[3];	__aligned_u64 driver_data[];}; struct ib_uverbs_alloc_mw_resp {	__u32 mw_handle;	__u32 rkey;	__aligned_u64 driver_data[];}; struct ib_uverbs_dealloc_mw {	__u32 mw_handle;}; struct ib_uverbs_create_comp_channel {	__aligned_u64 response;}; struct ib_uverbs_create_comp_channel_resp {	__u32 fd;}; struct ib_uverbs_create_cq {	__aligned_u64 response;	__aligned_u64 user_handle;	__u32 cqe;	__u32 comp_vector;	__s32 comp_channel;	__u32 reserved;	__aligned_u64 driver_data[];}; enum ib_uverbs_ex_create_cq_flags {	IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,	IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,}; struct ib_uverbs_ex_create_cq {	__aligned_u64 user_handle;	__u32 cqe;	__u32 comp_vector;	__s32 comp_channel;	__u32 comp_mask;	__u32 flags;  /* bitmask of ib_uverbs_ex_create_cq_flags */	__u32 reserved;}; struct ib_uverbs_create_cq_resp {	__u32 cq_handle;	__u32 cqe;	__aligned_u64 driver_data[0];}; struct ib_uverbs_ex_create_cq_resp {	struct ib_uverbs_create_cq_resp base;	__u32 comp_mask;	__u32 response_length;}; struct ib_uverbs_resize_cq {	__aligned_u64 response;	__u32 cq_handle;	__u32 cqe;	__aligned_u64 driver_data[];}; struct ib_uverbs_resize_cq_resp {	__u32 cqe;	__u32 reserved;	__aligned_u64 driver_data[];}; struct ib_uverbs_poll_cq {	__aligned_u64 response;	__u32 cq_handle;	__u32 ne;}; enum ib_uverbs_wc_opcode {	IB_UVERBS_WC_SEND = 0,	IB_UVERBS_WC_RDMA_WRITE = 1,	IB_UVERBS_WC_RDMA_READ = 2,	IB_UVERBS_WC_COMP_SWAP = 3,	IB_UVERBS_WC_FETCH_ADD = 4,	IB_UVERBS_WC_BIND_MW = 5,	IB_UVERBS_WC_LOCAL_INV = 6,	IB_UVERBS_WC_TSO = 7,	IB_UVERBS_WC_FLUSH = 8,	IB_UVERBS_WC_ATOMIC_WRITE = 9,}; 

Lines 1–500 of 1415.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t