1 /*
2 * Copyright (c) 2018-2019 Cavium, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 *
27 * $FreeBSD$
28 *
29 */
30
31 #ifndef __QLNXR_ROCE_H__
32 #define __QLNXR_ROCE_H__
33
34 /*
35 * roce completion notification queue element
36 */
37 struct roce_cnqe {
38 struct regpair cq_handle;
39 };
40
41 struct roce_cqe_responder {
42 struct regpair srq_wr_id;
43 struct regpair qp_handle;
44 __le32 imm_data_or_inv_r_Key;
45 __le32 length;
46 __le32 reserved0;
47 __le16 rq_cons;
48 u8 flags;
49 #define ROCE_CQE_RESPONDER_TOGGLE_BIT_MASK 0x1
50 #define ROCE_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
51 #define ROCE_CQE_RESPONDER_TYPE_MASK 0x3
52 #define ROCE_CQE_RESPONDER_TYPE_SHIFT 1
53 #define ROCE_CQE_RESPONDER_INV_FLG_MASK 0x1
54 #define ROCE_CQE_RESPONDER_INV_FLG_SHIFT 3
55 #define ROCE_CQE_RESPONDER_IMM_FLG_MASK 0x1
56 #define ROCE_CQE_RESPONDER_IMM_FLG_SHIFT 4
57 #define ROCE_CQE_RESPONDER_RDMA_FLG_MASK 0x1
58 #define ROCE_CQE_RESPONDER_RDMA_FLG_SHIFT 5
59 #define ROCE_CQE_RESPONDER_RESERVED2_MASK 0x3
60 #define ROCE_CQE_RESPONDER_RESERVED2_SHIFT 6
61 u8 status;
62 };
63
64 struct roce_cqe_requester {
65 __le16 sq_cons;
66 __le16 reserved0;
67 __le32 reserved1;
68 struct regpair qp_handle;
69 struct regpair reserved2;
70 __le32 reserved3;
71 __le16 reserved4;
72 u8 flags;
73 #define ROCE_CQE_REQUESTER_TOGGLE_BIT_MASK 0x1
74 #define ROCE_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
75 #define ROCE_CQE_REQUESTER_TYPE_MASK 0x3
76 #define ROCE_CQE_REQUESTER_TYPE_SHIFT 1
77 #define ROCE_CQE_REQUESTER_RESERVED5_MASK 0x1F
78 #define ROCE_CQE_REQUESTER_RESERVED5_SHIFT 3
79 u8 status;
80 };
81
82 struct roce_cqe_common {
83 struct regpair reserved0;
84 struct regpair qp_handle;
85 __le16 reserved1[7];
86 u8 flags;
87 #define ROCE_CQE_COMMON_TOGGLE_BIT_MASK 0x1
88 #define ROCE_CQE_COMMON_TOGGLE_BIT_SHIFT 0
89 #define ROCE_CQE_COMMON_TYPE_MASK 0x3
90 #define ROCE_CQE_COMMON_TYPE_SHIFT 1
91 #define ROCE_CQE_COMMON_RESERVED2_MASK 0x1F
92 #define ROCE_CQE_COMMON_RESERVED2_SHIFT 3
93 u8 status;
94 };
95
96 /*
97 * roce completion queue element
98 */
99 union roce_cqe {
100 struct roce_cqe_responder resp;
101 struct roce_cqe_requester req;
102 struct roce_cqe_common cmn;
103 };
104
105 /*
106 * CQE requester status enumeration
107 */
108 enum roce_cqe_requester_status_enum {
109 ROCE_CQE_REQ_STS_OK,
110 ROCE_CQE_REQ_STS_BAD_RESPONSE_ERR,
111 ROCE_CQE_REQ_STS_LOCAL_LENGTH_ERR,
112 ROCE_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR,
113 ROCE_CQE_REQ_STS_LOCAL_PROTECTION_ERR,
114 ROCE_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR,
115 ROCE_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR,
116 ROCE_CQE_REQ_STS_REMOTE_ACCESS_ERR,
117 ROCE_CQE_REQ_STS_REMOTE_OPERATION_ERR,
118 ROCE_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR,
119 ROCE_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR,
120 ROCE_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR,
121 MAX_ROCE_CQE_REQUESTER_STATUS_ENUM
122 };
123
124 /*
125 * CQE responder status enumeration
126 */
127 enum roce_cqe_responder_status_enum {
128 ROCE_CQE_RESP_STS_OK,
129 ROCE_CQE_RESP_STS_LOCAL_ACCESS_ERR,
130 ROCE_CQE_RESP_STS_LOCAL_LENGTH_ERR,
131 ROCE_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
132 ROCE_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
133 ROCE_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
134 ROCE_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
135 ROCE_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
136 MAX_ROCE_CQE_RESPONDER_STATUS_ENUM
137 };
138
139 /*
140 * CQE type enumeration
141 */
142 enum roce_cqe_type {
143 ROCE_CQE_TYPE_REQUESTER,
144 ROCE_CQE_TYPE_RESPONDER_RQ,
145 ROCE_CQE_TYPE_RESPONDER_SRQ,
146 ROCE_CQE_TYPE_INVALID,
147 MAX_ROCE_CQE_TYPE
148 };
149
150 /*
151 * memory window type enumeration
152 */
153 enum roce_mw_type {
154 ROCE_MW_TYPE_1,
155 ROCE_MW_TYPE_2A,
156 MAX_ROCE_MW_TYPE
157 };
158
159 struct roce_rq_sge {
160 struct regpair addr;
161 __le32 length;
162 __le32 flags;
163 #define ROCE_RQ_SGE_L_KEY_MASK 0x3FFFFFF
164 #define ROCE_RQ_SGE_L_KEY_SHIFT 0
165 #define ROCE_RQ_SGE_NUM_SGES_MASK 0x7
166 #define ROCE_RQ_SGE_NUM_SGES_SHIFT 26
167 #define ROCE_RQ_SGE_RESERVED0_MASK 0x7
168 #define ROCE_RQ_SGE_RESERVED0_SHIFT 29
169 };
170
171 struct roce_sq_atomic_wqe {
172 struct regpair remote_va;
173 __le32 xrc_srq;
174 u8 req_type;
175 u8 flags;
176 #define ROCE_SQ_ATOMIC_WQE_COMP_FLG_MASK 0x1
177 #define ROCE_SQ_ATOMIC_WQE_COMP_FLG_SHIFT 0
178 #define ROCE_SQ_ATOMIC_WQE_RD_FENCE_FLG_MASK 0x1
179 #define ROCE_SQ_ATOMIC_WQE_RD_FENCE_FLG_SHIFT 1
180 #define ROCE_SQ_ATOMIC_WQE_INV_FENCE_FLG_MASK 0x1
181 #define ROCE_SQ_ATOMIC_WQE_INV_FENCE_FLG_SHIFT 2
182 #define ROCE_SQ_ATOMIC_WQE_SE_FLG_MASK 0x1
183 #define ROCE_SQ_ATOMIC_WQE_SE_FLG_SHIFT 3
184 #define ROCE_SQ_ATOMIC_WQE_INLINE_FLG_MASK 0x1
185 #define ROCE_SQ_ATOMIC_WQE_INLINE_FLG_SHIFT 4
186 #define ROCE_SQ_ATOMIC_WQE_RESERVED0_MASK 0x7
187 #define ROCE_SQ_ATOMIC_WQE_RESERVED0_SHIFT 5
188 u8 reserved1;
189 u8 prev_wqe_size;
190 struct regpair swap_data;
191 __le32 r_key;
192 __le32 reserved2;
193 struct regpair cmp_data;
194 struct regpair reserved3;
195 };
196
197 /*
198 * First element (16 bytes) of atomic wqe
199 */
200 struct roce_sq_atomic_wqe_1st {
201 struct regpair remote_va;
202 __le32 xrc_srq;
203 u8 req_type;
204 u8 flags;
205 #define ROCE_SQ_ATOMIC_WQE_1ST_COMP_FLG_MASK 0x1
206 #define ROCE_SQ_ATOMIC_WQE_1ST_COMP_FLG_SHIFT 0
207 #define ROCE_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_MASK 0x1
208 #define ROCE_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_SHIFT 1
209 #define ROCE_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_MASK 0x1
210 #define ROCE_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_SHIFT 2
211 #define ROCE_SQ_ATOMIC_WQE_1ST_SE_FLG_MASK 0x1
212 #define ROCE_SQ_ATOMIC_WQE_1ST_SE_FLG_SHIFT 3
213 #define ROCE_SQ_ATOMIC_WQE_1ST_INLINE_FLG_MASK 0x1
214 #define ROCE_SQ_ATOMIC_WQE_1ST_INLINE_FLG_SHIFT 4
215 #define ROCE_SQ_ATOMIC_WQE_1ST_RESERVED0_MASK 0x7
216 #define ROCE_SQ_ATOMIC_WQE_1ST_RESERVED0_SHIFT 5
217 u8 reserved1;
218 u8 prev_wqe_size;
219 };
220
221 /*
222 * Second element (16 bytes) of atomic wqe
223 */
224 struct roce_sq_atomic_wqe_2nd {
225 struct regpair swap_data;
226 __le32 r_key;
227 __le32 reserved2;
228 };
229
230 /*
231 * Third element (16 bytes) of atomic wqe
232 */
233 struct roce_sq_atomic_wqe_3rd {
234 struct regpair cmp_data;
235 struct regpair reserved3;
236 };
237
238 struct roce_sq_bind_wqe {
239 struct regpair addr;
240 __le32 l_key;
241 u8 req_type;
242 u8 flags;
243 #define ROCE_SQ_BIND_WQE_COMP_FLG_MASK 0x1
244 #define ROCE_SQ_BIND_WQE_COMP_FLG_SHIFT 0
245 #define ROCE_SQ_BIND_WQE_RD_FENCE_FLG_MASK 0x1
246 #define ROCE_SQ_BIND_WQE_RD_FENCE_FLG_SHIFT 1
247 #define ROCE_SQ_BIND_WQE_INV_FENCE_FLG_MASK 0x1
248 #define ROCE_SQ_BIND_WQE_INV_FENCE_FLG_SHIFT 2
249 #define ROCE_SQ_BIND_WQE_SE_FLG_MASK 0x1
250 #define ROCE_SQ_BIND_WQE_SE_FLG_SHIFT 3
251 #define ROCE_SQ_BIND_WQE_INLINE_FLG_MASK 0x1
252 #define ROCE_SQ_BIND_WQE_INLINE_FLG_SHIFT 4
253 #define ROCE_SQ_BIND_WQE_RESERVED0_MASK 0x7
254 #define ROCE_SQ_BIND_WQE_RESERVED0_SHIFT 5
255 u8 access_ctrl;
256 #define ROCE_SQ_BIND_WQE_REMOTE_READ_MASK 0x1
257 #define ROCE_SQ_BIND_WQE_REMOTE_READ_SHIFT 0
258 #define ROCE_SQ_BIND_WQE_REMOTE_WRITE_MASK 0x1
259 #define ROCE_SQ_BIND_WQE_REMOTE_WRITE_SHIFT 1
260 #define ROCE_SQ_BIND_WQE_ENABLE_ATOMIC_MASK 0x1
261 #define ROCE_SQ_BIND_WQE_ENABLE_ATOMIC_SHIFT 2
262 #define ROCE_SQ_BIND_WQE_LOCAL_READ_MASK 0x1
263 #define ROCE_SQ_BIND_WQE_LOCAL_READ_SHIFT 3
264 #define ROCE_SQ_BIND_WQE_LOCAL_WRITE_MASK 0x1
265 #define ROCE_SQ_BIND_WQE_LOCAL_WRITE_SHIFT 4
266 #define ROCE_SQ_BIND_WQE_RESERVED1_MASK 0x7
267 #define ROCE_SQ_BIND_WQE_RESERVED1_SHIFT 5
268 u8 prev_wqe_size;
269 u8 bind_ctrl;
270 #define ROCE_SQ_BIND_WQE_ZERO_BASED_MASK 0x1
271 #define ROCE_SQ_BIND_WQE_ZERO_BASED_SHIFT 0
272 #define ROCE_SQ_BIND_WQE_MW_TYPE_MASK 0x1
273 #define ROCE_SQ_BIND_WQE_MW_TYPE_SHIFT 1
274 #define ROCE_SQ_BIND_WQE_RESERVED2_MASK 0x3F
275 #define ROCE_SQ_BIND_WQE_RESERVED2_SHIFT 2
276 u8 reserved3[2];
277 u8 length_hi;
278 __le32 length_lo;
279 __le32 parent_l_key;
280 __le32 reserved6;
281 };
282
283 /*
284 * First element (16 bytes) of bind wqe
285 */
286 struct roce_sq_bind_wqe_1st {
287 struct regpair addr;
288 __le32 l_key;
289 u8 req_type;
290 u8 flags;
291 #define ROCE_SQ_BIND_WQE_1ST_COMP_FLG_MASK 0x1
292 #define ROCE_SQ_BIND_WQE_1ST_COMP_FLG_SHIFT 0
293 #define ROCE_SQ_BIND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
294 #define ROCE_SQ_BIND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
295 #define ROCE_SQ_BIND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
296 #define ROCE_SQ_BIND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
297 #define ROCE_SQ_BIND_WQE_1ST_SE_FLG_MASK 0x1
298 #define ROCE_SQ_BIND_WQE_1ST_SE_FLG_SHIFT 3
299 #define ROCE_SQ_BIND_WQE_1ST_INLINE_FLG_MASK 0x1
300 #define ROCE_SQ_BIND_WQE_1ST_INLINE_FLG_SHIFT 4
301 #define ROCE_SQ_BIND_WQE_1ST_RESERVED0_MASK 0x7
302 #define ROCE_SQ_BIND_WQE_1ST_RESERVED0_SHIFT 5
303 u8 access_ctrl;
304 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_READ_MASK 0x1
305 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_READ_SHIFT 0
306 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_WRITE_MASK 0x1
307 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_WRITE_SHIFT 1
308 #define ROCE_SQ_BIND_WQE_1ST_ENABLE_ATOMIC_MASK 0x1
309 #define ROCE_SQ_BIND_WQE_1ST_ENABLE_ATOMIC_SHIFT 2
310 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_READ_MASK 0x1
311 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_READ_SHIFT 3
312 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_WRITE_MASK 0x1
313 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_WRITE_SHIFT 4
314 #define ROCE_SQ_BIND_WQE_1ST_RESERVED1_MASK 0x7
315 #define ROCE_SQ_BIND_WQE_1ST_RESERVED1_SHIFT 5
316 u8 prev_wqe_size;
317 };
318
319 /*
320 * Second element (16 bytes) of bind wqe
321 */
322 struct roce_sq_bind_wqe_2nd {
323 u8 bind_ctrl;
324 #define ROCE_SQ_BIND_WQE_2ND_ZERO_BASED_MASK 0x1
325 #define ROCE_SQ_BIND_WQE_2ND_ZERO_BASED_SHIFT 0
326 #define ROCE_SQ_BIND_WQE_2ND_MW_TYPE_MASK 0x1
327 #define ROCE_SQ_BIND_WQE_2ND_MW_TYPE_SHIFT 1
328 #define ROCE_SQ_BIND_WQE_2ND_RESERVED2_MASK 0x3F
329 #define ROCE_SQ_BIND_WQE_2ND_RESERVED2_SHIFT 2
330 u8 reserved3[2];
331 u8 length_hi;
332 __le32 length_lo;
333 __le32 parent_l_key;
334 __le32 reserved6;
335 };
336
337 /*
338 * Structure with only the SQ WQE common fields. Size is of one SQ element (16B)
339 */
340 struct roce_sq_common_wqe {
341 __le32 reserved1[3];
342 u8 req_type;
343 u8 flags;
344 #define ROCE_SQ_COMMON_WQE_COMP_FLG_MASK 0x1
345 #define ROCE_SQ_COMMON_WQE_COMP_FLG_SHIFT 0
346 #define ROCE_SQ_COMMON_WQE_RD_FENCE_FLG_MASK 0x1
347 #define ROCE_SQ_COMMON_WQE_RD_FENCE_FLG_SHIFT 1
348 #define ROCE_SQ_COMMON_WQE_INV_FENCE_FLG_MASK 0x1
349 #define ROCE_SQ_COMMON_WQE_INV_FENCE_FLG_SHIFT 2
350 #define ROCE_SQ_COMMON_WQE_SE_FLG_MASK 0x1
351 #define ROCE_SQ_COMMON_WQE_SE_FLG_SHIFT 3
352 #define ROCE_SQ_COMMON_WQE_INLINE_FLG_MASK 0x1
353 #define ROCE_SQ_COMMON_WQE_INLINE_FLG_SHIFT 4
354 #define ROCE_SQ_COMMON_WQE_RESERVED0_MASK 0x7
355 #define ROCE_SQ_COMMON_WQE_RESERVED0_SHIFT 5
356 u8 reserved2;
357 u8 prev_wqe_size;
358 };
359
360 struct roce_sq_fmr_wqe {
361 struct regpair addr;
362 __le32 l_key;
363 u8 req_type;
364 u8 flags;
365 #define ROCE_SQ_FMR_WQE_COMP_FLG_MASK 0x1
366 #define ROCE_SQ_FMR_WQE_COMP_FLG_SHIFT 0
367 #define ROCE_SQ_FMR_WQE_RD_FENCE_FLG_MASK 0x1
368 #define ROCE_SQ_FMR_WQE_RD_FENCE_FLG_SHIFT 1
369 #define ROCE_SQ_FMR_WQE_INV_FENCE_FLG_MASK 0x1
370 #define ROCE_SQ_FMR_WQE_INV_FENCE_FLG_SHIFT 2
371 #define ROCE_SQ_FMR_WQE_SE_FLG_MASK 0x1
372 #define ROCE_SQ_FMR_WQE_SE_FLG_SHIFT 3
373 #define ROCE_SQ_FMR_WQE_INLINE_FLG_MASK 0x1
374 #define ROCE_SQ_FMR_WQE_INLINE_FLG_SHIFT 4
375 #define ROCE_SQ_FMR_WQE_RESERVED0_MASK 0x7
376 #define ROCE_SQ_FMR_WQE_RESERVED0_SHIFT 5
377 u8 access_ctrl;
378 #define ROCE_SQ_FMR_WQE_REMOTE_READ_MASK 0x1
379 #define ROCE_SQ_FMR_WQE_REMOTE_READ_SHIFT 0
380 #define ROCE_SQ_FMR_WQE_REMOTE_WRITE_MASK 0x1
381 #define ROCE_SQ_FMR_WQE_REMOTE_WRITE_SHIFT 1
382 #define ROCE_SQ_FMR_WQE_ENABLE_ATOMIC_MASK 0x1
383 #define ROCE_SQ_FMR_WQE_ENABLE_ATOMIC_SHIFT 2
384 #define ROCE_SQ_FMR_WQE_LOCAL_READ_MASK 0x1
385 #define ROCE_SQ_FMR_WQE_LOCAL_READ_SHIFT 3
386 #define ROCE_SQ_FMR_WQE_LOCAL_WRITE_MASK 0x1
387 #define ROCE_SQ_FMR_WQE_LOCAL_WRITE_SHIFT 4
388 #define ROCE_SQ_FMR_WQE_RESERVED1_MASK 0x7
389 #define ROCE_SQ_FMR_WQE_RESERVED1_SHIFT 5
390 u8 prev_wqe_size;
391 u8 fmr_ctrl;
392 #define ROCE_SQ_FMR_WQE_PAGE_SIZE_LOG_MASK 0x1F
393 #define ROCE_SQ_FMR_WQE_PAGE_SIZE_LOG_SHIFT 0
394 #define ROCE_SQ_FMR_WQE_ZERO_BASED_MASK 0x1
395 #define ROCE_SQ_FMR_WQE_ZERO_BASED_SHIFT 5
396 #define ROCE_SQ_FMR_WQE_BIND_EN_MASK 0x1
397 #define ROCE_SQ_FMR_WQE_BIND_EN_SHIFT 6
398 #define ROCE_SQ_FMR_WQE_RESERVED2_MASK 0x1
399 #define ROCE_SQ_FMR_WQE_RESERVED2_SHIFT 7
400 u8 reserved3[2];
401 u8 length_hi;
402 __le32 length_lo;
403 struct regpair pbl_addr;
404 };
405
406 /*
407 * First element (16 bytes) of fmr wqe
408 */
409 struct roce_sq_fmr_wqe_1st {
410 struct regpair addr;
411 __le32 l_key;
412 u8 req_type;
413 u8 flags;
414 #define ROCE_SQ_FMR_WQE_1ST_COMP_FLG_MASK 0x1
415 #define ROCE_SQ_FMR_WQE_1ST_COMP_FLG_SHIFT 0
416 #define ROCE_SQ_FMR_WQE_1ST_RD_FENCE_FLG_MASK 0x1
417 #define ROCE_SQ_FMR_WQE_1ST_RD_FENCE_FLG_SHIFT 1
418 #define ROCE_SQ_FMR_WQE_1ST_INV_FENCE_FLG_MASK 0x1
419 #define ROCE_SQ_FMR_WQE_1ST_INV_FENCE_FLG_SHIFT 2
420 #define ROCE_SQ_FMR_WQE_1ST_SE_FLG_MASK 0x1
421 #define ROCE_SQ_FMR_WQE_1ST_SE_FLG_SHIFT 3
422 #define ROCE_SQ_FMR_WQE_1ST_INLINE_FLG_MASK 0x1
423 #define ROCE_SQ_FMR_WQE_1ST_INLINE_FLG_SHIFT 4
424 #define ROCE_SQ_FMR_WQE_1ST_RESERVED0_MASK 0x7
425 #define ROCE_SQ_FMR_WQE_1ST_RESERVED0_SHIFT 5
426 u8 access_ctrl;
427 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_READ_MASK 0x1
428 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_READ_SHIFT 0
429 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_WRITE_MASK 0x1
430 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_WRITE_SHIFT 1
431 #define ROCE_SQ_FMR_WQE_1ST_ENABLE_ATOMIC_MASK 0x1
432 #define ROCE_SQ_FMR_WQE_1ST_ENABLE_ATOMIC_SHIFT 2
433 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_READ_MASK 0x1
434 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_READ_SHIFT 3
435 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_WRITE_MASK 0x1
436 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_WRITE_SHIFT 4
437 #define ROCE_SQ_FMR_WQE_1ST_RESERVED1_MASK 0x7
438 #define ROCE_SQ_FMR_WQE_1ST_RESERVED1_SHIFT 5
439 u8 prev_wqe_size;
440 };
441
442 /*
443 * Second element (16 bytes) of fmr wqe
444 */
445 struct roce_sq_fmr_wqe_2nd {
446 u8 fmr_ctrl;
447 #define ROCE_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_MASK 0x1F
448 #define ROCE_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_SHIFT 0
449 #define ROCE_SQ_FMR_WQE_2ND_ZERO_BASED_MASK 0x1
450 #define ROCE_SQ_FMR_WQE_2ND_ZERO_BASED_SHIFT 5
451 #define ROCE_SQ_FMR_WQE_2ND_BIND_EN_MASK 0x1
452 #define ROCE_SQ_FMR_WQE_2ND_BIND_EN_SHIFT 6
453 #define ROCE_SQ_FMR_WQE_2ND_RESERVED2_MASK 0x1
454 #define ROCE_SQ_FMR_WQE_2ND_RESERVED2_SHIFT 7
455 u8 reserved3[2];
456 u8 length_hi;
457 __le32 length_lo;
458 struct regpair pbl_addr;
459 };
460
461 struct roce_sq_local_inv_wqe {
462 struct regpair reserved;
463 __le32 inv_l_key;
464 u8 req_type;
465 u8 flags;
466 #define ROCE_SQ_LOCAL_INV_WQE_COMP_FLG_MASK 0x1
467 #define ROCE_SQ_LOCAL_INV_WQE_COMP_FLG_SHIFT 0
468 #define ROCE_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_MASK 0x1
469 #define ROCE_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_SHIFT 1
470 #define ROCE_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_MASK 0x1
471 #define ROCE_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_SHIFT 2
472 #define ROCE_SQ_LOCAL_INV_WQE_SE_FLG_MASK 0x1
473 #define ROCE_SQ_LOCAL_INV_WQE_SE_FLG_SHIFT 3
474 #define ROCE_SQ_LOCAL_INV_WQE_INLINE_FLG_MASK 0x1
475 #define ROCE_SQ_LOCAL_INV_WQE_INLINE_FLG_SHIFT 4
476 #define ROCE_SQ_LOCAL_INV_WQE_RESERVED0_MASK 0x7
477 #define ROCE_SQ_LOCAL_INV_WQE_RESERVED0_SHIFT 5
478 u8 reserved1;
479 u8 prev_wqe_size;
480 };
481
482 struct roce_sq_rdma_wqe {
483 __le32 imm_data;
484 __le32 length;
485 __le32 xrc_srq;
486 u8 req_type;
487 u8 flags;
488 #define ROCE_SQ_RDMA_WQE_COMP_FLG_MASK 0x1
489 #define ROCE_SQ_RDMA_WQE_COMP_FLG_SHIFT 0
490 #define ROCE_SQ_RDMA_WQE_RD_FENCE_FLG_MASK 0x1
491 #define ROCE_SQ_RDMA_WQE_RD_FENCE_FLG_SHIFT 1
492 #define ROCE_SQ_RDMA_WQE_INV_FENCE_FLG_MASK 0x1
493 #define ROCE_SQ_RDMA_WQE_INV_FENCE_FLG_SHIFT 2
494 #define ROCE_SQ_RDMA_WQE_SE_FLG_MASK 0x1
495 #define ROCE_SQ_RDMA_WQE_SE_FLG_SHIFT 3
496 #define ROCE_SQ_RDMA_WQE_INLINE_FLG_MASK 0x1
497 #define ROCE_SQ_RDMA_WQE_INLINE_FLG_SHIFT 4
498 #define ROCE_SQ_RDMA_WQE_RESERVED0_MASK 0x7
499 #define ROCE_SQ_RDMA_WQE_RESERVED0_SHIFT 5
500 u8 wqe_size;
501 u8 prev_wqe_size;
502 struct regpair remote_va;
503 __le32 r_key;
504 __le32 reserved1;
505 };
506
507 /*
508 * First element (16 bytes) of rdma wqe
509 */
510 struct roce_sq_rdma_wqe_1st {
511 __le32 imm_data;
512 __le32 length;
513 __le32 xrc_srq;
514 u8 req_type;
515 u8 flags;
516 #define ROCE_SQ_RDMA_WQE_1ST_COMP_FLG_MASK 0x1
517 #define ROCE_SQ_RDMA_WQE_1ST_COMP_FLG_SHIFT 0
518 #define ROCE_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_MASK 0x1
519 #define ROCE_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_SHIFT 1
520 #define ROCE_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_MASK 0x1
521 #define ROCE_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_SHIFT 2
522 #define ROCE_SQ_RDMA_WQE_1ST_SE_FLG_MASK 0x1
523 #define ROCE_SQ_RDMA_WQE_1ST_SE_FLG_SHIFT 3
524 #define ROCE_SQ_RDMA_WQE_1ST_INLINE_FLG_MASK 0x1
525 #define ROCE_SQ_RDMA_WQE_1ST_INLINE_FLG_SHIFT 4
526 #define ROCE_SQ_RDMA_WQE_1ST_RESERVED0_MASK 0x7
527 #define ROCE_SQ_RDMA_WQE_1ST_RESERVED0_SHIFT 5
528 u8 wqe_size;
529 u8 prev_wqe_size;
530 };
531
532 /*
533 * Second element (16 bytes) of rdma wqe
534 */
535 struct roce_sq_rdma_wqe_2nd {
536 struct regpair remote_va;
537 __le32 r_key;
538 __le32 reserved1;
539 };
540
541 /*
542 * SQ WQE req type enumeration
543 */
544 enum roce_sq_req_type {
545 ROCE_SQ_REQ_TYPE_SEND,
546 ROCE_SQ_REQ_TYPE_SEND_WITH_IMM,
547 ROCE_SQ_REQ_TYPE_SEND_WITH_INVALIDATE,
548 ROCE_SQ_REQ_TYPE_RDMA_WR,
549 ROCE_SQ_REQ_TYPE_RDMA_WR_WITH_IMM,
550 ROCE_SQ_REQ_TYPE_RDMA_RD,
551 ROCE_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP,
552 ROCE_SQ_REQ_TYPE_ATOMIC_ADD,
553 ROCE_SQ_REQ_TYPE_LOCAL_INVALIDATE,
554 ROCE_SQ_REQ_TYPE_FAST_MR,
555 ROCE_SQ_REQ_TYPE_BIND,
556 ROCE_SQ_REQ_TYPE_INVALID,
557 MAX_ROCE_SQ_REQ_TYPE
558 };
559
560 struct roce_sq_send_wqe {
561 __le32 inv_key_or_imm_data;
562 __le32 length;
563 __le32 xrc_srq;
564 u8 req_type;
565 u8 flags;
566 #define ROCE_SQ_SEND_WQE_COMP_FLG_MASK 0x1
567 #define ROCE_SQ_SEND_WQE_COMP_FLG_SHIFT 0
568 #define ROCE_SQ_SEND_WQE_RD_FENCE_FLG_MASK 0x1
569 #define ROCE_SQ_SEND_WQE_RD_FENCE_FLG_SHIFT 1
570 #define ROCE_SQ_SEND_WQE_INV_FENCE_FLG_MASK 0x1
571 #define ROCE_SQ_SEND_WQE_INV_FENCE_FLG_SHIFT 2
572 #define ROCE_SQ_SEND_WQE_SE_FLG_MASK 0x1
573 #define ROCE_SQ_SEND_WQE_SE_FLG_SHIFT 3
574 #define ROCE_SQ_SEND_WQE_INLINE_FLG_MASK 0x1
575 #define ROCE_SQ_SEND_WQE_INLINE_FLG_SHIFT 4
576 #define ROCE_SQ_SEND_WQE_RESERVED0_MASK 0x7
577 #define ROCE_SQ_SEND_WQE_RESERVED0_SHIFT 5
578 u8 wqe_size;
579 u8 prev_wqe_size;
580 };
581
582 struct roce_sq_sge {
583 __le32 length;
584 struct regpair addr;
585 __le32 l_key;
586 };
587
588 struct roce_srq_prod {
589 __le16 prod;
590 };
591
592 struct roce_srq_sge {
593 struct regpair addr;
594 __le32 length;
595 __le32 l_key;
596 struct regpair wr_id;
597 u8 flags;
598 #define ROCE_SRQ_SGE_NUM_SGES_MASK 0x3
599 #define ROCE_SRQ_SGE_NUM_SGES_SHIFT 0
600 #define ROCE_SRQ_SGE_RESERVED0_MASK 0x3F
601 #define ROCE_SRQ_SGE_RESERVED0_SHIFT 2
602 u8 reserved1;
603 __le16 reserved2;
604 __le32 reserved3;
605 };
606
607 /*
608 * RoCE doorbell data for SQ and RQ
609 */
610 struct roce_pwm_val16_data {
611 __le16 icid;
612 __le16 prod_val;
613 };
614
615 union roce_pwm_val16_data_union {
616 struct roce_pwm_val16_data as_struct;
617 __le32 as_dword;
618 };
619
620 /*
621 * RoCE doorbell data for CQ
622 */
623 struct roce_pwm_val32_data {
624 __le16 icid;
625 u8 agg_flags;
626 u8 params;
627 #define ROCE_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
628 #define ROCE_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
629 #define ROCE_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
630 #define ROCE_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
631 #define ROCE_PWM_VAL32_DATA_RESERVED_MASK 0x1F
632 #define ROCE_PWM_VAL32_DATA_RESERVED_SHIFT 3
633 __le32 cq_cons_val;
634 };
635
636 union roce_pwm_val32_data_union {
637 struct roce_pwm_val32_data as_struct;
638 struct regpair as_repair;
639 };
640
641 #endif /* __QLNXR_ROCE_H__ */
Cache object: 82dc20bbe5e68c7528c32fa46129d7d9
|