xref: /freebsd/contrib/ofed/libmlx5/wqe.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 WQE_H
34*d6b92ffaSHans Petter Selasky #define WQE_H
35*d6b92ffaSHans Petter Selasky 
36*d6b92ffaSHans Petter Selasky #include <stdint.h>
37*d6b92ffaSHans Petter Selasky 
38*d6b92ffaSHans Petter Selasky struct mlx5_sg_copy_ptr {
39*d6b92ffaSHans Petter Selasky 	int	index;
40*d6b92ffaSHans Petter Selasky 	int	offset;
41*d6b92ffaSHans Petter Selasky };
42*d6b92ffaSHans Petter Selasky 
43*d6b92ffaSHans Petter Selasky struct mlx5_eqe_comp {
44*d6b92ffaSHans Petter Selasky 	uint32_t	reserved[6];
45*d6b92ffaSHans Petter Selasky 	uint32_t	cqn;
46*d6b92ffaSHans Petter Selasky };
47*d6b92ffaSHans Petter Selasky 
48*d6b92ffaSHans Petter Selasky struct mlx5_eqe_qp_srq {
49*d6b92ffaSHans Petter Selasky 	uint32_t	reserved[6];
50*d6b92ffaSHans Petter Selasky 	uint32_t	qp_srq_n;
51*d6b92ffaSHans Petter Selasky };
52*d6b92ffaSHans Petter Selasky 
53*d6b92ffaSHans Petter Selasky struct mlx5_wqe_xrc_seg {
54*d6b92ffaSHans Petter Selasky 	uint32_t	xrc_srqn;
55*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd[12];
56*d6b92ffaSHans Petter Selasky };
57*d6b92ffaSHans Petter Selasky 
58*d6b92ffaSHans Petter Selasky struct mlx5_wqe_masked_atomic_seg {
59*d6b92ffaSHans Petter Selasky 	uint64_t	swap_add;
60*d6b92ffaSHans Petter Selasky 	uint64_t	compare;
61*d6b92ffaSHans Petter Selasky 	uint64_t	swap_add_mask;
62*d6b92ffaSHans Petter Selasky 	uint64_t	compare_mask;
63*d6b92ffaSHans Petter Selasky };
64*d6b92ffaSHans Petter Selasky 
65*d6b92ffaSHans Petter Selasky enum {
66*d6b92ffaSHans Petter Selasky 	MLX5_ETH_L2_INLINE_HEADER_SIZE	= 18,
67*d6b92ffaSHans Petter Selasky 	MLX5_ETH_L2_MIN_HEADER_SIZE	= 14,
68*d6b92ffaSHans Petter Selasky };
69*d6b92ffaSHans Petter Selasky 
70*d6b92ffaSHans Petter Selasky enum {
71*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_FLAG_INLINE =			1 << 7,
72*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_FLAG_CHECK_FREE =		1 << 5,
73*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_FLAG_TRNSLATION_OFFSET =	1 << 4,
74*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_FLAG_CHECK_QPN =		1 << 3,
75*d6b92ffaSHans Petter Selasky };
76*d6b92ffaSHans Petter Selasky 
77*d6b92ffaSHans Petter Selasky enum {
78*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_LEN			= 1 << 0,
79*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_START_ADDR		= 1 << 6,
80*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_MKEY		= 1 << 13,
81*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_QPN			= 1 << 14,
82*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_LOCAL_WRITE	= 1 << 18,
83*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_READ	= 1 << 19,
84*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_WRITE	= 1 << 20,
85*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_ATOMIC	= 1 << 21,
86*d6b92ffaSHans Petter Selasky 	MLX5_WQE_UMR_CTRL_MKEY_MASK_FREE		= 1 << 29,
87*d6b92ffaSHans Petter Selasky };
88*d6b92ffaSHans Petter Selasky 
89*d6b92ffaSHans Petter Selasky struct mlx5_wqe_umr_ctrl_seg {
90*d6b92ffaSHans Petter Selasky 	uint8_t		flags;
91*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd0[3];
92*d6b92ffaSHans Petter Selasky 	uint16_t	klm_octowords;
93*d6b92ffaSHans Petter Selasky 	uint16_t	translation_offset;
94*d6b92ffaSHans Petter Selasky 	uint64_t	mkey_mask;
95*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd1[32];
96*d6b92ffaSHans Petter Selasky };
97*d6b92ffaSHans Petter Selasky 
98*d6b92ffaSHans Petter Selasky struct mlx5_wqe_umr_klm_seg {
99*d6b92ffaSHans Petter Selasky 	/* up to 2GB */
100*d6b92ffaSHans Petter Selasky 	uint32_t	byte_count;
101*d6b92ffaSHans Petter Selasky 	uint32_t	mkey;
102*d6b92ffaSHans Petter Selasky 	uint64_t	address;
103*d6b92ffaSHans Petter Selasky };
104*d6b92ffaSHans Petter Selasky 
105*d6b92ffaSHans Petter Selasky union mlx5_wqe_umr_inline_seg {
106*d6b92ffaSHans Petter Selasky 	struct mlx5_wqe_umr_klm_seg	klm;
107*d6b92ffaSHans Petter Selasky };
108*d6b92ffaSHans Petter Selasky 
109*d6b92ffaSHans Petter Selasky enum {
110*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_FREE = 1 << 6
111*d6b92ffaSHans Petter Selasky };
112*d6b92ffaSHans Petter Selasky 
113*d6b92ffaSHans Petter Selasky enum {
114*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_ATOMIC = 1 << 6,
115*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_WRITE = 1 << 5,
116*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_READ = 1 << 4,
117*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_WRITE = 1 << 3,
118*d6b92ffaSHans Petter Selasky 	MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_READ = 1 << 2
119*d6b92ffaSHans Petter Selasky };
120*d6b92ffaSHans Petter Selasky 
121*d6b92ffaSHans Petter Selasky struct mlx5_wqe_mkey_context_seg {
122*d6b92ffaSHans Petter Selasky 	uint8_t		free;
123*d6b92ffaSHans Petter Selasky 	uint8_t		reserved1;
124*d6b92ffaSHans Petter Selasky 	uint8_t		access_flags;
125*d6b92ffaSHans Petter Selasky 	uint8_t		sf;
126*d6b92ffaSHans Petter Selasky 	uint32_t	qpn_mkey;
127*d6b92ffaSHans Petter Selasky 	uint32_t	reserved2;
128*d6b92ffaSHans Petter Selasky 	uint32_t	flags_pd;
129*d6b92ffaSHans Petter Selasky 	uint64_t	start_addr;
130*d6b92ffaSHans Petter Selasky 	uint64_t	len;
131*d6b92ffaSHans Petter Selasky 	uint32_t	bsf_octword_size;
132*d6b92ffaSHans Petter Selasky 	uint32_t	reserved3[4];
133*d6b92ffaSHans Petter Selasky 	uint32_t	translations_octword_size;
134*d6b92ffaSHans Petter Selasky 	uint8_t		reserved4[3];
135*d6b92ffaSHans Petter Selasky 	uint8_t		log_page_size;
136*d6b92ffaSHans Petter Selasky 	uint32_t	reserved;
137*d6b92ffaSHans Petter Selasky 	union mlx5_wqe_umr_inline_seg inseg[0];
138*d6b92ffaSHans Petter Selasky };
139*d6b92ffaSHans Petter Selasky 
140*d6b92ffaSHans Petter Selasky struct mlx5_seg_set_psv {
141*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd[4];
142*d6b92ffaSHans Petter Selasky 	uint16_t	syndrome;
143*d6b92ffaSHans Petter Selasky 	uint16_t	status;
144*d6b92ffaSHans Petter Selasky 	uint16_t	block_guard;
145*d6b92ffaSHans Petter Selasky 	uint16_t	app_tag;
146*d6b92ffaSHans Petter Selasky 	uint32_t	ref_tag;
147*d6b92ffaSHans Petter Selasky 	uint32_t	mkey;
148*d6b92ffaSHans Petter Selasky 	uint64_t	va;
149*d6b92ffaSHans Petter Selasky };
150*d6b92ffaSHans Petter Selasky 
151*d6b92ffaSHans Petter Selasky struct mlx5_seg_get_psv {
152*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd[19];
153*d6b92ffaSHans Petter Selasky 	uint8_t		num_psv;
154*d6b92ffaSHans Petter Selasky 	uint32_t	l_key;
155*d6b92ffaSHans Petter Selasky 	uint64_t	va;
156*d6b92ffaSHans Petter Selasky 	uint32_t	psv_index[4];
157*d6b92ffaSHans Petter Selasky };
158*d6b92ffaSHans Petter Selasky 
159*d6b92ffaSHans Petter Selasky struct mlx5_seg_check_psv {
160*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd0[2];
161*d6b92ffaSHans Petter Selasky 	uint16_t	err_coalescing_op;
162*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd1[2];
163*d6b92ffaSHans Petter Selasky 	uint16_t	xport_err_op;
164*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd2[2];
165*d6b92ffaSHans Petter Selasky 	uint16_t	xport_err_mask;
166*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd3[7];
167*d6b92ffaSHans Petter Selasky 	uint8_t		num_psv;
168*d6b92ffaSHans Petter Selasky 	uint32_t	l_key;
169*d6b92ffaSHans Petter Selasky 	uint64_t	va;
170*d6b92ffaSHans Petter Selasky 	uint32_t	psv_index[4];
171*d6b92ffaSHans Petter Selasky };
172*d6b92ffaSHans Petter Selasky 
173*d6b92ffaSHans Petter Selasky struct mlx5_rwqe_sig {
174*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd0[4];
175*d6b92ffaSHans Petter Selasky 	uint8_t		signature;
176*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd1[11];
177*d6b92ffaSHans Petter Selasky };
178*d6b92ffaSHans Petter Selasky 
179*d6b92ffaSHans Petter Selasky struct mlx5_wqe_signature_seg {
180*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd0[4];
181*d6b92ffaSHans Petter Selasky 	uint8_t		signature;
182*d6b92ffaSHans Petter Selasky 	uint8_t		rsvd1[11];
183*d6b92ffaSHans Petter Selasky };
184*d6b92ffaSHans Petter Selasky 
185*d6b92ffaSHans Petter Selasky struct mlx5_wqe_inline_seg {
186*d6b92ffaSHans Petter Selasky 	uint32_t	byte_count;
187*d6b92ffaSHans Petter Selasky };
188*d6b92ffaSHans Petter Selasky 
189*d6b92ffaSHans Petter Selasky 
190*d6b92ffaSHans Petter Selasky #endif /* WQE_H */
191