Loading...
1/*
2 * Copyright (c) 2009-2010 Chelsio, Inc. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 * - Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials
20 * provided with the distribution.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
26 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 * SOFTWARE.
30 */
31#ifndef _T4FW_RI_API_H_
32#define _T4FW_RI_API_H_
33
34#include "t4fw_api.h"
35
36enum fw_ri_wr_opcode {
37 FW_RI_RDMA_WRITE = 0x0, /* IETF RDMAP v1.0 ... */
38 FW_RI_READ_REQ = 0x1,
39 FW_RI_READ_RESP = 0x2,
40 FW_RI_SEND = 0x3,
41 FW_RI_SEND_WITH_INV = 0x4,
42 FW_RI_SEND_WITH_SE = 0x5,
43 FW_RI_SEND_WITH_SE_INV = 0x6,
44 FW_RI_TERMINATE = 0x7,
45 FW_RI_RDMA_INIT = 0x8, /* CHELSIO RI specific ... */
46 FW_RI_BIND_MW = 0x9,
47 FW_RI_FAST_REGISTER = 0xa,
48 FW_RI_LOCAL_INV = 0xb,
49 FW_RI_QP_MODIFY = 0xc,
50 FW_RI_BYPASS = 0xd,
51 FW_RI_RECEIVE = 0xe,
52
53 FW_RI_SGE_EC_CR_RETURN = 0xf,
54 FW_RI_WRITE_IMMEDIATE = FW_RI_RDMA_INIT
55};
56
57enum fw_ri_wr_flags {
58 FW_RI_COMPLETION_FLAG = 0x01,
59 FW_RI_NOTIFICATION_FLAG = 0x02,
60 FW_RI_SOLICITED_EVENT_FLAG = 0x04,
61 FW_RI_READ_FENCE_FLAG = 0x08,
62 FW_RI_LOCAL_FENCE_FLAG = 0x10,
63 FW_RI_RDMA_READ_INVALIDATE = 0x20,
64 FW_RI_RDMA_WRITE_WITH_IMMEDIATE = 0x40
65};
66
67enum fw_ri_mpa_attrs {
68 FW_RI_MPA_RX_MARKER_ENABLE = 0x01,
69 FW_RI_MPA_TX_MARKER_ENABLE = 0x02,
70 FW_RI_MPA_CRC_ENABLE = 0x04,
71 FW_RI_MPA_IETF_ENABLE = 0x08
72};
73
74enum fw_ri_qp_caps {
75 FW_RI_QP_RDMA_READ_ENABLE = 0x01,
76 FW_RI_QP_RDMA_WRITE_ENABLE = 0x02,
77 FW_RI_QP_BIND_ENABLE = 0x04,
78 FW_RI_QP_FAST_REGISTER_ENABLE = 0x08,
79 FW_RI_QP_STAG0_ENABLE = 0x10
80};
81
82enum fw_ri_addr_type {
83 FW_RI_ZERO_BASED_TO = 0x00,
84 FW_RI_VA_BASED_TO = 0x01
85};
86
87enum fw_ri_mem_perms {
88 FW_RI_MEM_ACCESS_REM_WRITE = 0x01,
89 FW_RI_MEM_ACCESS_REM_READ = 0x02,
90 FW_RI_MEM_ACCESS_REM = 0x03,
91 FW_RI_MEM_ACCESS_LOCAL_WRITE = 0x04,
92 FW_RI_MEM_ACCESS_LOCAL_READ = 0x08,
93 FW_RI_MEM_ACCESS_LOCAL = 0x0C
94};
95
96enum fw_ri_stag_type {
97 FW_RI_STAG_NSMR = 0x00,
98 FW_RI_STAG_SMR = 0x01,
99 FW_RI_STAG_MW = 0x02,
100 FW_RI_STAG_MW_RELAXED = 0x03
101};
102
103enum fw_ri_data_op {
104 FW_RI_DATA_IMMD = 0x81,
105 FW_RI_DATA_DSGL = 0x82,
106 FW_RI_DATA_ISGL = 0x83
107};
108
109enum fw_ri_sgl_depth {
110 FW_RI_SGL_DEPTH_MAX_SQ = 16,
111 FW_RI_SGL_DEPTH_MAX_RQ = 4
112};
113
114struct fw_ri_dsge_pair {
115 __be32 len[2];
116 __be64 addr[2];
117};
118
119struct fw_ri_dsgl {
120 __u8 op;
121 __u8 r1;
122 __be16 nsge;
123 __be32 len0;
124 __be64 addr0;
125#ifndef C99_NOT_SUPPORTED
126 struct fw_ri_dsge_pair sge[];
127#endif
128};
129
130struct fw_ri_sge {
131 __be32 stag;
132 __be32 len;
133 __be64 to;
134};
135
136struct fw_ri_isgl {
137 __u8 op;
138 __u8 r1;
139 __be16 nsge;
140 __be32 r2;
141#ifndef C99_NOT_SUPPORTED
142 struct fw_ri_sge sge[];
143#endif
144};
145
146struct fw_ri_immd {
147 __u8 op;
148 __u8 r1;
149 __be16 r2;
150 __be32 immdlen;
151#ifndef C99_NOT_SUPPORTED
152 __u8 data[];
153#endif
154};
155
156struct fw_ri_tpte {
157 __be32 valid_to_pdid;
158 __be32 locread_to_qpid;
159 __be32 nosnoop_pbladdr;
160 __be32 len_lo;
161 __be32 va_hi;
162 __be32 va_lo_fbo;
163 __be32 dca_mwbcnt_pstag;
164 __be32 len_hi;
165};
166
167#define FW_RI_TPTE_VALID_S 31
168#define FW_RI_TPTE_VALID_M 0x1
169#define FW_RI_TPTE_VALID_V(x) ((x) << FW_RI_TPTE_VALID_S)
170#define FW_RI_TPTE_VALID_G(x) \
171 (((x) >> FW_RI_TPTE_VALID_S) & FW_RI_TPTE_VALID_M)
172#define FW_RI_TPTE_VALID_F FW_RI_TPTE_VALID_V(1U)
173
174#define FW_RI_TPTE_STAGKEY_S 23
175#define FW_RI_TPTE_STAGKEY_M 0xff
176#define FW_RI_TPTE_STAGKEY_V(x) ((x) << FW_RI_TPTE_STAGKEY_S)
177#define FW_RI_TPTE_STAGKEY_G(x) \
178 (((x) >> FW_RI_TPTE_STAGKEY_S) & FW_RI_TPTE_STAGKEY_M)
179
180#define FW_RI_TPTE_STAGSTATE_S 22
181#define FW_RI_TPTE_STAGSTATE_M 0x1
182#define FW_RI_TPTE_STAGSTATE_V(x) ((x) << FW_RI_TPTE_STAGSTATE_S)
183#define FW_RI_TPTE_STAGSTATE_G(x) \
184 (((x) >> FW_RI_TPTE_STAGSTATE_S) & FW_RI_TPTE_STAGSTATE_M)
185#define FW_RI_TPTE_STAGSTATE_F FW_RI_TPTE_STAGSTATE_V(1U)
186
187#define FW_RI_TPTE_STAGTYPE_S 20
188#define FW_RI_TPTE_STAGTYPE_M 0x3
189#define FW_RI_TPTE_STAGTYPE_V(x) ((x) << FW_RI_TPTE_STAGTYPE_S)
190#define FW_RI_TPTE_STAGTYPE_G(x) \
191 (((x) >> FW_RI_TPTE_STAGTYPE_S) & FW_RI_TPTE_STAGTYPE_M)
192
193#define FW_RI_TPTE_PDID_S 0
194#define FW_RI_TPTE_PDID_M 0xfffff
195#define FW_RI_TPTE_PDID_V(x) ((x) << FW_RI_TPTE_PDID_S)
196#define FW_RI_TPTE_PDID_G(x) \
197 (((x) >> FW_RI_TPTE_PDID_S) & FW_RI_TPTE_PDID_M)
198
199#define FW_RI_TPTE_PERM_S 28
200#define FW_RI_TPTE_PERM_M 0xf
201#define FW_RI_TPTE_PERM_V(x) ((x) << FW_RI_TPTE_PERM_S)
202#define FW_RI_TPTE_PERM_G(x) \
203 (((x) >> FW_RI_TPTE_PERM_S) & FW_RI_TPTE_PERM_M)
204
205#define FW_RI_TPTE_REMINVDIS_S 27
206#define FW_RI_TPTE_REMINVDIS_M 0x1
207#define FW_RI_TPTE_REMINVDIS_V(x) ((x) << FW_RI_TPTE_REMINVDIS_S)
208#define FW_RI_TPTE_REMINVDIS_G(x) \
209 (((x) >> FW_RI_TPTE_REMINVDIS_S) & FW_RI_TPTE_REMINVDIS_M)
210#define FW_RI_TPTE_REMINVDIS_F FW_RI_TPTE_REMINVDIS_V(1U)
211
212#define FW_RI_TPTE_ADDRTYPE_S 26
213#define FW_RI_TPTE_ADDRTYPE_M 1
214#define FW_RI_TPTE_ADDRTYPE_V(x) ((x) << FW_RI_TPTE_ADDRTYPE_S)
215#define FW_RI_TPTE_ADDRTYPE_G(x) \
216 (((x) >> FW_RI_TPTE_ADDRTYPE_S) & FW_RI_TPTE_ADDRTYPE_M)
217#define FW_RI_TPTE_ADDRTYPE_F FW_RI_TPTE_ADDRTYPE_V(1U)
218
219#define FW_RI_TPTE_MWBINDEN_S 25
220#define FW_RI_TPTE_MWBINDEN_M 0x1
221#define FW_RI_TPTE_MWBINDEN_V(x) ((x) << FW_RI_TPTE_MWBINDEN_S)
222#define FW_RI_TPTE_MWBINDEN_G(x) \
223 (((x) >> FW_RI_TPTE_MWBINDEN_S) & FW_RI_TPTE_MWBINDEN_M)
224#define FW_RI_TPTE_MWBINDEN_F FW_RI_TPTE_MWBINDEN_V(1U)
225
226#define FW_RI_TPTE_PS_S 20
227#define FW_RI_TPTE_PS_M 0x1f
228#define FW_RI_TPTE_PS_V(x) ((x) << FW_RI_TPTE_PS_S)
229#define FW_RI_TPTE_PS_G(x) \
230 (((x) >> FW_RI_TPTE_PS_S) & FW_RI_TPTE_PS_M)
231
232#define FW_RI_TPTE_QPID_S 0
233#define FW_RI_TPTE_QPID_M 0xfffff
234#define FW_RI_TPTE_QPID_V(x) ((x) << FW_RI_TPTE_QPID_S)
235#define FW_RI_TPTE_QPID_G(x) \
236 (((x) >> FW_RI_TPTE_QPID_S) & FW_RI_TPTE_QPID_M)
237
238#define FW_RI_TPTE_NOSNOOP_S 30
239#define FW_RI_TPTE_NOSNOOP_M 0x1
240#define FW_RI_TPTE_NOSNOOP_V(x) ((x) << FW_RI_TPTE_NOSNOOP_S)
241#define FW_RI_TPTE_NOSNOOP_G(x) \
242 (((x) >> FW_RI_TPTE_NOSNOOP_S) & FW_RI_TPTE_NOSNOOP_M)
243#define FW_RI_TPTE_NOSNOOP_F FW_RI_TPTE_NOSNOOP_V(1U)
244
245#define FW_RI_TPTE_PBLADDR_S 0
246#define FW_RI_TPTE_PBLADDR_M 0x1fffffff
247#define FW_RI_TPTE_PBLADDR_V(x) ((x) << FW_RI_TPTE_PBLADDR_S)
248#define FW_RI_TPTE_PBLADDR_G(x) \
249 (((x) >> FW_RI_TPTE_PBLADDR_S) & FW_RI_TPTE_PBLADDR_M)
250
251#define FW_RI_TPTE_DCA_S 24
252#define FW_RI_TPTE_DCA_M 0x1f
253#define FW_RI_TPTE_DCA_V(x) ((x) << FW_RI_TPTE_DCA_S)
254#define FW_RI_TPTE_DCA_G(x) \
255 (((x) >> FW_RI_TPTE_DCA_S) & FW_RI_TPTE_DCA_M)
256
257#define FW_RI_TPTE_MWBCNT_PSTAG_S 0
258#define FW_RI_TPTE_MWBCNT_PSTAG_M 0xffffff
259#define FW_RI_TPTE_MWBCNT_PSTAT_V(x) \
260 ((x) << FW_RI_TPTE_MWBCNT_PSTAG_S)
261#define FW_RI_TPTE_MWBCNT_PSTAG_G(x) \
262 (((x) >> FW_RI_TPTE_MWBCNT_PSTAG_S) & FW_RI_TPTE_MWBCNT_PSTAG_M)
263
264enum fw_ri_res_type {
265 FW_RI_RES_TYPE_SQ,
266 FW_RI_RES_TYPE_RQ,
267 FW_RI_RES_TYPE_CQ,
268 FW_RI_RES_TYPE_SRQ,
269};
270
271enum fw_ri_res_op {
272 FW_RI_RES_OP_WRITE,
273 FW_RI_RES_OP_RESET,
274};
275
276struct fw_ri_res {
277 union fw_ri_restype {
278 struct fw_ri_res_sqrq {
279 __u8 restype;
280 __u8 op;
281 __be16 r3;
282 __be32 eqid;
283 __be32 r4[2];
284 __be32 fetchszm_to_iqid;
285 __be32 dcaen_to_eqsize;
286 __be64 eqaddr;
287 } sqrq;
288 struct fw_ri_res_cq {
289 __u8 restype;
290 __u8 op;
291 __be16 r3;
292 __be32 iqid;
293 __be32 r4[2];
294 __be32 iqandst_to_iqandstindex;
295 __be16 iqdroprss_to_iqesize;
296 __be16 iqsize;
297 __be64 iqaddr;
298 __be32 iqns_iqro;
299 __be32 r6_lo;
300 __be64 r7;
301 } cq;
302 struct fw_ri_res_srq {
303 __u8 restype;
304 __u8 op;
305 __be16 r3;
306 __be32 eqid;
307 __be32 r4[2];
308 __be32 fetchszm_to_iqid;
309 __be32 dcaen_to_eqsize;
310 __be64 eqaddr;
311 __be32 srqid;
312 __be32 pdid;
313 __be32 hwsrqsize;
314 __be32 hwsrqaddr;
315 } srq;
316 } u;
317};
318
319struct fw_ri_res_wr {
320 __be32 op_nres;
321 __be32 len16_pkd;
322 __u64 cookie;
323#ifndef C99_NOT_SUPPORTED
324 struct fw_ri_res res[];
325#endif
326};
327
328#define FW_RI_RES_WR_NRES_S 0
329#define FW_RI_RES_WR_NRES_M 0xff
330#define FW_RI_RES_WR_NRES_V(x) ((x) << FW_RI_RES_WR_NRES_S)
331#define FW_RI_RES_WR_NRES_G(x) \
332 (((x) >> FW_RI_RES_WR_NRES_S) & FW_RI_RES_WR_NRES_M)
333
334#define FW_RI_RES_WR_FETCHSZM_S 26
335#define FW_RI_RES_WR_FETCHSZM_M 0x1
336#define FW_RI_RES_WR_FETCHSZM_V(x) ((x) << FW_RI_RES_WR_FETCHSZM_S)
337#define FW_RI_RES_WR_FETCHSZM_G(x) \
338 (((x) >> FW_RI_RES_WR_FETCHSZM_S) & FW_RI_RES_WR_FETCHSZM_M)
339#define FW_RI_RES_WR_FETCHSZM_F FW_RI_RES_WR_FETCHSZM_V(1U)
340
341#define FW_RI_RES_WR_STATUSPGNS_S 25
342#define FW_RI_RES_WR_STATUSPGNS_M 0x1
343#define FW_RI_RES_WR_STATUSPGNS_V(x) ((x) << FW_RI_RES_WR_STATUSPGNS_S)
344#define FW_RI_RES_WR_STATUSPGNS_G(x) \
345 (((x) >> FW_RI_RES_WR_STATUSPGNS_S) & FW_RI_RES_WR_STATUSPGNS_M)
346#define FW_RI_RES_WR_STATUSPGNS_F FW_RI_RES_WR_STATUSPGNS_V(1U)
347
348#define FW_RI_RES_WR_STATUSPGRO_S 24
349#define FW_RI_RES_WR_STATUSPGRO_M 0x1
350#define FW_RI_RES_WR_STATUSPGRO_V(x) ((x) << FW_RI_RES_WR_STATUSPGRO_S)
351#define FW_RI_RES_WR_STATUSPGRO_G(x) \
352 (((x) >> FW_RI_RES_WR_STATUSPGRO_S) & FW_RI_RES_WR_STATUSPGRO_M)
353#define FW_RI_RES_WR_STATUSPGRO_F FW_RI_RES_WR_STATUSPGRO_V(1U)
354
355#define FW_RI_RES_WR_FETCHNS_S 23
356#define FW_RI_RES_WR_FETCHNS_M 0x1
357#define FW_RI_RES_WR_FETCHNS_V(x) ((x) << FW_RI_RES_WR_FETCHNS_S)
358#define FW_RI_RES_WR_FETCHNS_G(x) \
359 (((x) >> FW_RI_RES_WR_FETCHNS_S) & FW_RI_RES_WR_FETCHNS_M)
360#define FW_RI_RES_WR_FETCHNS_F FW_RI_RES_WR_FETCHNS_V(1U)
361
362#define FW_RI_RES_WR_FETCHRO_S 22
363#define FW_RI_RES_WR_FETCHRO_M 0x1
364#define FW_RI_RES_WR_FETCHRO_V(x) ((x) << FW_RI_RES_WR_FETCHRO_S)
365#define FW_RI_RES_WR_FETCHRO_G(x) \
366 (((x) >> FW_RI_RES_WR_FETCHRO_S) & FW_RI_RES_WR_FETCHRO_M)
367#define FW_RI_RES_WR_FETCHRO_F FW_RI_RES_WR_FETCHRO_V(1U)
368
369#define FW_RI_RES_WR_HOSTFCMODE_S 20
370#define FW_RI_RES_WR_HOSTFCMODE_M 0x3
371#define FW_RI_RES_WR_HOSTFCMODE_V(x) ((x) << FW_RI_RES_WR_HOSTFCMODE_S)
372#define FW_RI_RES_WR_HOSTFCMODE_G(x) \
373 (((x) >> FW_RI_RES_WR_HOSTFCMODE_S) & FW_RI_RES_WR_HOSTFCMODE_M)
374
375#define FW_RI_RES_WR_CPRIO_S 19
376#define FW_RI_RES_WR_CPRIO_M 0x1
377#define FW_RI_RES_WR_CPRIO_V(x) ((x) << FW_RI_RES_WR_CPRIO_S)
378#define FW_RI_RES_WR_CPRIO_G(x) \
379 (((x) >> FW_RI_RES_WR_CPRIO_S) & FW_RI_RES_WR_CPRIO_M)
380#define FW_RI_RES_WR_CPRIO_F FW_RI_RES_WR_CPRIO_V(1U)
381
382#define FW_RI_RES_WR_ONCHIP_S 18
383#define FW_RI_RES_WR_ONCHIP_M 0x1
384#define FW_RI_RES_WR_ONCHIP_V(x) ((x) << FW_RI_RES_WR_ONCHIP_S)
385#define FW_RI_RES_WR_ONCHIP_G(x) \
386 (((x) >> FW_RI_RES_WR_ONCHIP_S) & FW_RI_RES_WR_ONCHIP_M)
387#define FW_RI_RES_WR_ONCHIP_F FW_RI_RES_WR_ONCHIP_V(1U)
388
389#define FW_RI_RES_WR_PCIECHN_S 16
390#define FW_RI_RES_WR_PCIECHN_M 0x3
391#define FW_RI_RES_WR_PCIECHN_V(x) ((x) << FW_RI_RES_WR_PCIECHN_S)
392#define FW_RI_RES_WR_PCIECHN_G(x) \
393 (((x) >> FW_RI_RES_WR_PCIECHN_S) & FW_RI_RES_WR_PCIECHN_M)
394
395#define FW_RI_RES_WR_IQID_S 0
396#define FW_RI_RES_WR_IQID_M 0xffff
397#define FW_RI_RES_WR_IQID_V(x) ((x) << FW_RI_RES_WR_IQID_S)
398#define FW_RI_RES_WR_IQID_G(x) \
399 (((x) >> FW_RI_RES_WR_IQID_S) & FW_RI_RES_WR_IQID_M)
400
401#define FW_RI_RES_WR_DCAEN_S 31
402#define FW_RI_RES_WR_DCAEN_M 0x1
403#define FW_RI_RES_WR_DCAEN_V(x) ((x) << FW_RI_RES_WR_DCAEN_S)
404#define FW_RI_RES_WR_DCAEN_G(x) \
405 (((x) >> FW_RI_RES_WR_DCAEN_S) & FW_RI_RES_WR_DCAEN_M)
406#define FW_RI_RES_WR_DCAEN_F FW_RI_RES_WR_DCAEN_V(1U)
407
408#define FW_RI_RES_WR_DCACPU_S 26
409#define FW_RI_RES_WR_DCACPU_M 0x1f
410#define FW_RI_RES_WR_DCACPU_V(x) ((x) << FW_RI_RES_WR_DCACPU_S)
411#define FW_RI_RES_WR_DCACPU_G(x) \
412 (((x) >> FW_RI_RES_WR_DCACPU_S) & FW_RI_RES_WR_DCACPU_M)
413
414#define FW_RI_RES_WR_FBMIN_S 23
415#define FW_RI_RES_WR_FBMIN_M 0x7
416#define FW_RI_RES_WR_FBMIN_V(x) ((x) << FW_RI_RES_WR_FBMIN_S)
417#define FW_RI_RES_WR_FBMIN_G(x) \
418 (((x) >> FW_RI_RES_WR_FBMIN_S) & FW_RI_RES_WR_FBMIN_M)
419
420#define FW_RI_RES_WR_FBMAX_S 20
421#define FW_RI_RES_WR_FBMAX_M 0x7
422#define FW_RI_RES_WR_FBMAX_V(x) ((x) << FW_RI_RES_WR_FBMAX_S)
423#define FW_RI_RES_WR_FBMAX_G(x) \
424 (((x) >> FW_RI_RES_WR_FBMAX_S) & FW_RI_RES_WR_FBMAX_M)
425
426#define FW_RI_RES_WR_CIDXFTHRESHO_S 19
427#define FW_RI_RES_WR_CIDXFTHRESHO_M 0x1
428#define FW_RI_RES_WR_CIDXFTHRESHO_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESHO_S)
429#define FW_RI_RES_WR_CIDXFTHRESHO_G(x) \
430 (((x) >> FW_RI_RES_WR_CIDXFTHRESHO_S) & FW_RI_RES_WR_CIDXFTHRESHO_M)
431#define FW_RI_RES_WR_CIDXFTHRESHO_F FW_RI_RES_WR_CIDXFTHRESHO_V(1U)
432
433#define FW_RI_RES_WR_CIDXFTHRESH_S 16
434#define FW_RI_RES_WR_CIDXFTHRESH_M 0x7
435#define FW_RI_RES_WR_CIDXFTHRESH_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESH_S)
436#define FW_RI_RES_WR_CIDXFTHRESH_G(x) \
437 (((x) >> FW_RI_RES_WR_CIDXFTHRESH_S) & FW_RI_RES_WR_CIDXFTHRESH_M)
438
439#define FW_RI_RES_WR_EQSIZE_S 0
440#define FW_RI_RES_WR_EQSIZE_M 0xffff
441#define FW_RI_RES_WR_EQSIZE_V(x) ((x) << FW_RI_RES_WR_EQSIZE_S)
442#define FW_RI_RES_WR_EQSIZE_G(x) \
443 (((x) >> FW_RI_RES_WR_EQSIZE_S) & FW_RI_RES_WR_EQSIZE_M)
444
445#define FW_RI_RES_WR_IQANDST_S 15
446#define FW_RI_RES_WR_IQANDST_M 0x1
447#define FW_RI_RES_WR_IQANDST_V(x) ((x) << FW_RI_RES_WR_IQANDST_S)
448#define FW_RI_RES_WR_IQANDST_G(x) \
449 (((x) >> FW_RI_RES_WR_IQANDST_S) & FW_RI_RES_WR_IQANDST_M)
450#define FW_RI_RES_WR_IQANDST_F FW_RI_RES_WR_IQANDST_V(1U)
451
452#define FW_RI_RES_WR_IQANUS_S 14
453#define FW_RI_RES_WR_IQANUS_M 0x1
454#define FW_RI_RES_WR_IQANUS_V(x) ((x) << FW_RI_RES_WR_IQANUS_S)
455#define FW_RI_RES_WR_IQANUS_G(x) \
456 (((x) >> FW_RI_RES_WR_IQANUS_S) & FW_RI_RES_WR_IQANUS_M)
457#define FW_RI_RES_WR_IQANUS_F FW_RI_RES_WR_IQANUS_V(1U)
458
459#define FW_RI_RES_WR_IQANUD_S 12
460#define FW_RI_RES_WR_IQANUD_M 0x3
461#define FW_RI_RES_WR_IQANUD_V(x) ((x) << FW_RI_RES_WR_IQANUD_S)
462#define FW_RI_RES_WR_IQANUD_G(x) \
463 (((x) >> FW_RI_RES_WR_IQANUD_S) & FW_RI_RES_WR_IQANUD_M)
464
465#define FW_RI_RES_WR_IQANDSTINDEX_S 0
466#define FW_RI_RES_WR_IQANDSTINDEX_M 0xfff
467#define FW_RI_RES_WR_IQANDSTINDEX_V(x) ((x) << FW_RI_RES_WR_IQANDSTINDEX_S)
468#define FW_RI_RES_WR_IQANDSTINDEX_G(x) \
469 (((x) >> FW_RI_RES_WR_IQANDSTINDEX_S) & FW_RI_RES_WR_IQANDSTINDEX_M)
470
471#define FW_RI_RES_WR_IQDROPRSS_S 15
472#define FW_RI_RES_WR_IQDROPRSS_M 0x1
473#define FW_RI_RES_WR_IQDROPRSS_V(x) ((x) << FW_RI_RES_WR_IQDROPRSS_S)
474#define FW_RI_RES_WR_IQDROPRSS_G(x) \
475 (((x) >> FW_RI_RES_WR_IQDROPRSS_S) & FW_RI_RES_WR_IQDROPRSS_M)
476#define FW_RI_RES_WR_IQDROPRSS_F FW_RI_RES_WR_IQDROPRSS_V(1U)
477
478#define FW_RI_RES_WR_IQGTSMODE_S 14
479#define FW_RI_RES_WR_IQGTSMODE_M 0x1
480#define FW_RI_RES_WR_IQGTSMODE_V(x) ((x) << FW_RI_RES_WR_IQGTSMODE_S)
481#define FW_RI_RES_WR_IQGTSMODE_G(x) \
482 (((x) >> FW_RI_RES_WR_IQGTSMODE_S) & FW_RI_RES_WR_IQGTSMODE_M)
483#define FW_RI_RES_WR_IQGTSMODE_F FW_RI_RES_WR_IQGTSMODE_V(1U)
484
485#define FW_RI_RES_WR_IQPCIECH_S 12
486#define FW_RI_RES_WR_IQPCIECH_M 0x3
487#define FW_RI_RES_WR_IQPCIECH_V(x) ((x) << FW_RI_RES_WR_IQPCIECH_S)
488#define FW_RI_RES_WR_IQPCIECH_G(x) \
489 (((x) >> FW_RI_RES_WR_IQPCIECH_S) & FW_RI_RES_WR_IQPCIECH_M)
490
491#define FW_RI_RES_WR_IQDCAEN_S 11
492#define FW_RI_RES_WR_IQDCAEN_M 0x1
493#define FW_RI_RES_WR_IQDCAEN_V(x) ((x) << FW_RI_RES_WR_IQDCAEN_S)
494#define FW_RI_RES_WR_IQDCAEN_G(x) \
495 (((x) >> FW_RI_RES_WR_IQDCAEN_S) & FW_RI_RES_WR_IQDCAEN_M)
496#define FW_RI_RES_WR_IQDCAEN_F FW_RI_RES_WR_IQDCAEN_V(1U)
497
498#define FW_RI_RES_WR_IQDCACPU_S 6
499#define FW_RI_RES_WR_IQDCACPU_M 0x1f
500#define FW_RI_RES_WR_IQDCACPU_V(x) ((x) << FW_RI_RES_WR_IQDCACPU_S)
501#define FW_RI_RES_WR_IQDCACPU_G(x) \
502 (((x) >> FW_RI_RES_WR_IQDCACPU_S) & FW_RI_RES_WR_IQDCACPU_M)
503
504#define FW_RI_RES_WR_IQINTCNTTHRESH_S 4
505#define FW_RI_RES_WR_IQINTCNTTHRESH_M 0x3
506#define FW_RI_RES_WR_IQINTCNTTHRESH_V(x) \
507 ((x) << FW_RI_RES_WR_IQINTCNTTHRESH_S)
508#define FW_RI_RES_WR_IQINTCNTTHRESH_G(x) \
509 (((x) >> FW_RI_RES_WR_IQINTCNTTHRESH_S) & FW_RI_RES_WR_IQINTCNTTHRESH_M)
510
511#define FW_RI_RES_WR_IQO_S 3
512#define FW_RI_RES_WR_IQO_M 0x1
513#define FW_RI_RES_WR_IQO_V(x) ((x) << FW_RI_RES_WR_IQO_S)
514#define FW_RI_RES_WR_IQO_G(x) \
515 (((x) >> FW_RI_RES_WR_IQO_S) & FW_RI_RES_WR_IQO_M)
516#define FW_RI_RES_WR_IQO_F FW_RI_RES_WR_IQO_V(1U)
517
518#define FW_RI_RES_WR_IQCPRIO_S 2
519#define FW_RI_RES_WR_IQCPRIO_M 0x1
520#define FW_RI_RES_WR_IQCPRIO_V(x) ((x) << FW_RI_RES_WR_IQCPRIO_S)
521#define FW_RI_RES_WR_IQCPRIO_G(x) \
522 (((x) >> FW_RI_RES_WR_IQCPRIO_S) & FW_RI_RES_WR_IQCPRIO_M)
523#define FW_RI_RES_WR_IQCPRIO_F FW_RI_RES_WR_IQCPRIO_V(1U)
524
525#define FW_RI_RES_WR_IQESIZE_S 0
526#define FW_RI_RES_WR_IQESIZE_M 0x3
527#define FW_RI_RES_WR_IQESIZE_V(x) ((x) << FW_RI_RES_WR_IQESIZE_S)
528#define FW_RI_RES_WR_IQESIZE_G(x) \
529 (((x) >> FW_RI_RES_WR_IQESIZE_S) & FW_RI_RES_WR_IQESIZE_M)
530
531#define FW_RI_RES_WR_IQNS_S 31
532#define FW_RI_RES_WR_IQNS_M 0x1
533#define FW_RI_RES_WR_IQNS_V(x) ((x) << FW_RI_RES_WR_IQNS_S)
534#define FW_RI_RES_WR_IQNS_G(x) \
535 (((x) >> FW_RI_RES_WR_IQNS_S) & FW_RI_RES_WR_IQNS_M)
536#define FW_RI_RES_WR_IQNS_F FW_RI_RES_WR_IQNS_V(1U)
537
538#define FW_RI_RES_WR_IQRO_S 30
539#define FW_RI_RES_WR_IQRO_M 0x1
540#define FW_RI_RES_WR_IQRO_V(x) ((x) << FW_RI_RES_WR_IQRO_S)
541#define FW_RI_RES_WR_IQRO_G(x) \
542 (((x) >> FW_RI_RES_WR_IQRO_S) & FW_RI_RES_WR_IQRO_M)
543#define FW_RI_RES_WR_IQRO_F FW_RI_RES_WR_IQRO_V(1U)
544
545struct fw_ri_rdma_write_wr {
546 __u8 opcode;
547 __u8 flags;
548 __u16 wrid;
549 __u8 r1[3];
550 __u8 len16;
551 /*
552 * Use union for immediate data to be consistent with stack's 32 bit
553 * data and iWARP spec's 64 bit data.
554 */
555 union {
556 struct {
557 __be32 imm_data32;
558 u32 reserved;
559 } ib_imm_data;
560 __be64 imm_data64;
561 } iw_imm_data;
562 __be32 plen;
563 __be32 stag_sink;
564 __be64 to_sink;
565#ifndef C99_NOT_SUPPORTED
566 union {
567 struct fw_ri_immd immd_src[0];
568 struct fw_ri_isgl isgl_src[0];
569 } u;
570#endif
571};
572
573struct fw_ri_send_wr {
574 __u8 opcode;
575 __u8 flags;
576 __u16 wrid;
577 __u8 r1[3];
578 __u8 len16;
579 __be32 sendop_pkd;
580 __be32 stag_inv;
581 __be32 plen;
582 __be32 r3;
583 __be64 r4;
584#ifndef C99_NOT_SUPPORTED
585 union {
586 struct fw_ri_immd immd_src[0];
587 struct fw_ri_isgl isgl_src[0];
588 } u;
589#endif
590};
591
592#define FW_RI_SEND_WR_SENDOP_S 0
593#define FW_RI_SEND_WR_SENDOP_M 0xf
594#define FW_RI_SEND_WR_SENDOP_V(x) ((x) << FW_RI_SEND_WR_SENDOP_S)
595#define FW_RI_SEND_WR_SENDOP_G(x) \
596 (((x) >> FW_RI_SEND_WR_SENDOP_S) & FW_RI_SEND_WR_SENDOP_M)
597
598struct fw_ri_rdma_write_cmpl_wr {
599 __u8 opcode;
600 __u8 flags;
601 __u16 wrid;
602 __u8 r1[3];
603 __u8 len16;
604 __u8 r2;
605 __u8 flags_send;
606 __u16 wrid_send;
607 __be32 stag_inv;
608 __be32 plen;
609 __be32 stag_sink;
610 __be64 to_sink;
611 union fw_ri_cmpl {
612 struct fw_ri_immd_cmpl {
613 __u8 op;
614 __u8 r1[6];
615 __u8 immdlen;
616 __u8 data[16];
617 } immd_src;
618 struct fw_ri_isgl isgl_src;
619 } u_cmpl;
620 __be64 r3;
621#ifndef C99_NOT_SUPPORTED
622 union fw_ri_write {
623 struct fw_ri_immd immd_src[0];
624 struct fw_ri_isgl isgl_src[0];
625 } u;
626#endif
627};
628
629struct fw_ri_rdma_read_wr {
630 __u8 opcode;
631 __u8 flags;
632 __u16 wrid;
633 __u8 r1[3];
634 __u8 len16;
635 __be64 r2;
636 __be32 stag_sink;
637 __be32 to_sink_hi;
638 __be32 to_sink_lo;
639 __be32 plen;
640 __be32 stag_src;
641 __be32 to_src_hi;
642 __be32 to_src_lo;
643 __be32 r5;
644};
645
646struct fw_ri_recv_wr {
647 __u8 opcode;
648 __u8 r1;
649 __u16 wrid;
650 __u8 r2[3];
651 __u8 len16;
652 struct fw_ri_isgl isgl;
653};
654
655struct fw_ri_bind_mw_wr {
656 __u8 opcode;
657 __u8 flags;
658 __u16 wrid;
659 __u8 r1[3];
660 __u8 len16;
661 __u8 qpbinde_to_dcacpu;
662 __u8 pgsz_shift;
663 __u8 addr_type;
664 __u8 mem_perms;
665 __be32 stag_mr;
666 __be32 stag_mw;
667 __be32 r3;
668 __be64 len_mw;
669 __be64 va_fbo;
670 __be64 r4;
671};
672
673#define FW_RI_BIND_MW_WR_QPBINDE_S 6
674#define FW_RI_BIND_MW_WR_QPBINDE_M 0x1
675#define FW_RI_BIND_MW_WR_QPBINDE_V(x) ((x) << FW_RI_BIND_MW_WR_QPBINDE_S)
676#define FW_RI_BIND_MW_WR_QPBINDE_G(x) \
677 (((x) >> FW_RI_BIND_MW_WR_QPBINDE_S) & FW_RI_BIND_MW_WR_QPBINDE_M)
678#define FW_RI_BIND_MW_WR_QPBINDE_F FW_RI_BIND_MW_WR_QPBINDE_V(1U)
679
680#define FW_RI_BIND_MW_WR_NS_S 5
681#define FW_RI_BIND_MW_WR_NS_M 0x1
682#define FW_RI_BIND_MW_WR_NS_V(x) ((x) << FW_RI_BIND_MW_WR_NS_S)
683#define FW_RI_BIND_MW_WR_NS_G(x) \
684 (((x) >> FW_RI_BIND_MW_WR_NS_S) & FW_RI_BIND_MW_WR_NS_M)
685#define FW_RI_BIND_MW_WR_NS_F FW_RI_BIND_MW_WR_NS_V(1U)
686
687#define FW_RI_BIND_MW_WR_DCACPU_S 0
688#define FW_RI_BIND_MW_WR_DCACPU_M 0x1f
689#define FW_RI_BIND_MW_WR_DCACPU_V(x) ((x) << FW_RI_BIND_MW_WR_DCACPU_S)
690#define FW_RI_BIND_MW_WR_DCACPU_G(x) \
691 (((x) >> FW_RI_BIND_MW_WR_DCACPU_S) & FW_RI_BIND_MW_WR_DCACPU_M)
692
693struct fw_ri_fr_nsmr_wr {
694 __u8 opcode;
695 __u8 flags;
696 __u16 wrid;
697 __u8 r1[3];
698 __u8 len16;
699 __u8 qpbinde_to_dcacpu;
700 __u8 pgsz_shift;
701 __u8 addr_type;
702 __u8 mem_perms;
703 __be32 stag;
704 __be32 len_hi;
705 __be32 len_lo;
706 __be32 va_hi;
707 __be32 va_lo_fbo;
708};
709
710#define FW_RI_FR_NSMR_WR_QPBINDE_S 6
711#define FW_RI_FR_NSMR_WR_QPBINDE_M 0x1
712#define FW_RI_FR_NSMR_WR_QPBINDE_V(x) ((x) << FW_RI_FR_NSMR_WR_QPBINDE_S)
713#define FW_RI_FR_NSMR_WR_QPBINDE_G(x) \
714 (((x) >> FW_RI_FR_NSMR_WR_QPBINDE_S) & FW_RI_FR_NSMR_WR_QPBINDE_M)
715#define FW_RI_FR_NSMR_WR_QPBINDE_F FW_RI_FR_NSMR_WR_QPBINDE_V(1U)
716
717#define FW_RI_FR_NSMR_WR_NS_S 5
718#define FW_RI_FR_NSMR_WR_NS_M 0x1
719#define FW_RI_FR_NSMR_WR_NS_V(x) ((x) << FW_RI_FR_NSMR_WR_NS_S)
720#define FW_RI_FR_NSMR_WR_NS_G(x) \
721 (((x) >> FW_RI_FR_NSMR_WR_NS_S) & FW_RI_FR_NSMR_WR_NS_M)
722#define FW_RI_FR_NSMR_WR_NS_F FW_RI_FR_NSMR_WR_NS_V(1U)
723
724#define FW_RI_FR_NSMR_WR_DCACPU_S 0
725#define FW_RI_FR_NSMR_WR_DCACPU_M 0x1f
726#define FW_RI_FR_NSMR_WR_DCACPU_V(x) ((x) << FW_RI_FR_NSMR_WR_DCACPU_S)
727#define FW_RI_FR_NSMR_WR_DCACPU_G(x) \
728 (((x) >> FW_RI_FR_NSMR_WR_DCACPU_S) & FW_RI_FR_NSMR_WR_DCACPU_M)
729
730struct fw_ri_fr_nsmr_tpte_wr {
731 __u8 opcode;
732 __u8 flags;
733 __u16 wrid;
734 __u8 r1[3];
735 __u8 len16;
736 __be32 r2;
737 __be32 stag;
738 struct fw_ri_tpte tpte;
739 __u64 pbl[2];
740};
741
742struct fw_ri_inv_lstag_wr {
743 __u8 opcode;
744 __u8 flags;
745 __u16 wrid;
746 __u8 r1[3];
747 __u8 len16;
748 __be32 r2;
749 __be32 stag_inv;
750};
751
752enum fw_ri_type {
753 FW_RI_TYPE_INIT,
754 FW_RI_TYPE_FINI,
755 FW_RI_TYPE_TERMINATE
756};
757
758enum fw_ri_init_p2ptype {
759 FW_RI_INIT_P2PTYPE_RDMA_WRITE = FW_RI_RDMA_WRITE,
760 FW_RI_INIT_P2PTYPE_READ_REQ = FW_RI_READ_REQ,
761 FW_RI_INIT_P2PTYPE_SEND = FW_RI_SEND,
762 FW_RI_INIT_P2PTYPE_SEND_WITH_INV = FW_RI_SEND_WITH_INV,
763 FW_RI_INIT_P2PTYPE_SEND_WITH_SE = FW_RI_SEND_WITH_SE,
764 FW_RI_INIT_P2PTYPE_SEND_WITH_SE_INV = FW_RI_SEND_WITH_SE_INV,
765 FW_RI_INIT_P2PTYPE_DISABLED = 0xf,
766};
767
768enum fw_ri_init_rqeqid_srq {
769 FW_RI_INIT_RQEQID_SRQ = 1 << 31,
770};
771
772struct fw_ri_wr {
773 __be32 op_compl;
774 __be32 flowid_len16;
775 __u64 cookie;
776 union fw_ri {
777 struct fw_ri_init {
778 __u8 type;
779 __u8 mpareqbit_p2ptype;
780 __u8 r4[2];
781 __u8 mpa_attrs;
782 __u8 qp_caps;
783 __be16 nrqe;
784 __be32 pdid;
785 __be32 qpid;
786 __be32 sq_eqid;
787 __be32 rq_eqid;
788 __be32 scqid;
789 __be32 rcqid;
790 __be32 ord_max;
791 __be32 ird_max;
792 __be32 iss;
793 __be32 irs;
794 __be32 hwrqsize;
795 __be32 hwrqaddr;
796 __be64 r5;
797 union fw_ri_init_p2p {
798 struct fw_ri_rdma_write_wr write;
799 struct fw_ri_rdma_read_wr read;
800 struct fw_ri_send_wr send;
801 } u;
802 } init;
803 struct fw_ri_fini {
804 __u8 type;
805 __u8 r3[7];
806 __be64 r4;
807 } fini;
808 struct fw_ri_terminate {
809 __u8 type;
810 __u8 r3[3];
811 __be32 immdlen;
812 __u8 termmsg[40];
813 } terminate;
814 } u;
815};
816
817#define FW_RI_WR_MPAREQBIT_S 7
818#define FW_RI_WR_MPAREQBIT_M 0x1
819#define FW_RI_WR_MPAREQBIT_V(x) ((x) << FW_RI_WR_MPAREQBIT_S)
820#define FW_RI_WR_MPAREQBIT_G(x) \
821 (((x) >> FW_RI_WR_MPAREQBIT_S) & FW_RI_WR_MPAREQBIT_M)
822#define FW_RI_WR_MPAREQBIT_F FW_RI_WR_MPAREQBIT_V(1U)
823
824#define FW_RI_WR_P2PTYPE_S 0
825#define FW_RI_WR_P2PTYPE_M 0xf
826#define FW_RI_WR_P2PTYPE_V(x) ((x) << FW_RI_WR_P2PTYPE_S)
827#define FW_RI_WR_P2PTYPE_G(x) \
828 (((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M)
829
830#endif /* _T4FW_RI_API_H_ */
1/*
2 * Copyright (c) 2009-2010 Chelsio, Inc. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 * - Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials
20 * provided with the distribution.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
26 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 * SOFTWARE.
30 */
31#ifndef _T4FW_RI_API_H_
32#define _T4FW_RI_API_H_
33
34#include "t4fw_api.h"
35
36enum fw_ri_wr_opcode {
37 FW_RI_RDMA_WRITE = 0x0, /* IETF RDMAP v1.0 ... */
38 FW_RI_READ_REQ = 0x1,
39 FW_RI_READ_RESP = 0x2,
40 FW_RI_SEND = 0x3,
41 FW_RI_SEND_WITH_INV = 0x4,
42 FW_RI_SEND_WITH_SE = 0x5,
43 FW_RI_SEND_WITH_SE_INV = 0x6,
44 FW_RI_TERMINATE = 0x7,
45 FW_RI_RDMA_INIT = 0x8, /* CHELSIO RI specific ... */
46 FW_RI_BIND_MW = 0x9,
47 FW_RI_FAST_REGISTER = 0xa,
48 FW_RI_LOCAL_INV = 0xb,
49 FW_RI_QP_MODIFY = 0xc,
50 FW_RI_BYPASS = 0xd,
51 FW_RI_RECEIVE = 0xe,
52
53 FW_RI_SGE_EC_CR_RETURN = 0xf
54};
55
56enum fw_ri_wr_flags {
57 FW_RI_COMPLETION_FLAG = 0x01,
58 FW_RI_NOTIFICATION_FLAG = 0x02,
59 FW_RI_SOLICITED_EVENT_FLAG = 0x04,
60 FW_RI_READ_FENCE_FLAG = 0x08,
61 FW_RI_LOCAL_FENCE_FLAG = 0x10,
62 FW_RI_RDMA_READ_INVALIDATE = 0x20
63};
64
65enum fw_ri_mpa_attrs {
66 FW_RI_MPA_RX_MARKER_ENABLE = 0x01,
67 FW_RI_MPA_TX_MARKER_ENABLE = 0x02,
68 FW_RI_MPA_CRC_ENABLE = 0x04,
69 FW_RI_MPA_IETF_ENABLE = 0x08
70};
71
72enum fw_ri_qp_caps {
73 FW_RI_QP_RDMA_READ_ENABLE = 0x01,
74 FW_RI_QP_RDMA_WRITE_ENABLE = 0x02,
75 FW_RI_QP_BIND_ENABLE = 0x04,
76 FW_RI_QP_FAST_REGISTER_ENABLE = 0x08,
77 FW_RI_QP_STAG0_ENABLE = 0x10
78};
79
80enum fw_ri_addr_type {
81 FW_RI_ZERO_BASED_TO = 0x00,
82 FW_RI_VA_BASED_TO = 0x01
83};
84
85enum fw_ri_mem_perms {
86 FW_RI_MEM_ACCESS_REM_WRITE = 0x01,
87 FW_RI_MEM_ACCESS_REM_READ = 0x02,
88 FW_RI_MEM_ACCESS_REM = 0x03,
89 FW_RI_MEM_ACCESS_LOCAL_WRITE = 0x04,
90 FW_RI_MEM_ACCESS_LOCAL_READ = 0x08,
91 FW_RI_MEM_ACCESS_LOCAL = 0x0C
92};
93
94enum fw_ri_stag_type {
95 FW_RI_STAG_NSMR = 0x00,
96 FW_RI_STAG_SMR = 0x01,
97 FW_RI_STAG_MW = 0x02,
98 FW_RI_STAG_MW_RELAXED = 0x03
99};
100
101enum fw_ri_data_op {
102 FW_RI_DATA_IMMD = 0x81,
103 FW_RI_DATA_DSGL = 0x82,
104 FW_RI_DATA_ISGL = 0x83
105};
106
107enum fw_ri_sgl_depth {
108 FW_RI_SGL_DEPTH_MAX_SQ = 16,
109 FW_RI_SGL_DEPTH_MAX_RQ = 4
110};
111
112struct fw_ri_dsge_pair {
113 __be32 len[2];
114 __be64 addr[2];
115};
116
117struct fw_ri_dsgl {
118 __u8 op;
119 __u8 r1;
120 __be16 nsge;
121 __be32 len0;
122 __be64 addr0;
123#ifndef C99_NOT_SUPPORTED
124 struct fw_ri_dsge_pair sge[0];
125#endif
126};
127
128struct fw_ri_sge {
129 __be32 stag;
130 __be32 len;
131 __be64 to;
132};
133
134struct fw_ri_isgl {
135 __u8 op;
136 __u8 r1;
137 __be16 nsge;
138 __be32 r2;
139#ifndef C99_NOT_SUPPORTED
140 struct fw_ri_sge sge[0];
141#endif
142};
143
144struct fw_ri_immd {
145 __u8 op;
146 __u8 r1;
147 __be16 r2;
148 __be32 immdlen;
149#ifndef C99_NOT_SUPPORTED
150 __u8 data[0];
151#endif
152};
153
154struct fw_ri_tpte {
155 __be32 valid_to_pdid;
156 __be32 locread_to_qpid;
157 __be32 nosnoop_pbladdr;
158 __be32 len_lo;
159 __be32 va_hi;
160 __be32 va_lo_fbo;
161 __be32 dca_mwbcnt_pstag;
162 __be32 len_hi;
163};
164
165#define FW_RI_TPTE_VALID_S 31
166#define FW_RI_TPTE_VALID_M 0x1
167#define FW_RI_TPTE_VALID_V(x) ((x) << FW_RI_TPTE_VALID_S)
168#define FW_RI_TPTE_VALID_G(x) \
169 (((x) >> FW_RI_TPTE_VALID_S) & FW_RI_TPTE_VALID_M)
170#define FW_RI_TPTE_VALID_F FW_RI_TPTE_VALID_V(1U)
171
172#define FW_RI_TPTE_STAGKEY_S 23
173#define FW_RI_TPTE_STAGKEY_M 0xff
174#define FW_RI_TPTE_STAGKEY_V(x) ((x) << FW_RI_TPTE_STAGKEY_S)
175#define FW_RI_TPTE_STAGKEY_G(x) \
176 (((x) >> FW_RI_TPTE_STAGKEY_S) & FW_RI_TPTE_STAGKEY_M)
177
178#define FW_RI_TPTE_STAGSTATE_S 22
179#define FW_RI_TPTE_STAGSTATE_M 0x1
180#define FW_RI_TPTE_STAGSTATE_V(x) ((x) << FW_RI_TPTE_STAGSTATE_S)
181#define FW_RI_TPTE_STAGSTATE_G(x) \
182 (((x) >> FW_RI_TPTE_STAGSTATE_S) & FW_RI_TPTE_STAGSTATE_M)
183#define FW_RI_TPTE_STAGSTATE_F FW_RI_TPTE_STAGSTATE_V(1U)
184
185#define FW_RI_TPTE_STAGTYPE_S 20
186#define FW_RI_TPTE_STAGTYPE_M 0x3
187#define FW_RI_TPTE_STAGTYPE_V(x) ((x) << FW_RI_TPTE_STAGTYPE_S)
188#define FW_RI_TPTE_STAGTYPE_G(x) \
189 (((x) >> FW_RI_TPTE_STAGTYPE_S) & FW_RI_TPTE_STAGTYPE_M)
190
191#define FW_RI_TPTE_PDID_S 0
192#define FW_RI_TPTE_PDID_M 0xfffff
193#define FW_RI_TPTE_PDID_V(x) ((x) << FW_RI_TPTE_PDID_S)
194#define FW_RI_TPTE_PDID_G(x) \
195 (((x) >> FW_RI_TPTE_PDID_S) & FW_RI_TPTE_PDID_M)
196
197#define FW_RI_TPTE_PERM_S 28
198#define FW_RI_TPTE_PERM_M 0xf
199#define FW_RI_TPTE_PERM_V(x) ((x) << FW_RI_TPTE_PERM_S)
200#define FW_RI_TPTE_PERM_G(x) \
201 (((x) >> FW_RI_TPTE_PERM_S) & FW_RI_TPTE_PERM_M)
202
203#define FW_RI_TPTE_REMINVDIS_S 27
204#define FW_RI_TPTE_REMINVDIS_M 0x1
205#define FW_RI_TPTE_REMINVDIS_V(x) ((x) << FW_RI_TPTE_REMINVDIS_S)
206#define FW_RI_TPTE_REMINVDIS_G(x) \
207 (((x) >> FW_RI_TPTE_REMINVDIS_S) & FW_RI_TPTE_REMINVDIS_M)
208#define FW_RI_TPTE_REMINVDIS_F FW_RI_TPTE_REMINVDIS_V(1U)
209
210#define FW_RI_TPTE_ADDRTYPE_S 26
211#define FW_RI_TPTE_ADDRTYPE_M 1
212#define FW_RI_TPTE_ADDRTYPE_V(x) ((x) << FW_RI_TPTE_ADDRTYPE_S)
213#define FW_RI_TPTE_ADDRTYPE_G(x) \
214 (((x) >> FW_RI_TPTE_ADDRTYPE_S) & FW_RI_TPTE_ADDRTYPE_M)
215#define FW_RI_TPTE_ADDRTYPE_F FW_RI_TPTE_ADDRTYPE_V(1U)
216
217#define FW_RI_TPTE_MWBINDEN_S 25
218#define FW_RI_TPTE_MWBINDEN_M 0x1
219#define FW_RI_TPTE_MWBINDEN_V(x) ((x) << FW_RI_TPTE_MWBINDEN_S)
220#define FW_RI_TPTE_MWBINDEN_G(x) \
221 (((x) >> FW_RI_TPTE_MWBINDEN_S) & FW_RI_TPTE_MWBINDEN_M)
222#define FW_RI_TPTE_MWBINDEN_F FW_RI_TPTE_MWBINDEN_V(1U)
223
224#define FW_RI_TPTE_PS_S 20
225#define FW_RI_TPTE_PS_M 0x1f
226#define FW_RI_TPTE_PS_V(x) ((x) << FW_RI_TPTE_PS_S)
227#define FW_RI_TPTE_PS_G(x) \
228 (((x) >> FW_RI_TPTE_PS_S) & FW_RI_TPTE_PS_M)
229
230#define FW_RI_TPTE_QPID_S 0
231#define FW_RI_TPTE_QPID_M 0xfffff
232#define FW_RI_TPTE_QPID_V(x) ((x) << FW_RI_TPTE_QPID_S)
233#define FW_RI_TPTE_QPID_G(x) \
234 (((x) >> FW_RI_TPTE_QPID_S) & FW_RI_TPTE_QPID_M)
235
236#define FW_RI_TPTE_NOSNOOP_S 30
237#define FW_RI_TPTE_NOSNOOP_M 0x1
238#define FW_RI_TPTE_NOSNOOP_V(x) ((x) << FW_RI_TPTE_NOSNOOP_S)
239#define FW_RI_TPTE_NOSNOOP_G(x) \
240 (((x) >> FW_RI_TPTE_NOSNOOP_S) & FW_RI_TPTE_NOSNOOP_M)
241#define FW_RI_TPTE_NOSNOOP_F FW_RI_TPTE_NOSNOOP_V(1U)
242
243#define FW_RI_TPTE_PBLADDR_S 0
244#define FW_RI_TPTE_PBLADDR_M 0x1fffffff
245#define FW_RI_TPTE_PBLADDR_V(x) ((x) << FW_RI_TPTE_PBLADDR_S)
246#define FW_RI_TPTE_PBLADDR_G(x) \
247 (((x) >> FW_RI_TPTE_PBLADDR_S) & FW_RI_TPTE_PBLADDR_M)
248
249#define FW_RI_TPTE_DCA_S 24
250#define FW_RI_TPTE_DCA_M 0x1f
251#define FW_RI_TPTE_DCA_V(x) ((x) << FW_RI_TPTE_DCA_S)
252#define FW_RI_TPTE_DCA_G(x) \
253 (((x) >> FW_RI_TPTE_DCA_S) & FW_RI_TPTE_DCA_M)
254
255#define FW_RI_TPTE_MWBCNT_PSTAG_S 0
256#define FW_RI_TPTE_MWBCNT_PSTAG_M 0xffffff
257#define FW_RI_TPTE_MWBCNT_PSTAT_V(x) \
258 ((x) << FW_RI_TPTE_MWBCNT_PSTAG_S)
259#define FW_RI_TPTE_MWBCNT_PSTAG_G(x) \
260 (((x) >> FW_RI_TPTE_MWBCNT_PSTAG_S) & FW_RI_TPTE_MWBCNT_PSTAG_M)
261
262enum fw_ri_res_type {
263 FW_RI_RES_TYPE_SQ,
264 FW_RI_RES_TYPE_RQ,
265 FW_RI_RES_TYPE_CQ,
266};
267
268enum fw_ri_res_op {
269 FW_RI_RES_OP_WRITE,
270 FW_RI_RES_OP_RESET,
271};
272
273struct fw_ri_res {
274 union fw_ri_restype {
275 struct fw_ri_res_sqrq {
276 __u8 restype;
277 __u8 op;
278 __be16 r3;
279 __be32 eqid;
280 __be32 r4[2];
281 __be32 fetchszm_to_iqid;
282 __be32 dcaen_to_eqsize;
283 __be64 eqaddr;
284 } sqrq;
285 struct fw_ri_res_cq {
286 __u8 restype;
287 __u8 op;
288 __be16 r3;
289 __be32 iqid;
290 __be32 r4[2];
291 __be32 iqandst_to_iqandstindex;
292 __be16 iqdroprss_to_iqesize;
293 __be16 iqsize;
294 __be64 iqaddr;
295 __be32 iqns_iqro;
296 __be32 r6_lo;
297 __be64 r7;
298 } cq;
299 } u;
300};
301
302struct fw_ri_res_wr {
303 __be32 op_nres;
304 __be32 len16_pkd;
305 __u64 cookie;
306#ifndef C99_NOT_SUPPORTED
307 struct fw_ri_res res[0];
308#endif
309};
310
311#define FW_RI_RES_WR_NRES_S 0
312#define FW_RI_RES_WR_NRES_M 0xff
313#define FW_RI_RES_WR_NRES_V(x) ((x) << FW_RI_RES_WR_NRES_S)
314#define FW_RI_RES_WR_NRES_G(x) \
315 (((x) >> FW_RI_RES_WR_NRES_S) & FW_RI_RES_WR_NRES_M)
316
317#define FW_RI_RES_WR_FETCHSZM_S 26
318#define FW_RI_RES_WR_FETCHSZM_M 0x1
319#define FW_RI_RES_WR_FETCHSZM_V(x) ((x) << FW_RI_RES_WR_FETCHSZM_S)
320#define FW_RI_RES_WR_FETCHSZM_G(x) \
321 (((x) >> FW_RI_RES_WR_FETCHSZM_S) & FW_RI_RES_WR_FETCHSZM_M)
322#define FW_RI_RES_WR_FETCHSZM_F FW_RI_RES_WR_FETCHSZM_V(1U)
323
324#define FW_RI_RES_WR_STATUSPGNS_S 25
325#define FW_RI_RES_WR_STATUSPGNS_M 0x1
326#define FW_RI_RES_WR_STATUSPGNS_V(x) ((x) << FW_RI_RES_WR_STATUSPGNS_S)
327#define FW_RI_RES_WR_STATUSPGNS_G(x) \
328 (((x) >> FW_RI_RES_WR_STATUSPGNS_S) & FW_RI_RES_WR_STATUSPGNS_M)
329#define FW_RI_RES_WR_STATUSPGNS_F FW_RI_RES_WR_STATUSPGNS_V(1U)
330
331#define FW_RI_RES_WR_STATUSPGRO_S 24
332#define FW_RI_RES_WR_STATUSPGRO_M 0x1
333#define FW_RI_RES_WR_STATUSPGRO_V(x) ((x) << FW_RI_RES_WR_STATUSPGRO_S)
334#define FW_RI_RES_WR_STATUSPGRO_G(x) \
335 (((x) >> FW_RI_RES_WR_STATUSPGRO_S) & FW_RI_RES_WR_STATUSPGRO_M)
336#define FW_RI_RES_WR_STATUSPGRO_F FW_RI_RES_WR_STATUSPGRO_V(1U)
337
338#define FW_RI_RES_WR_FETCHNS_S 23
339#define FW_RI_RES_WR_FETCHNS_M 0x1
340#define FW_RI_RES_WR_FETCHNS_V(x) ((x) << FW_RI_RES_WR_FETCHNS_S)
341#define FW_RI_RES_WR_FETCHNS_G(x) \
342 (((x) >> FW_RI_RES_WR_FETCHNS_S) & FW_RI_RES_WR_FETCHNS_M)
343#define FW_RI_RES_WR_FETCHNS_F FW_RI_RES_WR_FETCHNS_V(1U)
344
345#define FW_RI_RES_WR_FETCHRO_S 22
346#define FW_RI_RES_WR_FETCHRO_M 0x1
347#define FW_RI_RES_WR_FETCHRO_V(x) ((x) << FW_RI_RES_WR_FETCHRO_S)
348#define FW_RI_RES_WR_FETCHRO_G(x) \
349 (((x) >> FW_RI_RES_WR_FETCHRO_S) & FW_RI_RES_WR_FETCHRO_M)
350#define FW_RI_RES_WR_FETCHRO_F FW_RI_RES_WR_FETCHRO_V(1U)
351
352#define FW_RI_RES_WR_HOSTFCMODE_S 20
353#define FW_RI_RES_WR_HOSTFCMODE_M 0x3
354#define FW_RI_RES_WR_HOSTFCMODE_V(x) ((x) << FW_RI_RES_WR_HOSTFCMODE_S)
355#define FW_RI_RES_WR_HOSTFCMODE_G(x) \
356 (((x) >> FW_RI_RES_WR_HOSTFCMODE_S) & FW_RI_RES_WR_HOSTFCMODE_M)
357
358#define FW_RI_RES_WR_CPRIO_S 19
359#define FW_RI_RES_WR_CPRIO_M 0x1
360#define FW_RI_RES_WR_CPRIO_V(x) ((x) << FW_RI_RES_WR_CPRIO_S)
361#define FW_RI_RES_WR_CPRIO_G(x) \
362 (((x) >> FW_RI_RES_WR_CPRIO_S) & FW_RI_RES_WR_CPRIO_M)
363#define FW_RI_RES_WR_CPRIO_F FW_RI_RES_WR_CPRIO_V(1U)
364
365#define FW_RI_RES_WR_ONCHIP_S 18
366#define FW_RI_RES_WR_ONCHIP_M 0x1
367#define FW_RI_RES_WR_ONCHIP_V(x) ((x) << FW_RI_RES_WR_ONCHIP_S)
368#define FW_RI_RES_WR_ONCHIP_G(x) \
369 (((x) >> FW_RI_RES_WR_ONCHIP_S) & FW_RI_RES_WR_ONCHIP_M)
370#define FW_RI_RES_WR_ONCHIP_F FW_RI_RES_WR_ONCHIP_V(1U)
371
372#define FW_RI_RES_WR_PCIECHN_S 16
373#define FW_RI_RES_WR_PCIECHN_M 0x3
374#define FW_RI_RES_WR_PCIECHN_V(x) ((x) << FW_RI_RES_WR_PCIECHN_S)
375#define FW_RI_RES_WR_PCIECHN_G(x) \
376 (((x) >> FW_RI_RES_WR_PCIECHN_S) & FW_RI_RES_WR_PCIECHN_M)
377
378#define FW_RI_RES_WR_IQID_S 0
379#define FW_RI_RES_WR_IQID_M 0xffff
380#define FW_RI_RES_WR_IQID_V(x) ((x) << FW_RI_RES_WR_IQID_S)
381#define FW_RI_RES_WR_IQID_G(x) \
382 (((x) >> FW_RI_RES_WR_IQID_S) & FW_RI_RES_WR_IQID_M)
383
384#define FW_RI_RES_WR_DCAEN_S 31
385#define FW_RI_RES_WR_DCAEN_M 0x1
386#define FW_RI_RES_WR_DCAEN_V(x) ((x) << FW_RI_RES_WR_DCAEN_S)
387#define FW_RI_RES_WR_DCAEN_G(x) \
388 (((x) >> FW_RI_RES_WR_DCAEN_S) & FW_RI_RES_WR_DCAEN_M)
389#define FW_RI_RES_WR_DCAEN_F FW_RI_RES_WR_DCAEN_V(1U)
390
391#define FW_RI_RES_WR_DCACPU_S 26
392#define FW_RI_RES_WR_DCACPU_M 0x1f
393#define FW_RI_RES_WR_DCACPU_V(x) ((x) << FW_RI_RES_WR_DCACPU_S)
394#define FW_RI_RES_WR_DCACPU_G(x) \
395 (((x) >> FW_RI_RES_WR_DCACPU_S) & FW_RI_RES_WR_DCACPU_M)
396
397#define FW_RI_RES_WR_FBMIN_S 23
398#define FW_RI_RES_WR_FBMIN_M 0x7
399#define FW_RI_RES_WR_FBMIN_V(x) ((x) << FW_RI_RES_WR_FBMIN_S)
400#define FW_RI_RES_WR_FBMIN_G(x) \
401 (((x) >> FW_RI_RES_WR_FBMIN_S) & FW_RI_RES_WR_FBMIN_M)
402
403#define FW_RI_RES_WR_FBMAX_S 20
404#define FW_RI_RES_WR_FBMAX_M 0x7
405#define FW_RI_RES_WR_FBMAX_V(x) ((x) << FW_RI_RES_WR_FBMAX_S)
406#define FW_RI_RES_WR_FBMAX_G(x) \
407 (((x) >> FW_RI_RES_WR_FBMAX_S) & FW_RI_RES_WR_FBMAX_M)
408
409#define FW_RI_RES_WR_CIDXFTHRESHO_S 19
410#define FW_RI_RES_WR_CIDXFTHRESHO_M 0x1
411#define FW_RI_RES_WR_CIDXFTHRESHO_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESHO_S)
412#define FW_RI_RES_WR_CIDXFTHRESHO_G(x) \
413 (((x) >> FW_RI_RES_WR_CIDXFTHRESHO_S) & FW_RI_RES_WR_CIDXFTHRESHO_M)
414#define FW_RI_RES_WR_CIDXFTHRESHO_F FW_RI_RES_WR_CIDXFTHRESHO_V(1U)
415
416#define FW_RI_RES_WR_CIDXFTHRESH_S 16
417#define FW_RI_RES_WR_CIDXFTHRESH_M 0x7
418#define FW_RI_RES_WR_CIDXFTHRESH_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESH_S)
419#define FW_RI_RES_WR_CIDXFTHRESH_G(x) \
420 (((x) >> FW_RI_RES_WR_CIDXFTHRESH_S) & FW_RI_RES_WR_CIDXFTHRESH_M)
421
422#define FW_RI_RES_WR_EQSIZE_S 0
423#define FW_RI_RES_WR_EQSIZE_M 0xffff
424#define FW_RI_RES_WR_EQSIZE_V(x) ((x) << FW_RI_RES_WR_EQSIZE_S)
425#define FW_RI_RES_WR_EQSIZE_G(x) \
426 (((x) >> FW_RI_RES_WR_EQSIZE_S) & FW_RI_RES_WR_EQSIZE_M)
427
428#define FW_RI_RES_WR_IQANDST_S 15
429#define FW_RI_RES_WR_IQANDST_M 0x1
430#define FW_RI_RES_WR_IQANDST_V(x) ((x) << FW_RI_RES_WR_IQANDST_S)
431#define FW_RI_RES_WR_IQANDST_G(x) \
432 (((x) >> FW_RI_RES_WR_IQANDST_S) & FW_RI_RES_WR_IQANDST_M)
433#define FW_RI_RES_WR_IQANDST_F FW_RI_RES_WR_IQANDST_V(1U)
434
435#define FW_RI_RES_WR_IQANUS_S 14
436#define FW_RI_RES_WR_IQANUS_M 0x1
437#define FW_RI_RES_WR_IQANUS_V(x) ((x) << FW_RI_RES_WR_IQANUS_S)
438#define FW_RI_RES_WR_IQANUS_G(x) \
439 (((x) >> FW_RI_RES_WR_IQANUS_S) & FW_RI_RES_WR_IQANUS_M)
440#define FW_RI_RES_WR_IQANUS_F FW_RI_RES_WR_IQANUS_V(1U)
441
442#define FW_RI_RES_WR_IQANUD_S 12
443#define FW_RI_RES_WR_IQANUD_M 0x3
444#define FW_RI_RES_WR_IQANUD_V(x) ((x) << FW_RI_RES_WR_IQANUD_S)
445#define FW_RI_RES_WR_IQANUD_G(x) \
446 (((x) >> FW_RI_RES_WR_IQANUD_S) & FW_RI_RES_WR_IQANUD_M)
447
448#define FW_RI_RES_WR_IQANDSTINDEX_S 0
449#define FW_RI_RES_WR_IQANDSTINDEX_M 0xfff
450#define FW_RI_RES_WR_IQANDSTINDEX_V(x) ((x) << FW_RI_RES_WR_IQANDSTINDEX_S)
451#define FW_RI_RES_WR_IQANDSTINDEX_G(x) \
452 (((x) >> FW_RI_RES_WR_IQANDSTINDEX_S) & FW_RI_RES_WR_IQANDSTINDEX_M)
453
454#define FW_RI_RES_WR_IQDROPRSS_S 15
455#define FW_RI_RES_WR_IQDROPRSS_M 0x1
456#define FW_RI_RES_WR_IQDROPRSS_V(x) ((x) << FW_RI_RES_WR_IQDROPRSS_S)
457#define FW_RI_RES_WR_IQDROPRSS_G(x) \
458 (((x) >> FW_RI_RES_WR_IQDROPRSS_S) & FW_RI_RES_WR_IQDROPRSS_M)
459#define FW_RI_RES_WR_IQDROPRSS_F FW_RI_RES_WR_IQDROPRSS_V(1U)
460
461#define FW_RI_RES_WR_IQGTSMODE_S 14
462#define FW_RI_RES_WR_IQGTSMODE_M 0x1
463#define FW_RI_RES_WR_IQGTSMODE_V(x) ((x) << FW_RI_RES_WR_IQGTSMODE_S)
464#define FW_RI_RES_WR_IQGTSMODE_G(x) \
465 (((x) >> FW_RI_RES_WR_IQGTSMODE_S) & FW_RI_RES_WR_IQGTSMODE_M)
466#define FW_RI_RES_WR_IQGTSMODE_F FW_RI_RES_WR_IQGTSMODE_V(1U)
467
468#define FW_RI_RES_WR_IQPCIECH_S 12
469#define FW_RI_RES_WR_IQPCIECH_M 0x3
470#define FW_RI_RES_WR_IQPCIECH_V(x) ((x) << FW_RI_RES_WR_IQPCIECH_S)
471#define FW_RI_RES_WR_IQPCIECH_G(x) \
472 (((x) >> FW_RI_RES_WR_IQPCIECH_S) & FW_RI_RES_WR_IQPCIECH_M)
473
474#define FW_RI_RES_WR_IQDCAEN_S 11
475#define FW_RI_RES_WR_IQDCAEN_M 0x1
476#define FW_RI_RES_WR_IQDCAEN_V(x) ((x) << FW_RI_RES_WR_IQDCAEN_S)
477#define FW_RI_RES_WR_IQDCAEN_G(x) \
478 (((x) >> FW_RI_RES_WR_IQDCAEN_S) & FW_RI_RES_WR_IQDCAEN_M)
479#define FW_RI_RES_WR_IQDCAEN_F FW_RI_RES_WR_IQDCAEN_V(1U)
480
481#define FW_RI_RES_WR_IQDCACPU_S 6
482#define FW_RI_RES_WR_IQDCACPU_M 0x1f
483#define FW_RI_RES_WR_IQDCACPU_V(x) ((x) << FW_RI_RES_WR_IQDCACPU_S)
484#define FW_RI_RES_WR_IQDCACPU_G(x) \
485 (((x) >> FW_RI_RES_WR_IQDCACPU_S) & FW_RI_RES_WR_IQDCACPU_M)
486
487#define FW_RI_RES_WR_IQINTCNTTHRESH_S 4
488#define FW_RI_RES_WR_IQINTCNTTHRESH_M 0x3
489#define FW_RI_RES_WR_IQINTCNTTHRESH_V(x) \
490 ((x) << FW_RI_RES_WR_IQINTCNTTHRESH_S)
491#define FW_RI_RES_WR_IQINTCNTTHRESH_G(x) \
492 (((x) >> FW_RI_RES_WR_IQINTCNTTHRESH_S) & FW_RI_RES_WR_IQINTCNTTHRESH_M)
493
494#define FW_RI_RES_WR_IQO_S 3
495#define FW_RI_RES_WR_IQO_M 0x1
496#define FW_RI_RES_WR_IQO_V(x) ((x) << FW_RI_RES_WR_IQO_S)
497#define FW_RI_RES_WR_IQO_G(x) \
498 (((x) >> FW_RI_RES_WR_IQO_S) & FW_RI_RES_WR_IQO_M)
499#define FW_RI_RES_WR_IQO_F FW_RI_RES_WR_IQO_V(1U)
500
501#define FW_RI_RES_WR_IQCPRIO_S 2
502#define FW_RI_RES_WR_IQCPRIO_M 0x1
503#define FW_RI_RES_WR_IQCPRIO_V(x) ((x) << FW_RI_RES_WR_IQCPRIO_S)
504#define FW_RI_RES_WR_IQCPRIO_G(x) \
505 (((x) >> FW_RI_RES_WR_IQCPRIO_S) & FW_RI_RES_WR_IQCPRIO_M)
506#define FW_RI_RES_WR_IQCPRIO_F FW_RI_RES_WR_IQCPRIO_V(1U)
507
508#define FW_RI_RES_WR_IQESIZE_S 0
509#define FW_RI_RES_WR_IQESIZE_M 0x3
510#define FW_RI_RES_WR_IQESIZE_V(x) ((x) << FW_RI_RES_WR_IQESIZE_S)
511#define FW_RI_RES_WR_IQESIZE_G(x) \
512 (((x) >> FW_RI_RES_WR_IQESIZE_S) & FW_RI_RES_WR_IQESIZE_M)
513
514#define FW_RI_RES_WR_IQNS_S 31
515#define FW_RI_RES_WR_IQNS_M 0x1
516#define FW_RI_RES_WR_IQNS_V(x) ((x) << FW_RI_RES_WR_IQNS_S)
517#define FW_RI_RES_WR_IQNS_G(x) \
518 (((x) >> FW_RI_RES_WR_IQNS_S) & FW_RI_RES_WR_IQNS_M)
519#define FW_RI_RES_WR_IQNS_F FW_RI_RES_WR_IQNS_V(1U)
520
521#define FW_RI_RES_WR_IQRO_S 30
522#define FW_RI_RES_WR_IQRO_M 0x1
523#define FW_RI_RES_WR_IQRO_V(x) ((x) << FW_RI_RES_WR_IQRO_S)
524#define FW_RI_RES_WR_IQRO_G(x) \
525 (((x) >> FW_RI_RES_WR_IQRO_S) & FW_RI_RES_WR_IQRO_M)
526#define FW_RI_RES_WR_IQRO_F FW_RI_RES_WR_IQRO_V(1U)
527
528struct fw_ri_rdma_write_wr {
529 __u8 opcode;
530 __u8 flags;
531 __u16 wrid;
532 __u8 r1[3];
533 __u8 len16;
534 __be64 r2;
535 __be32 plen;
536 __be32 stag_sink;
537 __be64 to_sink;
538#ifndef C99_NOT_SUPPORTED
539 union {
540 struct fw_ri_immd immd_src[0];
541 struct fw_ri_isgl isgl_src[0];
542 } u;
543#endif
544};
545
546struct fw_ri_send_wr {
547 __u8 opcode;
548 __u8 flags;
549 __u16 wrid;
550 __u8 r1[3];
551 __u8 len16;
552 __be32 sendop_pkd;
553 __be32 stag_inv;
554 __be32 plen;
555 __be32 r3;
556 __be64 r4;
557#ifndef C99_NOT_SUPPORTED
558 union {
559 struct fw_ri_immd immd_src[0];
560 struct fw_ri_isgl isgl_src[0];
561 } u;
562#endif
563};
564
565#define FW_RI_SEND_WR_SENDOP_S 0
566#define FW_RI_SEND_WR_SENDOP_M 0xf
567#define FW_RI_SEND_WR_SENDOP_V(x) ((x) << FW_RI_SEND_WR_SENDOP_S)
568#define FW_RI_SEND_WR_SENDOP_G(x) \
569 (((x) >> FW_RI_SEND_WR_SENDOP_S) & FW_RI_SEND_WR_SENDOP_M)
570
571struct fw_ri_rdma_read_wr {
572 __u8 opcode;
573 __u8 flags;
574 __u16 wrid;
575 __u8 r1[3];
576 __u8 len16;
577 __be64 r2;
578 __be32 stag_sink;
579 __be32 to_sink_hi;
580 __be32 to_sink_lo;
581 __be32 plen;
582 __be32 stag_src;
583 __be32 to_src_hi;
584 __be32 to_src_lo;
585 __be32 r5;
586};
587
588struct fw_ri_recv_wr {
589 __u8 opcode;
590 __u8 r1;
591 __u16 wrid;
592 __u8 r2[3];
593 __u8 len16;
594 struct fw_ri_isgl isgl;
595};
596
597struct fw_ri_bind_mw_wr {
598 __u8 opcode;
599 __u8 flags;
600 __u16 wrid;
601 __u8 r1[3];
602 __u8 len16;
603 __u8 qpbinde_to_dcacpu;
604 __u8 pgsz_shift;
605 __u8 addr_type;
606 __u8 mem_perms;
607 __be32 stag_mr;
608 __be32 stag_mw;
609 __be32 r3;
610 __be64 len_mw;
611 __be64 va_fbo;
612 __be64 r4;
613};
614
615#define FW_RI_BIND_MW_WR_QPBINDE_S 6
616#define FW_RI_BIND_MW_WR_QPBINDE_M 0x1
617#define FW_RI_BIND_MW_WR_QPBINDE_V(x) ((x) << FW_RI_BIND_MW_WR_QPBINDE_S)
618#define FW_RI_BIND_MW_WR_QPBINDE_G(x) \
619 (((x) >> FW_RI_BIND_MW_WR_QPBINDE_S) & FW_RI_BIND_MW_WR_QPBINDE_M)
620#define FW_RI_BIND_MW_WR_QPBINDE_F FW_RI_BIND_MW_WR_QPBINDE_V(1U)
621
622#define FW_RI_BIND_MW_WR_NS_S 5
623#define FW_RI_BIND_MW_WR_NS_M 0x1
624#define FW_RI_BIND_MW_WR_NS_V(x) ((x) << FW_RI_BIND_MW_WR_NS_S)
625#define FW_RI_BIND_MW_WR_NS_G(x) \
626 (((x) >> FW_RI_BIND_MW_WR_NS_S) & FW_RI_BIND_MW_WR_NS_M)
627#define FW_RI_BIND_MW_WR_NS_F FW_RI_BIND_MW_WR_NS_V(1U)
628
629#define FW_RI_BIND_MW_WR_DCACPU_S 0
630#define FW_RI_BIND_MW_WR_DCACPU_M 0x1f
631#define FW_RI_BIND_MW_WR_DCACPU_V(x) ((x) << FW_RI_BIND_MW_WR_DCACPU_S)
632#define FW_RI_BIND_MW_WR_DCACPU_G(x) \
633 (((x) >> FW_RI_BIND_MW_WR_DCACPU_S) & FW_RI_BIND_MW_WR_DCACPU_M)
634
635struct fw_ri_fr_nsmr_wr {
636 __u8 opcode;
637 __u8 flags;
638 __u16 wrid;
639 __u8 r1[3];
640 __u8 len16;
641 __u8 qpbinde_to_dcacpu;
642 __u8 pgsz_shift;
643 __u8 addr_type;
644 __u8 mem_perms;
645 __be32 stag;
646 __be32 len_hi;
647 __be32 len_lo;
648 __be32 va_hi;
649 __be32 va_lo_fbo;
650};
651
652#define FW_RI_FR_NSMR_WR_QPBINDE_S 6
653#define FW_RI_FR_NSMR_WR_QPBINDE_M 0x1
654#define FW_RI_FR_NSMR_WR_QPBINDE_V(x) ((x) << FW_RI_FR_NSMR_WR_QPBINDE_S)
655#define FW_RI_FR_NSMR_WR_QPBINDE_G(x) \
656 (((x) >> FW_RI_FR_NSMR_WR_QPBINDE_S) & FW_RI_FR_NSMR_WR_QPBINDE_M)
657#define FW_RI_FR_NSMR_WR_QPBINDE_F FW_RI_FR_NSMR_WR_QPBINDE_V(1U)
658
659#define FW_RI_FR_NSMR_WR_NS_S 5
660#define FW_RI_FR_NSMR_WR_NS_M 0x1
661#define FW_RI_FR_NSMR_WR_NS_V(x) ((x) << FW_RI_FR_NSMR_WR_NS_S)
662#define FW_RI_FR_NSMR_WR_NS_G(x) \
663 (((x) >> FW_RI_FR_NSMR_WR_NS_S) & FW_RI_FR_NSMR_WR_NS_M)
664#define FW_RI_FR_NSMR_WR_NS_F FW_RI_FR_NSMR_WR_NS_V(1U)
665
666#define FW_RI_FR_NSMR_WR_DCACPU_S 0
667#define FW_RI_FR_NSMR_WR_DCACPU_M 0x1f
668#define FW_RI_FR_NSMR_WR_DCACPU_V(x) ((x) << FW_RI_FR_NSMR_WR_DCACPU_S)
669#define FW_RI_FR_NSMR_WR_DCACPU_G(x) \
670 (((x) >> FW_RI_FR_NSMR_WR_DCACPU_S) & FW_RI_FR_NSMR_WR_DCACPU_M)
671
672struct fw_ri_fr_nsmr_tpte_wr {
673 __u8 opcode;
674 __u8 flags;
675 __u16 wrid;
676 __u8 r1[3];
677 __u8 len16;
678 __be32 r2;
679 __be32 stag;
680 struct fw_ri_tpte tpte;
681 __u64 pbl[2];
682};
683
684struct fw_ri_inv_lstag_wr {
685 __u8 opcode;
686 __u8 flags;
687 __u16 wrid;
688 __u8 r1[3];
689 __u8 len16;
690 __be32 r2;
691 __be32 stag_inv;
692};
693
694enum fw_ri_type {
695 FW_RI_TYPE_INIT,
696 FW_RI_TYPE_FINI,
697 FW_RI_TYPE_TERMINATE
698};
699
700enum fw_ri_init_p2ptype {
701 FW_RI_INIT_P2PTYPE_RDMA_WRITE = FW_RI_RDMA_WRITE,
702 FW_RI_INIT_P2PTYPE_READ_REQ = FW_RI_READ_REQ,
703 FW_RI_INIT_P2PTYPE_SEND = FW_RI_SEND,
704 FW_RI_INIT_P2PTYPE_SEND_WITH_INV = FW_RI_SEND_WITH_INV,
705 FW_RI_INIT_P2PTYPE_SEND_WITH_SE = FW_RI_SEND_WITH_SE,
706 FW_RI_INIT_P2PTYPE_SEND_WITH_SE_INV = FW_RI_SEND_WITH_SE_INV,
707 FW_RI_INIT_P2PTYPE_DISABLED = 0xf,
708};
709
710struct fw_ri_wr {
711 __be32 op_compl;
712 __be32 flowid_len16;
713 __u64 cookie;
714 union fw_ri {
715 struct fw_ri_init {
716 __u8 type;
717 __u8 mpareqbit_p2ptype;
718 __u8 r4[2];
719 __u8 mpa_attrs;
720 __u8 qp_caps;
721 __be16 nrqe;
722 __be32 pdid;
723 __be32 qpid;
724 __be32 sq_eqid;
725 __be32 rq_eqid;
726 __be32 scqid;
727 __be32 rcqid;
728 __be32 ord_max;
729 __be32 ird_max;
730 __be32 iss;
731 __be32 irs;
732 __be32 hwrqsize;
733 __be32 hwrqaddr;
734 __be64 r5;
735 union fw_ri_init_p2p {
736 struct fw_ri_rdma_write_wr write;
737 struct fw_ri_rdma_read_wr read;
738 struct fw_ri_send_wr send;
739 } u;
740 } init;
741 struct fw_ri_fini {
742 __u8 type;
743 __u8 r3[7];
744 __be64 r4;
745 } fini;
746 struct fw_ri_terminate {
747 __u8 type;
748 __u8 r3[3];
749 __be32 immdlen;
750 __u8 termmsg[40];
751 } terminate;
752 } u;
753};
754
755#define FW_RI_WR_MPAREQBIT_S 7
756#define FW_RI_WR_MPAREQBIT_M 0x1
757#define FW_RI_WR_MPAREQBIT_V(x) ((x) << FW_RI_WR_MPAREQBIT_S)
758#define FW_RI_WR_MPAREQBIT_G(x) \
759 (((x) >> FW_RI_WR_MPAREQBIT_S) & FW_RI_WR_MPAREQBIT_M)
760#define FW_RI_WR_MPAREQBIT_F FW_RI_WR_MPAREQBIT_V(1U)
761
762#define FW_RI_WR_P2PTYPE_S 0
763#define FW_RI_WR_P2PTYPE_M 0xf
764#define FW_RI_WR_P2PTYPE_V(x) ((x) << FW_RI_WR_P2PTYPE_S)
765#define FW_RI_WR_P2PTYPE_G(x) \
766 (((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M)
767
768#endif /* _T4FW_RI_API_H_ */