275 lines · c
1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */2/*3 * Copyright (c) 2017-2018, Mellanox Technologies inc. All rights reserved.4 *5 * This software is available to you under a choice of one of two6 * licenses. You may choose to be licensed under the terms of the GNU7 * General Public License (GPL) Version 2, available from the file8 * COPYING in the main directory of this source tree, or the9 * OpenIB.org BSD license below:10 *11 * Redistribution and use in source and binary forms, with or12 * without modification, are permitted provided that the following13 * conditions are met:14 *15 * - Redistributions of source code must retain the above16 * copyright notice, this list of conditions and the following17 * disclaimer.18 *19 * - Redistributions in binary form must reproduce the above20 * copyright notice, this list of conditions and the following21 * disclaimer in the documentation and/or other materials22 * provided with the distribution.23 *24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE31 * SOFTWARE.32 */33 34#ifndef IB_USER_IOCTL_VERBS_H35#define IB_USER_IOCTL_VERBS_H36 37#include <linux/types.h>38#include <rdma/ib_user_verbs.h>39 40#ifndef RDMA_UAPI_PTR41#define RDMA_UAPI_PTR(_type, _name) __aligned_u64 _name42#endif43 44#define IB_UVERBS_ACCESS_OPTIONAL_FIRST (1 << 20)45#define IB_UVERBS_ACCESS_OPTIONAL_LAST (1 << 29)46 47enum ib_uverbs_core_support {48 IB_UVERBS_CORE_SUPPORT_OPTIONAL_MR_ACCESS = 1 << 0,49};50 51enum ib_uverbs_access_flags {52 IB_UVERBS_ACCESS_LOCAL_WRITE = 1 << 0,53 IB_UVERBS_ACCESS_REMOTE_WRITE = 1 << 1,54 IB_UVERBS_ACCESS_REMOTE_READ = 1 << 2,55 IB_UVERBS_ACCESS_REMOTE_ATOMIC = 1 << 3,56 IB_UVERBS_ACCESS_MW_BIND = 1 << 4,57 IB_UVERBS_ACCESS_ZERO_BASED = 1 << 5,58 IB_UVERBS_ACCESS_ON_DEMAND = 1 << 6,59 IB_UVERBS_ACCESS_HUGETLB = 1 << 7,60 IB_UVERBS_ACCESS_FLUSH_GLOBAL = 1 << 8,61 IB_UVERBS_ACCESS_FLUSH_PERSISTENT = 1 << 9,62 63 IB_UVERBS_ACCESS_RELAXED_ORDERING = IB_UVERBS_ACCESS_OPTIONAL_FIRST,64 IB_UVERBS_ACCESS_OPTIONAL_RANGE =65 ((IB_UVERBS_ACCESS_OPTIONAL_LAST << 1) - 1) &66 ~(IB_UVERBS_ACCESS_OPTIONAL_FIRST - 1)67};68 69enum ib_uverbs_srq_type {70 IB_UVERBS_SRQT_BASIC,71 IB_UVERBS_SRQT_XRC,72 IB_UVERBS_SRQT_TM,73};74 75enum ib_uverbs_wq_type {76 IB_UVERBS_WQT_RQ,77};78 79enum ib_uverbs_wq_flags {80 IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1 << 0,81 IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 1 << 1,82 IB_UVERBS_WQ_FLAGS_DELAY_DROP = 1 << 2,83 IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 1 << 3,84};85 86enum ib_uverbs_qp_type {87 IB_UVERBS_QPT_RC = 2,88 IB_UVERBS_QPT_UC,89 IB_UVERBS_QPT_UD,90 IB_UVERBS_QPT_RAW_PACKET = 8,91 IB_UVERBS_QPT_XRC_INI,92 IB_UVERBS_QPT_XRC_TGT,93 IB_UVERBS_QPT_DRIVER = 0xFF,94};95 96enum ib_uverbs_qp_create_flags {97 IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1,98 IB_UVERBS_QP_CREATE_SCATTER_FCS = 1 << 8,99 IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 1 << 9,100 IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 1 << 11,101 IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 1 << 12,102};103 104enum ib_uverbs_query_port_cap_flags {105 IB_UVERBS_PCF_SM = 1 << 1,106 IB_UVERBS_PCF_NOTICE_SUP = 1 << 2,107 IB_UVERBS_PCF_TRAP_SUP = 1 << 3,108 IB_UVERBS_PCF_OPT_IPD_SUP = 1 << 4,109 IB_UVERBS_PCF_AUTO_MIGR_SUP = 1 << 5,110 IB_UVERBS_PCF_SL_MAP_SUP = 1 << 6,111 IB_UVERBS_PCF_MKEY_NVRAM = 1 << 7,112 IB_UVERBS_PCF_PKEY_NVRAM = 1 << 8,113 IB_UVERBS_PCF_LED_INFO_SUP = 1 << 9,114 IB_UVERBS_PCF_SM_DISABLED = 1 << 10,115 IB_UVERBS_PCF_SYS_IMAGE_GUID_SUP = 1 << 11,116 IB_UVERBS_PCF_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,117 IB_UVERBS_PCF_EXTENDED_SPEEDS_SUP = 1 << 14,118 IB_UVERBS_PCF_CM_SUP = 1 << 16,119 IB_UVERBS_PCF_SNMP_TUNNEL_SUP = 1 << 17,120 IB_UVERBS_PCF_REINIT_SUP = 1 << 18,121 IB_UVERBS_PCF_DEVICE_MGMT_SUP = 1 << 19,122 IB_UVERBS_PCF_VENDOR_CLASS_SUP = 1 << 20,123 IB_UVERBS_PCF_DR_NOTICE_SUP = 1 << 21,124 IB_UVERBS_PCF_CAP_MASK_NOTICE_SUP = 1 << 22,125 IB_UVERBS_PCF_BOOT_MGMT_SUP = 1 << 23,126 IB_UVERBS_PCF_LINK_LATENCY_SUP = 1 << 24,127 IB_UVERBS_PCF_CLIENT_REG_SUP = 1 << 25,128 /*129 * IsOtherLocalChangesNoticeSupported is aliased by IP_BASED_GIDS and130 * is inaccessible131 */132 IB_UVERBS_PCF_LINK_SPEED_WIDTH_TABLE_SUP = 1 << 27,133 IB_UVERBS_PCF_VENDOR_SPECIFIC_MADS_TABLE_SUP = 1 << 28,134 IB_UVERBS_PCF_MCAST_PKEY_TRAP_SUPPRESSION_SUP = 1 << 29,135 IB_UVERBS_PCF_MCAST_FDB_TOP_SUP = 1 << 30,136 IB_UVERBS_PCF_HIERARCHY_INFO_SUP = 1ULL << 31,137 138 /* NOTE this is an internal flag, not an IBA flag */139 IB_UVERBS_PCF_IP_BASED_GIDS = 1 << 26,140};141 142enum ib_uverbs_query_port_flags {143 IB_UVERBS_QPF_GRH_REQUIRED = 1 << 0,144};145 146enum ib_uverbs_flow_action_esp_keymat {147 IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM,148};149 150enum ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo {151 IB_UVERBS_FLOW_ACTION_IV_ALGO_SEQ,152};153 154struct ib_uverbs_flow_action_esp_keymat_aes_gcm {155 __aligned_u64 iv;156 __u32 iv_algo; /* Use enum ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo */157 158 __u32 salt;159 __u32 icv_len;160 161 __u32 key_len;162 __u32 aes_key[256 / 32];163};164 165enum ib_uverbs_flow_action_esp_replay {166 IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE,167 IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP,168};169 170struct ib_uverbs_flow_action_esp_replay_bmp {171 __u32 size;172};173 174enum ib_uverbs_flow_action_esp_flags {175 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_INLINE_CRYPTO = 0UL << 0, /* Default */176 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_FULL_OFFLOAD = 1UL << 0,177 178 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TUNNEL = 0UL << 1, /* Default */179 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TRANSPORT = 1UL << 1,180 181 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_DECRYPT = 0UL << 2, /* Default */182 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ENCRYPT = 1UL << 2,183 184 IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ESN_NEW_WINDOW = 1UL << 3,185};186 187struct ib_uverbs_flow_action_esp_encap {188 /* This struct represents a list of pointers to flow_xxxx_filter that189 * encapsulates the payload in ESP tunnel mode.190 */191 RDMA_UAPI_PTR(void *, val_ptr); /* pointer to a flow_xxxx_filter */192 RDMA_UAPI_PTR(struct ib_uverbs_flow_action_esp_encap *, next_ptr);193 __u16 len; /* Len of the filter struct val_ptr points to */194 __u16 type; /* Use flow_spec_type enum */195};196 197struct ib_uverbs_flow_action_esp {198 __u32 spi;199 __u32 seq;200 __u32 tfc_pad;201 __u32 flags;202 __aligned_u64 hard_limit_pkts;203};204 205enum ib_uverbs_read_counters_flags {206 /* prefer read values from driver cache */207 IB_UVERBS_READ_COUNTERS_PREFER_CACHED = 1 << 0,208};209 210enum ib_uverbs_advise_mr_advice {211 IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH,212 IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE,213 IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT,214};215 216enum ib_uverbs_advise_mr_flag {217 IB_UVERBS_ADVISE_MR_FLAG_FLUSH = 1 << 0,218};219 220struct ib_uverbs_query_port_resp_ex {221 struct ib_uverbs_query_port_resp legacy_resp;222 __u16 port_cap_flags2;223 __u8 reserved[2];224 __u32 active_speed_ex;225};226 227struct ib_uverbs_qp_cap {228 __u32 max_send_wr;229 __u32 max_recv_wr;230 __u32 max_send_sge;231 __u32 max_recv_sge;232 __u32 max_inline_data;233};234 235enum rdma_driver_id {236 RDMA_DRIVER_UNKNOWN,237 RDMA_DRIVER_MLX5,238 RDMA_DRIVER_MLX4,239 RDMA_DRIVER_CXGB3,240 RDMA_DRIVER_CXGB4,241 RDMA_DRIVER_MTHCA,242 RDMA_DRIVER_BNXT_RE,243 RDMA_DRIVER_OCRDMA,244 RDMA_DRIVER_NES,245 RDMA_DRIVER_I40IW,246 RDMA_DRIVER_IRDMA = RDMA_DRIVER_I40IW,247 RDMA_DRIVER_VMW_PVRDMA,248 RDMA_DRIVER_QEDR,249 RDMA_DRIVER_HNS,250 RDMA_DRIVER_USNIC,251 RDMA_DRIVER_RXE,252 RDMA_DRIVER_HFI1,253 RDMA_DRIVER_QIB,254 RDMA_DRIVER_EFA,255 RDMA_DRIVER_SIW,256 RDMA_DRIVER_ERDMA,257 RDMA_DRIVER_MANA,258};259 260enum ib_uverbs_gid_type {261 IB_UVERBS_GID_TYPE_IB,262 IB_UVERBS_GID_TYPE_ROCE_V1,263 IB_UVERBS_GID_TYPE_ROCE_V2,264};265 266struct ib_uverbs_gid_entry {267 __aligned_u64 gid[2];268 __u32 gid_index;269 __u32 port_num;270 __u32 gid_type;271 __u32 netdev_ifindex; /* It is 0 if there is no netdev associated with it */272};273 274#endif275