xref: /freebsd/contrib/ofed/libmlx5/mlx5-abi.h (revision 87181516ef48be852d5e5fee53c6e0dbfc62f21e)
1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky  * Copyright (c) 2012 Mellanox Technologies, Inc.  All rights reserved.
3*d6b92ffaSHans Petter Selasky  *
4*d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
5*d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
6*d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
7*d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
8*d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
9*d6b92ffaSHans Petter Selasky  *
10*d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
11*d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
12*d6b92ffaSHans Petter Selasky  *     conditions are met:
13*d6b92ffaSHans Petter Selasky  *
14*d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
15*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
16*d6b92ffaSHans Petter Selasky  *        disclaimer.
17*d6b92ffaSHans Petter Selasky  *
18*d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
19*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
20*d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
21*d6b92ffaSHans Petter Selasky  *        provided with the distribution.
22*d6b92ffaSHans Petter Selasky  *
23*d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24*d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25*d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26*d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27*d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28*d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29*d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30*d6b92ffaSHans Petter Selasky  * SOFTWARE.
31*d6b92ffaSHans Petter Selasky  */
32*d6b92ffaSHans Petter Selasky 
33*d6b92ffaSHans Petter Selasky #ifndef MLX5_ABI_H
34*d6b92ffaSHans Petter Selasky #define MLX5_ABI_H
35*d6b92ffaSHans Petter Selasky 
36*d6b92ffaSHans Petter Selasky #include <infiniband/kern-abi.h>
37*d6b92ffaSHans Petter Selasky #include <infiniband/verbs.h>
38*d6b92ffaSHans Petter Selasky #include "mlx5dv.h"
39*d6b92ffaSHans Petter Selasky 
40*d6b92ffaSHans Petter Selasky #define MLX5_UVERBS_MIN_ABI_VERSION	1
41*d6b92ffaSHans Petter Selasky #define MLX5_UVERBS_MAX_ABI_VERSION	1
42*d6b92ffaSHans Petter Selasky 
43*d6b92ffaSHans Petter Selasky enum {
44*d6b92ffaSHans Petter Selasky 	MLX5_QP_FLAG_SIGNATURE		= 1 << 0,
45*d6b92ffaSHans Petter Selasky 	MLX5_QP_FLAG_SCATTER_CQE	= 1 << 1,
46*d6b92ffaSHans Petter Selasky };
47*d6b92ffaSHans Petter Selasky 
48*d6b92ffaSHans Petter Selasky enum {
49*d6b92ffaSHans Petter Selasky 	MLX5_RWQ_FLAG_SIGNATURE		= 1 << 0,
50*d6b92ffaSHans Petter Selasky };
51*d6b92ffaSHans Petter Selasky 
52*d6b92ffaSHans Petter Selasky enum {
53*d6b92ffaSHans Petter Selasky 	MLX5_NUM_NON_FP_BFREGS_PER_UAR	= 2,
54*d6b92ffaSHans Petter Selasky 	NUM_BFREGS_PER_UAR		= 4,
55*d6b92ffaSHans Petter Selasky 	MLX5_MAX_UARS			= 1 << 8,
56*d6b92ffaSHans Petter Selasky 	MLX5_MAX_BFREGS			= MLX5_MAX_UARS * MLX5_NUM_NON_FP_BFREGS_PER_UAR,
57*d6b92ffaSHans Petter Selasky 	MLX5_DEF_TOT_UUARS		= 8 * MLX5_NUM_NON_FP_BFREGS_PER_UAR,
58*d6b92ffaSHans Petter Selasky 	MLX5_MED_BFREGS_TSHOLD		= 12,
59*d6b92ffaSHans Petter Selasky };
60*d6b92ffaSHans Petter Selasky 
61*d6b92ffaSHans Petter Selasky enum mlx5_lib_caps {
62*d6b92ffaSHans Petter Selasky 	MLX5_LIB_CAP_4K_UAR		= 1 << 0,
63*d6b92ffaSHans Petter Selasky };
64*d6b92ffaSHans Petter Selasky 
65*d6b92ffaSHans Petter Selasky struct mlx5_alloc_ucontext {
66*d6b92ffaSHans Petter Selasky 	struct ibv_get_context		ibv_req;
67*d6b92ffaSHans Petter Selasky 	__u32				total_num_uuars;
68*d6b92ffaSHans Petter Selasky 	__u32				num_low_latency_uuars;
69*d6b92ffaSHans Petter Selasky 	__u32				flags;
70*d6b92ffaSHans Petter Selasky 	__u32				comp_mask;
71*d6b92ffaSHans Petter Selasky 	__u8				cqe_version;
72*d6b92ffaSHans Petter Selasky 	__u8				reserved0;
73*d6b92ffaSHans Petter Selasky 	__u16				reserved1;
74*d6b92ffaSHans Petter Selasky 	__u32				reserved2;
75*d6b92ffaSHans Petter Selasky 	__u64				lib_caps;
76*d6b92ffaSHans Petter Selasky };
77*d6b92ffaSHans Petter Selasky 
78*d6b92ffaSHans Petter Selasky enum mlx5_ib_alloc_ucontext_resp_mask {
79*d6b92ffaSHans Petter Selasky 	MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
80*d6b92ffaSHans Petter Selasky };
81*d6b92ffaSHans Petter Selasky 
82*d6b92ffaSHans Petter Selasky struct mlx5_alloc_ucontext_resp {
83*d6b92ffaSHans Petter Selasky 	struct ibv_get_context_resp	ibv_resp;
84*d6b92ffaSHans Petter Selasky 	__u32				qp_tab_size;
85*d6b92ffaSHans Petter Selasky 	__u32				bf_reg_size;
86*d6b92ffaSHans Petter Selasky 	__u32				tot_uuars;
87*d6b92ffaSHans Petter Selasky 	__u32				cache_line_size;
88*d6b92ffaSHans Petter Selasky 	__u16				max_sq_desc_sz;
89*d6b92ffaSHans Petter Selasky 	__u16				max_rq_desc_sz;
90*d6b92ffaSHans Petter Selasky 	__u32				max_send_wqebb;
91*d6b92ffaSHans Petter Selasky 	__u32				max_recv_wr;
92*d6b92ffaSHans Petter Selasky 	__u32				max_srq_recv_wr;
93*d6b92ffaSHans Petter Selasky 	__u16				num_ports;
94*d6b92ffaSHans Petter Selasky 	__u16				reserved1;
95*d6b92ffaSHans Petter Selasky 	__u32				comp_mask;
96*d6b92ffaSHans Petter Selasky 	__u32				response_length;
97*d6b92ffaSHans Petter Selasky 	__u8				cqe_version;
98*d6b92ffaSHans Petter Selasky 	__u8				cmds_supp_uhw;
99*d6b92ffaSHans Petter Selasky 	__u16				reserved2;
100*d6b92ffaSHans Petter Selasky 	__u64				hca_core_clock_offset;
101*d6b92ffaSHans Petter Selasky 	__u32				log_uar_size;
102*d6b92ffaSHans Petter Selasky 	__u32				num_uars_per_page;
103*d6b92ffaSHans Petter Selasky };
104*d6b92ffaSHans Petter Selasky 
105*d6b92ffaSHans Petter Selasky struct mlx5_create_ah_resp {
106*d6b92ffaSHans Petter Selasky 	struct ibv_create_ah_resp	ibv_resp;
107*d6b92ffaSHans Petter Selasky 	__u32				response_length;
108*d6b92ffaSHans Petter Selasky 	__u8				dmac[ETHERNET_LL_SIZE];
109*d6b92ffaSHans Petter Selasky 	__u8				reserved[6];
110*d6b92ffaSHans Petter Selasky };
111*d6b92ffaSHans Petter Selasky 
112*d6b92ffaSHans Petter Selasky struct mlx5_alloc_pd_resp {
113*d6b92ffaSHans Petter Selasky 	struct ibv_alloc_pd_resp	ibv_resp;
114*d6b92ffaSHans Petter Selasky 	__u32				pdn;
115*d6b92ffaSHans Petter Selasky };
116*d6b92ffaSHans Petter Selasky 
117*d6b92ffaSHans Petter Selasky struct mlx5_create_cq {
118*d6b92ffaSHans Petter Selasky 	struct ibv_create_cq		ibv_cmd;
119*d6b92ffaSHans Petter Selasky 	__u64				buf_addr;
120*d6b92ffaSHans Petter Selasky 	__u64				db_addr;
121*d6b92ffaSHans Petter Selasky 	__u32				cqe_size;
122*d6b92ffaSHans Petter Selasky 	__u8                            cqe_comp_en;
123*d6b92ffaSHans Petter Selasky 	__u8                            cqe_comp_res_format;
124*d6b92ffaSHans Petter Selasky 	__u16                           reserved;
125*d6b92ffaSHans Petter Selasky };
126*d6b92ffaSHans Petter Selasky 
127*d6b92ffaSHans Petter Selasky struct mlx5_create_cq_resp {
128*d6b92ffaSHans Petter Selasky 	struct ibv_create_cq_resp	ibv_resp;
129*d6b92ffaSHans Petter Selasky 	__u32				cqn;
130*d6b92ffaSHans Petter Selasky };
131*d6b92ffaSHans Petter Selasky 
132*d6b92ffaSHans Petter Selasky struct mlx5_create_srq {
133*d6b92ffaSHans Petter Selasky 	struct ibv_create_srq		ibv_cmd;
134*d6b92ffaSHans Petter Selasky 	__u64				buf_addr;
135*d6b92ffaSHans Petter Selasky 	__u64				db_addr;
136*d6b92ffaSHans Petter Selasky 	__u32				flags;
137*d6b92ffaSHans Petter Selasky };
138*d6b92ffaSHans Petter Selasky 
139*d6b92ffaSHans Petter Selasky struct mlx5_create_srq_resp {
140*d6b92ffaSHans Petter Selasky 	struct ibv_create_srq_resp	ibv_resp;
141*d6b92ffaSHans Petter Selasky 	__u32				srqn;
142*d6b92ffaSHans Petter Selasky 	__u32				reserved;
143*d6b92ffaSHans Petter Selasky };
144*d6b92ffaSHans Petter Selasky 
145*d6b92ffaSHans Petter Selasky struct mlx5_create_srq_ex {
146*d6b92ffaSHans Petter Selasky 	struct ibv_create_xsrq		ibv_cmd;
147*d6b92ffaSHans Petter Selasky 	__u64				buf_addr;
148*d6b92ffaSHans Petter Selasky 	__u64				db_addr;
149*d6b92ffaSHans Petter Selasky 	__u32				flags;
150*d6b92ffaSHans Petter Selasky 	__u32				reserved;
151*d6b92ffaSHans Petter Selasky 	__u32                           uidx;
152*d6b92ffaSHans Petter Selasky 	__u32                           reserved1;
153*d6b92ffaSHans Petter Selasky };
154*d6b92ffaSHans Petter Selasky 
155*d6b92ffaSHans Petter Selasky struct mlx5_create_qp_drv_ex {
156*d6b92ffaSHans Petter Selasky 	__u64			buf_addr;
157*d6b92ffaSHans Petter Selasky 	__u64			db_addr;
158*d6b92ffaSHans Petter Selasky 	__u32			sq_wqe_count;
159*d6b92ffaSHans Petter Selasky 	__u32			rq_wqe_count;
160*d6b92ffaSHans Petter Selasky 	__u32			rq_wqe_shift;
161*d6b92ffaSHans Petter Selasky 	__u32			flags;
162*d6b92ffaSHans Petter Selasky 	__u32			uidx;
163*d6b92ffaSHans Petter Selasky 	__u32			reserved;
164*d6b92ffaSHans Petter Selasky 	/* SQ buffer address - used for Raw Packet QP */
165*d6b92ffaSHans Petter Selasky 	__u64			sq_buf_addr;
166*d6b92ffaSHans Petter Selasky };
167*d6b92ffaSHans Petter Selasky 
168*d6b92ffaSHans Petter Selasky struct mlx5_create_qp_ex {
169*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_ex	ibv_cmd;
170*d6b92ffaSHans Petter Selasky 	struct mlx5_create_qp_drv_ex drv_ex;
171*d6b92ffaSHans Petter Selasky };
172*d6b92ffaSHans Petter Selasky 
173*d6b92ffaSHans Petter Selasky struct mlx5_create_qp_ex_rss {
174*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_ex	ibv_cmd;
175*d6b92ffaSHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum ibv_rx_hash_fields */
176*d6b92ffaSHans Petter Selasky 	__u8 rx_hash_function; /* enum ibv_rx_hash_function_flags */
177*d6b92ffaSHans Petter Selasky 	__u8 rx_key_len;
178*d6b92ffaSHans Petter Selasky 	__u8 reserved[6];
179*d6b92ffaSHans Petter Selasky 	__u8 rx_hash_key[128];
180*d6b92ffaSHans Petter Selasky 	__u32   comp_mask;
181*d6b92ffaSHans Petter Selasky 	__u32   reserved1;
182*d6b92ffaSHans Petter Selasky };
183*d6b92ffaSHans Petter Selasky 
184*d6b92ffaSHans Petter Selasky struct mlx5_create_qp_resp_ex {
185*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_resp_ex	ibv_resp;
186*d6b92ffaSHans Petter Selasky 	__u32				uuar_index;
187*d6b92ffaSHans Petter Selasky 	__u32				reserved;
188*d6b92ffaSHans Petter Selasky };
189*d6b92ffaSHans Petter Selasky 
190*d6b92ffaSHans Petter Selasky struct mlx5_create_qp {
191*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp		ibv_cmd;
192*d6b92ffaSHans Petter Selasky 	__u64				buf_addr;
193*d6b92ffaSHans Petter Selasky 	__u64				db_addr;
194*d6b92ffaSHans Petter Selasky 	__u32				sq_wqe_count;
195*d6b92ffaSHans Petter Selasky 	__u32				rq_wqe_count;
196*d6b92ffaSHans Petter Selasky 	__u32				rq_wqe_shift;
197*d6b92ffaSHans Petter Selasky 	__u32				flags;
198*d6b92ffaSHans Petter Selasky 	__u32                           uidx;
199*d6b92ffaSHans Petter Selasky 	__u32                           reserved;
200*d6b92ffaSHans Petter Selasky 	/* SQ buffer address - used for Raw Packet QP */
201*d6b92ffaSHans Petter Selasky 	__u64                           sq_buf_addr;
202*d6b92ffaSHans Petter Selasky };
203*d6b92ffaSHans Petter Selasky 
204*d6b92ffaSHans Petter Selasky struct mlx5_create_qp_resp {
205*d6b92ffaSHans Petter Selasky 	struct ibv_create_qp_resp	ibv_resp;
206*d6b92ffaSHans Petter Selasky 	__u32				uuar_index;
207*d6b92ffaSHans Petter Selasky };
208*d6b92ffaSHans Petter Selasky 
209*d6b92ffaSHans Petter Selasky struct mlx5_drv_create_wq {
210*d6b92ffaSHans Petter Selasky 	__u64		buf_addr;
211*d6b92ffaSHans Petter Selasky 	__u64		db_addr;
212*d6b92ffaSHans Petter Selasky 	__u32		rq_wqe_count;
213*d6b92ffaSHans Petter Selasky 	__u32		rq_wqe_shift;
214*d6b92ffaSHans Petter Selasky 	__u32		user_index;
215*d6b92ffaSHans Petter Selasky 	__u32		flags;
216*d6b92ffaSHans Petter Selasky 	__u32		comp_mask;
217*d6b92ffaSHans Petter Selasky 	__u32		reserved;
218*d6b92ffaSHans Petter Selasky };
219*d6b92ffaSHans Petter Selasky 
220*d6b92ffaSHans Petter Selasky struct mlx5_create_wq {
221*d6b92ffaSHans Petter Selasky 	struct ibv_create_wq	ibv_cmd;
222*d6b92ffaSHans Petter Selasky 	struct mlx5_drv_create_wq	drv;
223*d6b92ffaSHans Petter Selasky };
224*d6b92ffaSHans Petter Selasky 
225*d6b92ffaSHans Petter Selasky struct mlx5_create_wq_resp {
226*d6b92ffaSHans Petter Selasky 	struct ibv_create_wq_resp	ibv_resp;
227*d6b92ffaSHans Petter Selasky 	__u32			response_length;
228*d6b92ffaSHans Petter Selasky 	__u32			reserved;
229*d6b92ffaSHans Petter Selasky };
230*d6b92ffaSHans Petter Selasky 
231*d6b92ffaSHans Petter Selasky struct mlx5_modify_wq {
232*d6b92ffaSHans Petter Selasky 	struct ibv_modify_wq	ibv_cmd;
233*d6b92ffaSHans Petter Selasky 	__u32			comp_mask;
234*d6b92ffaSHans Petter Selasky 	__u32			reserved;
235*d6b92ffaSHans Petter Selasky };
236*d6b92ffaSHans Petter Selasky 
237*d6b92ffaSHans Petter Selasky struct mlx5_create_rwq_ind_table_resp {
238*d6b92ffaSHans Petter Selasky 	struct ibv_create_rwq_ind_table_resp ibv_resp;
239*d6b92ffaSHans Petter Selasky };
240*d6b92ffaSHans Petter Selasky 
241*d6b92ffaSHans Petter Selasky struct mlx5_destroy_rwq_ind_table {
242*d6b92ffaSHans Petter Selasky 	struct ibv_destroy_rwq_ind_table ibv_cmd;
243*d6b92ffaSHans Petter Selasky };
244*d6b92ffaSHans Petter Selasky 
245*d6b92ffaSHans Petter Selasky struct mlx5_resize_cq {
246*d6b92ffaSHans Petter Selasky 	struct ibv_resize_cq		ibv_cmd;
247*d6b92ffaSHans Petter Selasky 	__u64				buf_addr;
248*d6b92ffaSHans Petter Selasky 	__u16				cqe_size;
249*d6b92ffaSHans Petter Selasky 	__u16				reserved0;
250*d6b92ffaSHans Petter Selasky 	__u32				reserved1;
251*d6b92ffaSHans Petter Selasky };
252*d6b92ffaSHans Petter Selasky 
253*d6b92ffaSHans Petter Selasky struct mlx5_resize_cq_resp {
254*d6b92ffaSHans Petter Selasky 	struct ibv_resize_cq_resp	ibv_resp;
255*d6b92ffaSHans Petter Selasky };
256*d6b92ffaSHans Petter Selasky 
257*d6b92ffaSHans Petter Selasky struct mlx5_query_device_ex {
258*d6b92ffaSHans Petter Selasky 	struct ibv_query_device_ex	ibv_cmd;
259*d6b92ffaSHans Petter Selasky };
260*d6b92ffaSHans Petter Selasky 
261*d6b92ffaSHans Petter Selasky struct mlx5_reserved_tso_caps {
262*d6b92ffaSHans Petter Selasky 	__u64 reserved;
263*d6b92ffaSHans Petter Selasky };
264*d6b92ffaSHans Petter Selasky 
265*d6b92ffaSHans Petter Selasky struct mlx5_rss_caps {
266*d6b92ffaSHans Petter Selasky 	__u64 rx_hash_fields_mask; /* enum ibv_rx_hash_fields */
267*d6b92ffaSHans Petter Selasky 	__u8 rx_hash_function; /* enum ibv_rx_hash_function_flags */
268*d6b92ffaSHans Petter Selasky 	__u8 reserved[7];
269*d6b92ffaSHans Petter Selasky };
270*d6b92ffaSHans Petter Selasky 
271*d6b92ffaSHans Petter Selasky struct mlx5_packet_pacing_caps {
272*d6b92ffaSHans Petter Selasky 	struct ibv_packet_pacing_caps caps;
273*d6b92ffaSHans Petter Selasky 	__u32  reserved;
274*d6b92ffaSHans Petter Selasky };
275*d6b92ffaSHans Petter Selasky 
276*d6b92ffaSHans Petter Selasky struct mlx5_query_device_ex_resp {
277*d6b92ffaSHans Petter Selasky 	struct ibv_query_device_resp_ex ibv_resp;
278*d6b92ffaSHans Petter Selasky 	__u32				comp_mask;
279*d6b92ffaSHans Petter Selasky 	__u32				response_length;
280*d6b92ffaSHans Petter Selasky 	struct ibv_tso_caps		tso_caps;
281*d6b92ffaSHans Petter Selasky 	struct mlx5_rss_caps            rss_caps; /* vendor data channel */
282*d6b92ffaSHans Petter Selasky 	struct mlx5dv_cqe_comp_caps	cqe_comp_caps;
283*d6b92ffaSHans Petter Selasky 	struct mlx5_packet_pacing_caps	packet_pacing_caps;
284*d6b92ffaSHans Petter Selasky 	__u32				support_multi_pkt_send_wqe;
285*d6b92ffaSHans Petter Selasky 	__u32				reserved;
286*d6b92ffaSHans Petter Selasky };
287*d6b92ffaSHans Petter Selasky 
288*d6b92ffaSHans Petter Selasky #endif /* MLX5_ABI_H */
289