xref: /freebsd/sys/ofed/include/uapi/rdma/mlx5-abi.h (revision f8f5b459d21ec9dd1ca5d9de319d8b440fef84a8)
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.
3309938b21SHans Petter Selasky  *
3409938b21SHans Petter Selasky  * $FreeBSD$
35478d3005SHans Petter Selasky  */
36478d3005SHans Petter Selasky 
37478d3005SHans Petter Selasky #ifndef MLX5_ABI_USER_H
38478d3005SHans Petter Selasky #define MLX5_ABI_USER_H
39478d3005SHans Petter Selasky 
40c19d6504SHans Petter Selasky #ifdef _KERNEL
41478d3005SHans Petter Selasky #include <linux/types.h>
42c19d6504SHans Petter Selasky #else
43c19d6504SHans Petter Selasky #include <infiniband/types.h>
44c19d6504SHans Petter Selasky #endif
45478d3005SHans Petter Selasky 
46478d3005SHans Petter Selasky enum {
47478d3005SHans Petter Selasky 	MLX5_QP_FLAG_SIGNATURE		= 1 << 0,
48478d3005SHans Petter Selasky 	MLX5_QP_FLAG_SCATTER_CQE	= 1 << 1,
49*f8f5b459SHans Petter Selasky 	MLX5_QP_FLAG_BFREG_INDEX	= 1 << 3,
50*f8f5b459SHans Petter Selasky 	MLX5_QP_FLAG_UAR_PAGE_INDEX     = 1 << 10,
51478d3005SHans Petter Selasky };
52478d3005SHans Petter Selasky 
53478d3005SHans Petter Selasky enum {
54478d3005SHans Petter Selasky 	MLX5_SRQ_FLAG_SIGNATURE		= 1 << 0,
55478d3005SHans Petter Selasky };
56478d3005SHans Petter Selasky 
57478d3005SHans Petter Selasky enum {
58478d3005SHans Petter Selasky 	MLX5_WQ_FLAG_SIGNATURE		= 1 << 0,
59478d3005SHans Petter Selasky };
60478d3005SHans Petter Selasky 
61478d3005SHans Petter Selasky /* Increment this value if any changes that break userspace ABI
62478d3005SHans Petter Selasky  * compatibility are made.
63478d3005SHans Petter Selasky  */
64478d3005SHans Petter Selasky #define MLX5_IB_UVERBS_ABI_VERSION	1
65478d3005SHans Petter Selasky 
66478d3005SHans Petter Selasky /* Make sure that all structs defined in this file remain laid out so
67478d3005SHans Petter Selasky  * that they pack the same way on 32-bit and 64-bit architectures (to
68478d3005SHans Petter Selasky  * avoid incompatibility between 32-bit userspace and 64-bit kernels).
69478d3005SHans Petter Selasky  * In particular do not use pointer types -- pass pointers in __u64
70478d3005SHans Petter Selasky  * instead.
71478d3005SHans Petter Selasky  */
72478d3005SHans Petter Selasky 
73478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req {
74*f8f5b459SHans Petter Selasky 	__u32	total_num_bfregs;
75*f8f5b459SHans Petter Selasky 	__u32	num_low_latency_bfregs;
76478d3005SHans Petter Selasky };
77478d3005SHans Petter Selasky 
78*f8f5b459SHans Petter Selasky enum mlx5_lib_caps {
79*f8f5b459SHans Petter Selasky 	MLX5_LIB_CAP_4K_UAR	= (__u64)1 << 0,
80*f8f5b459SHans Petter Selasky 	MLX5_LIB_CAP_DYN_UAR	= (__u64)1 << 1,
81*f8f5b459SHans Petter Selasky };
82*f8f5b459SHans Petter Selasky 
83*f8f5b459SHans Petter Selasky enum mlx5_ib_alloc_uctx_v2_flags {
84*f8f5b459SHans Petter Selasky 	MLX5_IB_ALLOC_UCTX_DEVX	= 1 << 0,
85*f8f5b459SHans Petter Selasky };
86478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req_v2 {
87*f8f5b459SHans Petter Selasky 	__u32	total_num_bfregs;
88*f8f5b459SHans Petter Selasky 	__u32	num_low_latency_bfregs;
89478d3005SHans Petter Selasky 	__u32	flags;
90478d3005SHans Petter Selasky 	__u32	comp_mask;
91478d3005SHans Petter Selasky 	__u8	max_cqe_version;
92478d3005SHans Petter Selasky 	__u8	reserved0;
93478d3005SHans Petter Selasky 	__u16	reserved1;
94478d3005SHans Petter Selasky 	__u32	reserved2;
95*f8f5b459SHans Petter Selasky 	__aligned_u64 lib_caps;
96478d3005SHans Petter Selasky };
97478d3005SHans Petter Selasky 
98478d3005SHans Petter Selasky enum mlx5_ib_alloc_ucontext_resp_mask {
99478d3005SHans Petter Selasky 	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
100478d3005SHans Petter Selasky };
101478d3005SHans Petter Selasky 
102478d3005SHans Petter Selasky enum mlx5_user_cmds_supp_uhw {
103478d3005SHans Petter Selasky 	MLX5_USER_CMDS_SUPP_UHW_QUERY_DEVICE = 1 << 0,
1041456d97cSHans Petter Selasky 	MLX5_USER_CMDS_SUPP_UHW_CREATE_AH    = 1 << 1,
105478d3005SHans Petter Selasky };
106478d3005SHans Petter Selasky 
107478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_resp {
108478d3005SHans Petter Selasky 	__u32	qp_tab_size;
109478d3005SHans Petter Selasky 	__u32	bf_reg_size;
110*f8f5b459SHans Petter Selasky 	__u32	tot_bfregs;
111478d3005SHans Petter Selasky 	__u32	cache_line_size;
112478d3005SHans Petter Selasky 	__u16	max_sq_desc_sz;
113478d3005SHans Petter Selasky 	__u16	max_rq_desc_sz;
114478d3005SHans Petter Selasky 	__u32	max_send_wqebb;
115478d3005SHans Petter Selasky 	__u32	max_recv_wr;
116478d3005SHans Petter Selasky 	__u32	max_srq_recv_wr;
117478d3005SHans Petter Selasky 	__u16	num_ports;
118478d3005SHans Petter Selasky 	__u16	reserved1;
119478d3005SHans Petter Selasky 	__u32	comp_mask;
120478d3005SHans Petter Selasky 	__u32	response_length;
121478d3005SHans Petter Selasky 	__u8	cqe_version;
122478d3005SHans Petter Selasky 	__u8	cmds_supp_uhw;
123478d3005SHans Petter Selasky 	__u16	reserved2;
124478d3005SHans Petter Selasky 	__u64	hca_core_clock_offset;
125*f8f5b459SHans Petter Selasky 	__u32	log_uar_size;
126*f8f5b459SHans Petter Selasky 	__u32	num_uars_per_page;
127*f8f5b459SHans Petter Selasky 	__u32	num_dyn_bfregs;
128478d3005SHans Petter Selasky };
129478d3005SHans Petter Selasky 
130478d3005SHans Petter Selasky struct mlx5_ib_alloc_pd_resp {
131478d3005SHans Petter Selasky 	__u32	pdn;
132478d3005SHans Petter Selasky };
133478d3005SHans Petter Selasky 
134478d3005SHans Petter Selasky struct mlx5_ib_tso_caps {
135478d3005SHans Petter Selasky 	__u32 max_tso; /* Maximum tso payload size in bytes */
136478d3005SHans Petter Selasky 
137478d3005SHans Petter Selasky 	/* Corresponding bit will be set if qp type from
138478d3005SHans Petter Selasky 	 * 'enum ib_qp_type' is supported, e.g.
139478d3005SHans Petter Selasky 	 * supported_qpts |= 1 << IB_QPT_UD
140478d3005SHans Petter Selasky 	 */
141478d3005SHans Petter Selasky 	__u32 supported_qpts;
142478d3005SHans Petter Selasky };
143478d3005SHans Petter Selasky 
144478d3005SHans Petter Selasky struct mlx5_ib_rss_caps {
145478d3005SHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */
146478d3005SHans Petter Selasky 	__u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */
147478d3005SHans Petter Selasky 	__u8 reserved[7];
148478d3005SHans Petter Selasky };
149478d3005SHans Petter Selasky 
150478d3005SHans Petter Selasky struct mlx5_ib_query_device_resp {
151478d3005SHans Petter Selasky 	__u32	comp_mask;
152478d3005SHans Petter Selasky 	__u32	response_length;
153478d3005SHans Petter Selasky 	struct	mlx5_ib_tso_caps tso_caps;
154478d3005SHans Petter Selasky 	struct	mlx5_ib_rss_caps rss_caps;
155478d3005SHans Petter Selasky };
156478d3005SHans Petter Selasky 
157*f8f5b459SHans Petter Selasky enum mlx5_ib_create_cq_flags {
158*f8f5b459SHans Petter Selasky 	MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD	= 1 << 0,
159*f8f5b459SHans Petter Selasky 	MLX5_IB_CREATE_CQ_FLAGS_UAR_PAGE_INDEX  = 1 << 1,
160*f8f5b459SHans Petter Selasky };
161*f8f5b459SHans Petter Selasky 
162478d3005SHans Petter Selasky struct mlx5_ib_create_cq {
163478d3005SHans Petter Selasky 	__u64	buf_addr;
164478d3005SHans Petter Selasky 	__u64	db_addr;
165478d3005SHans Petter Selasky 	__u32	cqe_size;
166*f8f5b459SHans Petter Selasky 	__u16	flags;
167*f8f5b459SHans Petter Selasky 	__u16	uar_page_index;
168478d3005SHans Petter Selasky };
169478d3005SHans Petter Selasky 
170478d3005SHans Petter Selasky struct mlx5_ib_create_cq_resp {
171478d3005SHans Petter Selasky 	__u32	cqn;
172478d3005SHans Petter Selasky 	__u32	reserved;
173478d3005SHans Petter Selasky };
174478d3005SHans Petter Selasky 
175478d3005SHans Petter Selasky struct mlx5_ib_resize_cq {
176478d3005SHans Petter Selasky 	__u64	buf_addr;
177478d3005SHans Petter Selasky 	__u16	cqe_size;
178478d3005SHans Petter Selasky 	__u16	reserved0;
179478d3005SHans Petter Selasky 	__u32	reserved1;
180478d3005SHans Petter Selasky };
181478d3005SHans Petter Selasky 
182478d3005SHans Petter Selasky struct mlx5_ib_create_srq {
183478d3005SHans Petter Selasky 	__u64	buf_addr;
184478d3005SHans Petter Selasky 	__u64	db_addr;
185478d3005SHans Petter Selasky 	__u32	flags;
186478d3005SHans Petter Selasky 	__u32	reserved0; /* explicit padding (optional on i386) */
187478d3005SHans Petter Selasky 	__u32	uidx;
188478d3005SHans Petter Selasky 	__u32	reserved1;
189478d3005SHans Petter Selasky };
190478d3005SHans Petter Selasky 
191478d3005SHans Petter Selasky struct mlx5_ib_create_srq_resp {
192478d3005SHans Petter Selasky 	__u32	srqn;
193478d3005SHans Petter Selasky 	__u32	reserved;
194478d3005SHans Petter Selasky };
195478d3005SHans Petter Selasky 
196478d3005SHans Petter Selasky struct mlx5_ib_create_qp {
197478d3005SHans Petter Selasky 	__u64	buf_addr;
198478d3005SHans Petter Selasky 	__u64	db_addr;
199478d3005SHans Petter Selasky 	__u32	sq_wqe_count;
200478d3005SHans Petter Selasky 	__u32	rq_wqe_count;
201478d3005SHans Petter Selasky 	__u32	rq_wqe_shift;
202478d3005SHans Petter Selasky 	__u32	flags;
203478d3005SHans Petter Selasky 	__u32	uidx;
204*f8f5b459SHans Petter Selasky 	__u32	bfreg_index;
205478d3005SHans Petter Selasky 	__u64	sq_buf_addr;
206478d3005SHans Petter Selasky };
207478d3005SHans Petter Selasky 
208478d3005SHans Petter Selasky /* RX Hash function flags */
209478d3005SHans Petter Selasky enum mlx5_rx_hash_function_flags {
210478d3005SHans Petter Selasky 	MLX5_RX_HASH_FUNC_TOEPLITZ	= 1 << 0,
211478d3005SHans Petter Selasky };
212478d3005SHans Petter Selasky 
213478d3005SHans Petter Selasky /*
214478d3005SHans Petter Selasky  * RX Hash flags, these flags allows to set which incoming packet's field should
215478d3005SHans Petter Selasky  * participates in RX Hash. Each flag represent certain packet's field,
216478d3005SHans Petter Selasky  * when the flag is set the field that is represented by the flag will
217478d3005SHans Petter Selasky  * participate in RX Hash calculation.
218478d3005SHans Petter Selasky  * Note: *IPV4 and *IPV6 flags can't be enabled together on the same QP
219478d3005SHans Petter Selasky  * and *TCP and *UDP flags can't be enabled together on the same QP.
220478d3005SHans Petter Selasky */
221478d3005SHans Petter Selasky enum mlx5_rx_hash_fields {
222478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_IPV4	= 1 << 0,
223478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_IPV4	= 1 << 1,
224478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_IPV6	= 1 << 2,
225478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_IPV6	= 1 << 3,
226478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_PORT_TCP	= 1 << 4,
227478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_PORT_TCP	= 1 << 5,
228478d3005SHans Petter Selasky 	MLX5_RX_HASH_SRC_PORT_UDP	= 1 << 6,
229478d3005SHans Petter Selasky 	MLX5_RX_HASH_DST_PORT_UDP	= 1 << 7
230478d3005SHans Petter Selasky };
231478d3005SHans Petter Selasky 
232478d3005SHans Petter Selasky struct mlx5_ib_create_qp_rss {
233478d3005SHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */
234478d3005SHans Petter Selasky 	__u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */
235478d3005SHans Petter Selasky 	__u8 rx_key_len; /* valid only for Toeplitz */
236478d3005SHans Petter Selasky 	__u8 reserved[6];
237478d3005SHans Petter Selasky 	__u8 rx_hash_key[128]; /* valid only for Toeplitz */
238478d3005SHans Petter Selasky 	__u32   comp_mask;
239478d3005SHans Petter Selasky 	__u32   reserved1;
240478d3005SHans Petter Selasky };
241478d3005SHans Petter Selasky 
242478d3005SHans Petter Selasky struct mlx5_ib_create_qp_resp {
243*f8f5b459SHans Petter Selasky 	__u32	bfreg_index;
244478d3005SHans Petter Selasky };
245478d3005SHans Petter Selasky 
246478d3005SHans Petter Selasky struct mlx5_ib_alloc_mw {
247478d3005SHans Petter Selasky 	__u32	comp_mask;
248478d3005SHans Petter Selasky 	__u8	num_klms;
249478d3005SHans Petter Selasky 	__u8	reserved1;
250478d3005SHans Petter Selasky 	__u16	reserved2;
251478d3005SHans Petter Selasky };
252478d3005SHans Petter Selasky 
253478d3005SHans Petter Selasky struct mlx5_ib_create_wq {
254478d3005SHans Petter Selasky 	__u64   buf_addr;
255478d3005SHans Petter Selasky 	__u64   db_addr;
256478d3005SHans Petter Selasky 	__u32   rq_wqe_count;
257478d3005SHans Petter Selasky 	__u32   rq_wqe_shift;
258478d3005SHans Petter Selasky 	__u32   user_index;
259478d3005SHans Petter Selasky 	__u32   flags;
260478d3005SHans Petter Selasky 	__u32   comp_mask;
261478d3005SHans Petter Selasky 	__u32   reserved;
262478d3005SHans Petter Selasky };
263478d3005SHans Petter Selasky 
2641456d97cSHans Petter Selasky struct mlx5_ib_create_ah_resp {
2651456d97cSHans Petter Selasky 	__u32	response_length;
2661456d97cSHans Petter Selasky 	__u8	dmac[ETH_ALEN];
2671456d97cSHans Petter Selasky 	__u8	reserved[6];
2681456d97cSHans Petter Selasky };
2691456d97cSHans Petter Selasky 
270478d3005SHans Petter Selasky struct mlx5_ib_create_wq_resp {
271478d3005SHans Petter Selasky 	__u32	response_length;
272478d3005SHans Petter Selasky 	__u32	reserved;
273478d3005SHans Petter Selasky };
274478d3005SHans Petter Selasky 
275478d3005SHans Petter Selasky struct mlx5_ib_create_rwq_ind_tbl_resp {
276478d3005SHans Petter Selasky 	__u32	response_length;
277478d3005SHans Petter Selasky 	__u32	reserved;
278478d3005SHans Petter Selasky };
279478d3005SHans Petter Selasky 
280478d3005SHans Petter Selasky struct mlx5_ib_modify_wq {
281478d3005SHans Petter Selasky 	__u32	comp_mask;
282478d3005SHans Petter Selasky 	__u32	reserved;
283478d3005SHans Petter Selasky };
284478d3005SHans Petter Selasky #endif /* MLX5_ABI_USER_H */
285