xref: /freebsd/sys/ofed/include/uapi/rdma/mlx5-abi.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
109938b21SHans Petter Selasky /*-
209938b21SHans Petter Selasky  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
309938b21SHans Petter Selasky  *
4478d3005SHans Petter Selasky  * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved.
5478d3005SHans Petter Selasky  *
6478d3005SHans Petter Selasky  * This software is available to you under a choice of one of two
7478d3005SHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
8478d3005SHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
9478d3005SHans Petter Selasky  * COPYING in the main directory of this source tree, or the
10478d3005SHans Petter Selasky  * OpenIB.org BSD license below:
11478d3005SHans Petter Selasky  *
12478d3005SHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
13478d3005SHans Petter Selasky  *     without modification, are permitted provided that the following
14478d3005SHans Petter Selasky  *     conditions are met:
15478d3005SHans Petter Selasky  *
16478d3005SHans Petter Selasky  *      - Redistributions of source code must retain the above
17478d3005SHans Petter Selasky  *        copyright notice, this list of conditions and the following
18478d3005SHans Petter Selasky  *        disclaimer.
19478d3005SHans Petter Selasky  *
20478d3005SHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
21478d3005SHans Petter Selasky  *        copyright notice, this list of conditions and the following
22478d3005SHans Petter Selasky  *        disclaimer in the documentation and/or other materials
23478d3005SHans Petter Selasky  *        provided with the distribution.
24478d3005SHans Petter Selasky  *
25478d3005SHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26478d3005SHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27478d3005SHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28478d3005SHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29478d3005SHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30478d3005SHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31478d3005SHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32478d3005SHans Petter Selasky  * SOFTWARE.
33478d3005SHans Petter Selasky  */
34478d3005SHans Petter Selasky 
35478d3005SHans Petter Selasky #ifndef MLX5_ABI_USER_H
36478d3005SHans Petter Selasky #define MLX5_ABI_USER_H
37478d3005SHans Petter Selasky 
38c19d6504SHans Petter Selasky #ifdef _KERNEL
39478d3005SHans Petter Selasky #include <linux/types.h>
40c19d6504SHans Petter Selasky #else
41c19d6504SHans Petter Selasky #include <infiniband/types.h>
42c19d6504SHans Petter Selasky #endif
43478d3005SHans Petter Selasky 
44478d3005SHans Petter Selasky enum {
45478d3005SHans Petter Selasky 	MLX5_QP_FLAG_SIGNATURE		= 1 << 0,
46478d3005SHans Petter Selasky 	MLX5_QP_FLAG_SCATTER_CQE	= 1 << 1,
47f8f5b459SHans Petter Selasky 	MLX5_QP_FLAG_BFREG_INDEX	= 1 << 3,
48f8f5b459SHans Petter Selasky 	MLX5_QP_FLAG_UAR_PAGE_INDEX     = 1 << 10,
49478d3005SHans Petter Selasky };
50478d3005SHans Petter Selasky 
51478d3005SHans Petter Selasky enum {
52478d3005SHans Petter Selasky 	MLX5_SRQ_FLAG_SIGNATURE		= 1 << 0,
53478d3005SHans Petter Selasky };
54478d3005SHans Petter Selasky 
55478d3005SHans Petter Selasky enum {
56478d3005SHans Petter Selasky 	MLX5_WQ_FLAG_SIGNATURE		= 1 << 0,
57478d3005SHans Petter Selasky };
58478d3005SHans Petter Selasky 
59478d3005SHans Petter Selasky /* Increment this value if any changes that break userspace ABI
60478d3005SHans Petter Selasky  * compatibility are made.
61478d3005SHans Petter Selasky  */
62478d3005SHans Petter Selasky #define MLX5_IB_UVERBS_ABI_VERSION	1
63478d3005SHans Petter Selasky 
64478d3005SHans Petter Selasky /* Make sure that all structs defined in this file remain laid out so
65478d3005SHans Petter Selasky  * that they pack the same way on 32-bit and 64-bit architectures (to
66478d3005SHans Petter Selasky  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
67478d3005SHans Petter Selasky  * In particular do not use pointer types -- pass pointers in __u64
68478d3005SHans Petter Selasky  * instead.
69478d3005SHans Petter Selasky  */
70478d3005SHans Petter Selasky 
71478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req {
72f8f5b459SHans Petter Selasky 	__u32	total_num_bfregs;
73f8f5b459SHans Petter Selasky 	__u32	num_low_latency_bfregs;
74478d3005SHans Petter Selasky };
75478d3005SHans Petter Selasky 
76f8f5b459SHans Petter Selasky enum mlx5_lib_caps {
77f8f5b459SHans Petter Selasky 	MLX5_LIB_CAP_4K_UAR	= (__u64)1 << 0,
78f8f5b459SHans Petter Selasky 	MLX5_LIB_CAP_DYN_UAR	= (__u64)1 << 1,
79f8f5b459SHans Petter Selasky };
80f8f5b459SHans Petter Selasky 
81f8f5b459SHans Petter Selasky enum mlx5_ib_alloc_uctx_v2_flags {
82f8f5b459SHans Petter Selasky 	MLX5_IB_ALLOC_UCTX_DEVX	= 1 << 0,
83f8f5b459SHans Petter Selasky };
84478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req_v2 {
85f8f5b459SHans Petter Selasky 	__u32	total_num_bfregs;
86f8f5b459SHans Petter Selasky 	__u32	num_low_latency_bfregs;
87478d3005SHans Petter Selasky 	__u32	flags;
88478d3005SHans Petter Selasky 	__u32	comp_mask;
89478d3005SHans Petter Selasky 	__u8	max_cqe_version;
90478d3005SHans Petter Selasky 	__u8	reserved0;
91478d3005SHans Petter Selasky 	__u16	reserved1;
92478d3005SHans Petter Selasky 	__u32	reserved2;
93f8f5b459SHans Petter Selasky 	__aligned_u64 lib_caps;
94478d3005SHans Petter Selasky };
95478d3005SHans Petter Selasky 
96478d3005SHans Petter Selasky enum mlx5_ib_alloc_ucontext_resp_mask {
97478d3005SHans Petter Selasky 	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
98478d3005SHans Petter Selasky };
99478d3005SHans Petter Selasky 
100478d3005SHans Petter Selasky enum mlx5_user_cmds_supp_uhw {
101478d3005SHans Petter Selasky 	MLX5_USER_CMDS_SUPP_UHW_QUERY_DEVICE = 1 << 0,
1021456d97cSHans Petter Selasky 	MLX5_USER_CMDS_SUPP_UHW_CREATE_AH    = 1 << 1,
103478d3005SHans Petter Selasky };
104478d3005SHans Petter Selasky 
105478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_resp {
106478d3005SHans Petter Selasky 	__u32	qp_tab_size;
107478d3005SHans Petter Selasky 	__u32	bf_reg_size;
108f8f5b459SHans Petter Selasky 	__u32	tot_bfregs;
109478d3005SHans Petter Selasky 	__u32	cache_line_size;
110478d3005SHans Petter Selasky 	__u16	max_sq_desc_sz;
111478d3005SHans Petter Selasky 	__u16	max_rq_desc_sz;
112478d3005SHans Petter Selasky 	__u32	max_send_wqebb;
113478d3005SHans Petter Selasky 	__u32	max_recv_wr;
114478d3005SHans Petter Selasky 	__u32	max_srq_recv_wr;
115478d3005SHans Petter Selasky 	__u16	num_ports;
116478d3005SHans Petter Selasky 	__u16	reserved1;
117478d3005SHans Petter Selasky 	__u32	comp_mask;
118478d3005SHans Petter Selasky 	__u32	response_length;
119478d3005SHans Petter Selasky 	__u8	cqe_version;
120478d3005SHans Petter Selasky 	__u8	cmds_supp_uhw;
121478d3005SHans Petter Selasky 	__u16	reserved2;
122478d3005SHans Petter Selasky 	__u64	hca_core_clock_offset;
123f8f5b459SHans Petter Selasky 	__u32	log_uar_size;
124f8f5b459SHans Petter Selasky 	__u32	num_uars_per_page;
125f8f5b459SHans Petter Selasky 	__u32	num_dyn_bfregs;
126478d3005SHans Petter Selasky };
127478d3005SHans Petter Selasky 
128478d3005SHans Petter Selasky struct mlx5_ib_alloc_pd_resp {
129478d3005SHans Petter Selasky 	__u32	pdn;
130478d3005SHans Petter Selasky };
131478d3005SHans Petter Selasky 
132478d3005SHans Petter Selasky struct mlx5_ib_tso_caps {
133478d3005SHans Petter Selasky 	__u32 max_tso; /* Maximum tso payload size in bytes */
134478d3005SHans Petter Selasky 
135478d3005SHans Petter Selasky 	/* Corresponding bit will be set if qp type from
136478d3005SHans Petter Selasky 	 * 'enum ib_qp_type' is supported, e.g.
137478d3005SHans Petter Selasky 	 * supported_qpts |= 1 << IB_QPT_UD
138478d3005SHans Petter Selasky 	 */
139478d3005SHans Petter Selasky 	__u32 supported_qpts;
140478d3005SHans Petter Selasky };
141478d3005SHans Petter Selasky 
142478d3005SHans Petter Selasky struct mlx5_ib_rss_caps {
143478d3005SHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */
144478d3005SHans Petter Selasky 	__u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */
145478d3005SHans Petter Selasky 	__u8 reserved[7];
146478d3005SHans Petter Selasky };
147478d3005SHans Petter Selasky 
148478d3005SHans Petter Selasky struct mlx5_ib_query_device_resp {
149478d3005SHans Petter Selasky 	__u32	comp_mask;
150478d3005SHans Petter Selasky 	__u32	response_length;
151478d3005SHans Petter Selasky 	struct	mlx5_ib_tso_caps tso_caps;
152478d3005SHans Petter Selasky 	struct	mlx5_ib_rss_caps rss_caps;
153478d3005SHans Petter Selasky };
154478d3005SHans Petter Selasky 
155f8f5b459SHans Petter Selasky enum mlx5_ib_create_cq_flags {
156f8f5b459SHans Petter Selasky 	MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD	= 1 << 0,
157f8f5b459SHans Petter Selasky 	MLX5_IB_CREATE_CQ_FLAGS_UAR_PAGE_INDEX  = 1 << 1,
158f8f5b459SHans Petter Selasky };
159f8f5b459SHans Petter Selasky 
160478d3005SHans Petter Selasky struct mlx5_ib_create_cq {
161478d3005SHans Petter Selasky 	__u64	buf_addr;
162478d3005SHans Petter Selasky 	__u64	db_addr;
163478d3005SHans Petter Selasky 	__u32	cqe_size;
164f8f5b459SHans Petter Selasky 	__u16	flags;
165f8f5b459SHans Petter Selasky 	__u16	uar_page_index;
166478d3005SHans Petter Selasky };
167478d3005SHans Petter Selasky 
168478d3005SHans Petter Selasky struct mlx5_ib_create_cq_resp {
169478d3005SHans Petter Selasky 	__u32	cqn;
170478d3005SHans Petter Selasky 	__u32	reserved;
171478d3005SHans Petter Selasky };
172478d3005SHans Petter Selasky 
173478d3005SHans Petter Selasky struct mlx5_ib_resize_cq {
174478d3005SHans Petter Selasky 	__u64	buf_addr;
175478d3005SHans Petter Selasky 	__u16	cqe_size;
176478d3005SHans Petter Selasky 	__u16	reserved0;
177478d3005SHans Petter Selasky 	__u32	reserved1;
178478d3005SHans Petter Selasky };
179478d3005SHans Petter Selasky 
180478d3005SHans Petter Selasky struct mlx5_ib_create_srq {
181478d3005SHans Petter Selasky 	__u64	buf_addr;
182478d3005SHans Petter Selasky 	__u64	db_addr;
183478d3005SHans Petter Selasky 	__u32	flags;
184478d3005SHans Petter Selasky 	__u32	reserved0; /* explicit padding (optional on i386) */
185478d3005SHans Petter Selasky 	__u32	uidx;
186478d3005SHans Petter Selasky 	__u32	reserved1;
187478d3005SHans Petter Selasky };
188478d3005SHans Petter Selasky 
189478d3005SHans Petter Selasky struct mlx5_ib_create_srq_resp {
190478d3005SHans Petter Selasky 	__u32	srqn;
191478d3005SHans Petter Selasky 	__u32	reserved;
192478d3005SHans Petter Selasky };
193478d3005SHans Petter Selasky 
194478d3005SHans Petter Selasky struct mlx5_ib_create_qp {
195478d3005SHans Petter Selasky 	__u64	buf_addr;
196478d3005SHans Petter Selasky 	__u64	db_addr;
197478d3005SHans Petter Selasky 	__u32	sq_wqe_count;
198478d3005SHans Petter Selasky 	__u32	rq_wqe_count;
199478d3005SHans Petter Selasky 	__u32	rq_wqe_shift;
200478d3005SHans Petter Selasky 	__u32	flags;
201478d3005SHans Petter Selasky 	__u32	uidx;
202f8f5b459SHans Petter Selasky 	__u32	bfreg_index;
203478d3005SHans Petter Selasky 	__u64	sq_buf_addr;
204478d3005SHans Petter Selasky };
205478d3005SHans Petter Selasky 
206478d3005SHans Petter Selasky /* RX Hash function flags */
207478d3005SHans Petter Selasky enum mlx5_rx_hash_function_flags {
208478d3005SHans Petter Selasky 	MLX5_RX_HASH_FUNC_TOEPLITZ	= 1 << 0,
209478d3005SHans Petter Selasky };
210478d3005SHans Petter Selasky 
211478d3005SHans Petter Selasky /*
212478d3005SHans Petter Selasky  * RX Hash flags, these flags allows to set which incoming packet's field should
213478d3005SHans Petter Selasky  * participates in RX Hash. Each flag represent certain packet's field,
214478d3005SHans Petter Selasky  * when the flag is set the field that is represented by the flag will
215478d3005SHans Petter Selasky  * participate in RX Hash calculation.
216478d3005SHans Petter Selasky  * Note: *IPV4 and *IPV6 flags can't be enabled together on the same QP
217478d3005SHans Petter Selasky  * and *TCP and *UDP flags can't be enabled together on the same QP.
218478d3005SHans Petter Selasky */
219478d3005SHans Petter Selasky enum mlx5_rx_hash_fields {
220478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_IPV4	= 1 << 0,
221478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_IPV4	= 1 << 1,
222478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_IPV6	= 1 << 2,
223478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_IPV6	= 1 << 3,
224478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_PORT_TCP	= 1 << 4,
225478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_PORT_TCP	= 1 << 5,
226478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_PORT_UDP	= 1 << 6,
227478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_PORT_UDP	= 1 << 7
228478d3005SHans Petter Selasky };
229478d3005SHans Petter Selasky 
230478d3005SHans Petter Selasky struct mlx5_ib_create_qp_rss {
231478d3005SHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */
232478d3005SHans Petter Selasky 	__u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */
233478d3005SHans Petter Selasky 	__u8 rx_key_len; /* valid only for Toeplitz */
234478d3005SHans Petter Selasky 	__u8 reserved[6];
235478d3005SHans Petter Selasky 	__u8 rx_hash_key[128]; /* valid only for Toeplitz */
236478d3005SHans Petter Selasky 	__u32   comp_mask;
237478d3005SHans Petter Selasky 	__u32   reserved1;
238478d3005SHans Petter Selasky };
239478d3005SHans Petter Selasky 
240478d3005SHans Petter Selasky struct mlx5_ib_create_qp_resp {
241f8f5b459SHans Petter Selasky 	__u32	bfreg_index;
242478d3005SHans Petter Selasky };
243478d3005SHans Petter Selasky 
244478d3005SHans Petter Selasky struct mlx5_ib_alloc_mw {
245478d3005SHans Petter Selasky 	__u32	comp_mask;
246478d3005SHans Petter Selasky 	__u8	num_klms;
247478d3005SHans Petter Selasky 	__u8	reserved1;
248478d3005SHans Petter Selasky 	__u16	reserved2;
249478d3005SHans Petter Selasky };
250478d3005SHans Petter Selasky 
251478d3005SHans Petter Selasky struct mlx5_ib_create_wq {
252478d3005SHans Petter Selasky 	__u64   buf_addr;
253478d3005SHans Petter Selasky 	__u64   db_addr;
254478d3005SHans Petter Selasky 	__u32   rq_wqe_count;
255478d3005SHans Petter Selasky 	__u32   rq_wqe_shift;
256478d3005SHans Petter Selasky 	__u32   user_index;
257478d3005SHans Petter Selasky 	__u32   flags;
258478d3005SHans Petter Selasky 	__u32   comp_mask;
259478d3005SHans Petter Selasky 	__u32   reserved;
260478d3005SHans Petter Selasky };
261478d3005SHans Petter Selasky 
2621456d97cSHans Petter Selasky struct mlx5_ib_create_ah_resp {
2631456d97cSHans Petter Selasky 	__u32	response_length;
2641456d97cSHans Petter Selasky 	__u8	dmac[ETH_ALEN];
2651456d97cSHans Petter Selasky 	__u8	reserved[6];
2661456d97cSHans Petter Selasky };
2671456d97cSHans Petter Selasky 
268478d3005SHans Petter Selasky struct mlx5_ib_create_wq_resp {
269478d3005SHans Petter Selasky 	__u32	response_length;
270478d3005SHans Petter Selasky 	__u32	reserved;
271478d3005SHans Petter Selasky };
272478d3005SHans Petter Selasky 
273478d3005SHans Petter Selasky struct mlx5_ib_create_rwq_ind_tbl_resp {
274478d3005SHans Petter Selasky 	__u32	response_length;
275478d3005SHans Petter Selasky 	__u32	reserved;
276478d3005SHans Petter Selasky };
277478d3005SHans Petter Selasky 
278478d3005SHans Petter Selasky struct mlx5_ib_modify_wq {
279478d3005SHans Petter Selasky 	__u32	comp_mask;
280478d3005SHans Petter Selasky 	__u32	reserved;
281478d3005SHans Petter Selasky };
282b633e08cSHans Petter Selasky 
283b633e08cSHans Petter Selasky enum mlx5_ib_mmap_cmd {
284b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_REGULAR_PAGE               = 0,
285b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES       = 1,
286b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_WC_PAGE                    = 2,
287b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_NC_PAGE                    = 3,
288b633e08cSHans Petter Selasky 	/* 5 is chosen in order to be compatible with old versions of libmlx5 */
289b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_CORE_CLOCK                 = 5,
290b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_ALLOC_WC                   = 6,
291b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_CLOCK_INFO                 = 7,
292b633e08cSHans Petter Selasky 	MLX5_IB_MMAP_DEVICE_MEM                 = 8,
293b633e08cSHans Petter Selasky };
294b633e08cSHans Petter Selasky 
295b633e08cSHans Petter Selasky /* Bit indexes for the mlx5_alloc_ucontext_resp.clock_info_versions bitmap */
296b633e08cSHans Petter Selasky enum {
297b633e08cSHans Petter Selasky 	MLX5_IB_CLOCK_INFO_V1              = 0,
298b633e08cSHans Petter Selasky };
299b633e08cSHans Petter Selasky 
300*a30f7170SHans Petter Selasky struct mlx5_ib_flow_counters_desc {
301*a30f7170SHans Petter Selasky 	__u32	description;
302*a30f7170SHans Petter Selasky 	__u32	index;
303*a30f7170SHans Petter Selasky };
304*a30f7170SHans Petter Selasky 
305*a30f7170SHans Petter Selasky struct mlx5_ib_flow_counters_data {
306*a30f7170SHans Petter Selasky 	RDMA_UAPI_PTR(struct mlx5_ib_flow_counters_desc *, counters_data);
307*a30f7170SHans Petter Selasky 	__u32   ncounters;
308*a30f7170SHans Petter Selasky 	__u32   reserved;
309*a30f7170SHans Petter Selasky };
310*a30f7170SHans Petter Selasky 
311*a30f7170SHans Petter Selasky struct mlx5_ib_create_flow {
312*a30f7170SHans Petter Selasky 	__u32   ncounters_data;
313*a30f7170SHans Petter Selasky 	__u32   reserved;
314*a30f7170SHans Petter Selasky 	/*
315*a30f7170SHans Petter Selasky 	 * Following are counters data based on ncounters_data, each
316*a30f7170SHans Petter Selasky 	 * entry in the data[] should match a corresponding counter object
317*a30f7170SHans Petter Selasky 	 * that was pointed by a counters spec upon the flow creation
318*a30f7170SHans Petter Selasky 	 */
319*a30f7170SHans Petter Selasky 	struct mlx5_ib_flow_counters_data data[];
320*a30f7170SHans Petter Selasky };
321*a30f7170SHans Petter Selasky 
322478d3005SHans Petter Selasky #endif /* MLX5_ABI_USER_H */
323