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