Linux Audio

Check our new training course

Loading...
v5.14.15
  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_ */
v4.17
  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_ */