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