xref: /OK3568_Linux_fs/kernel/include/linux/qed/fcoe_common.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2*4882a593Smuzhiyun /* QLogic qed NIC Driver
3*4882a593Smuzhiyun  * Copyright (c) 2015 QLogic Corporation
4*4882a593Smuzhiyun  * Copyright (c) 2019-2020 Marvell International Ltd.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef __FCOE_COMMON__
8*4882a593Smuzhiyun #define __FCOE_COMMON__
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /*********************/
11*4882a593Smuzhiyun /* FCOE FW CONSTANTS */
12*4882a593Smuzhiyun /*********************/
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define FC_ABTS_REPLY_MAX_PAYLOAD_LEN	12
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* The fcoe storm task context protection-information of Ystorm */
17*4882a593Smuzhiyun struct protection_info_ctx {
18*4882a593Smuzhiyun 	__le16 flags;
19*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_HOST_INTERFACE_MASK		0x3
20*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_HOST_INTERFACE_SHIFT	0
21*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_DIF_TO_PEER_MASK		0x1
22*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_DIF_TO_PEER_SHIFT		2
23*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_MASK	0x1
24*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_SHIFT	3
25*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_MASK	0xF
26*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_SHIFT	4
27*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_MASK	0x1
28*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_SHIFT	8
29*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_RESERVED0_MASK		0x7F
30*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_RESERVED0_SHIFT		9
31*4882a593Smuzhiyun 	u8 dix_block_size;
32*4882a593Smuzhiyun 	u8 dst_size;
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /* The fcoe storm task context protection-information of Ystorm */
36*4882a593Smuzhiyun union protection_info_union_ctx {
37*4882a593Smuzhiyun 	struct protection_info_ctx info;
38*4882a593Smuzhiyun 	__le32 value;
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* FCP CMD payload */
42*4882a593Smuzhiyun struct fcoe_fcp_cmd_payload {
43*4882a593Smuzhiyun 	__le32 opaque[8];
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* FCP RSP payload */
47*4882a593Smuzhiyun struct fcoe_fcp_rsp_payload {
48*4882a593Smuzhiyun 	__le32 opaque[6];
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* FCP RSP payload */
52*4882a593Smuzhiyun struct fcp_rsp_payload_padded {
53*4882a593Smuzhiyun 	struct fcoe_fcp_rsp_payload rsp_payload;
54*4882a593Smuzhiyun 	__le32 reserved[2];
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /* FCP RSP payload */
58*4882a593Smuzhiyun struct fcoe_fcp_xfer_payload {
59*4882a593Smuzhiyun 	__le32 opaque[3];
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /* FCP RSP payload */
63*4882a593Smuzhiyun struct fcp_xfer_payload_padded {
64*4882a593Smuzhiyun 	struct fcoe_fcp_xfer_payload xfer_payload;
65*4882a593Smuzhiyun 	__le32 reserved[5];
66*4882a593Smuzhiyun };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /* Task params */
69*4882a593Smuzhiyun struct fcoe_tx_data_params {
70*4882a593Smuzhiyun 	__le32 data_offset;
71*4882a593Smuzhiyun 	__le32 offset_in_io;
72*4882a593Smuzhiyun 	u8 flags;
73*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_MASK	0x1
74*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_SHIFT	0
75*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_DROP_DATA_MASK		0x1
76*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_DROP_DATA_SHIFT		1
77*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_MASK		0x1
78*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_SHIFT		2
79*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_RESERVED0_MASK		0x1F
80*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_RESERVED0_SHIFT		3
81*4882a593Smuzhiyun 	u8 dif_residual;
82*4882a593Smuzhiyun 	__le16 seq_cnt;
83*4882a593Smuzhiyun 	__le16 single_sge_saved_offset;
84*4882a593Smuzhiyun 	__le16 next_dif_offset;
85*4882a593Smuzhiyun 	__le16 seq_id;
86*4882a593Smuzhiyun 	__le16 reserved3;
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /* Middle path parameters: FC header fields provided by the driver */
90*4882a593Smuzhiyun struct fcoe_tx_mid_path_params {
91*4882a593Smuzhiyun 	__le32 parameter;
92*4882a593Smuzhiyun 	u8 r_ctl;
93*4882a593Smuzhiyun 	u8 type;
94*4882a593Smuzhiyun 	u8 cs_ctl;
95*4882a593Smuzhiyun 	u8 df_ctl;
96*4882a593Smuzhiyun 	__le16 rx_id;
97*4882a593Smuzhiyun 	__le16 ox_id;
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* Task params */
101*4882a593Smuzhiyun struct fcoe_tx_params {
102*4882a593Smuzhiyun 	struct fcoe_tx_data_params data;
103*4882a593Smuzhiyun 	struct fcoe_tx_mid_path_params mid_path;
104*4882a593Smuzhiyun };
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /* Union of FCP CMD payload \ TX params \ ABTS \ Cleanup */
107*4882a593Smuzhiyun union fcoe_tx_info_union_ctx {
108*4882a593Smuzhiyun 	struct fcoe_fcp_cmd_payload fcp_cmd_payload;
109*4882a593Smuzhiyun 	struct fcp_rsp_payload_padded fcp_rsp_payload;
110*4882a593Smuzhiyun 	struct fcp_xfer_payload_padded fcp_xfer_payload;
111*4882a593Smuzhiyun 	struct fcoe_tx_params tx_params;
112*4882a593Smuzhiyun };
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* Data sgl */
115*4882a593Smuzhiyun struct fcoe_slow_sgl_ctx {
116*4882a593Smuzhiyun 	struct regpair base_sgl_addr;
117*4882a593Smuzhiyun 	__le16 curr_sge_off;
118*4882a593Smuzhiyun 	__le16 remainder_num_sges;
119*4882a593Smuzhiyun 	__le16 curr_sgl_index;
120*4882a593Smuzhiyun 	__le16 reserved;
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* Union of DIX SGL \ cached DIX sges */
124*4882a593Smuzhiyun union fcoe_dix_desc_ctx {
125*4882a593Smuzhiyun 	struct fcoe_slow_sgl_ctx dix_sgl;
126*4882a593Smuzhiyun 	struct scsi_sge cached_dix_sge;
127*4882a593Smuzhiyun };
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /* The fcoe storm task context of Ystorm */
130*4882a593Smuzhiyun struct ystorm_fcoe_task_st_ctx {
131*4882a593Smuzhiyun 	u8 task_type;
132*4882a593Smuzhiyun 	u8 sgl_mode;
133*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK	0x1
134*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT	0
135*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_RSRV_MASK		0x7F
136*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_RSRV_SHIFT		1
137*4882a593Smuzhiyun 	u8 cached_dix_sge;
138*4882a593Smuzhiyun 	u8 expect_first_xfer;
139*4882a593Smuzhiyun 	__le32 num_pbf_zero_write;
140*4882a593Smuzhiyun 	union protection_info_union_ctx protection_info_union;
141*4882a593Smuzhiyun 	__le32 data_2_trns_rem;
142*4882a593Smuzhiyun 	struct scsi_sgl_params sgl_params;
143*4882a593Smuzhiyun 	u8 reserved1[12];
144*4882a593Smuzhiyun 	union fcoe_tx_info_union_ctx tx_info_union;
145*4882a593Smuzhiyun 	union fcoe_dix_desc_ctx dix_desc;
146*4882a593Smuzhiyun 	struct scsi_cached_sges data_desc;
147*4882a593Smuzhiyun 	__le16 ox_id;
148*4882a593Smuzhiyun 	__le16 rx_id;
149*4882a593Smuzhiyun 	__le32 task_rety_identifier;
150*4882a593Smuzhiyun 	u8 reserved2[8];
151*4882a593Smuzhiyun };
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun struct e4_ystorm_fcoe_task_ag_ctx {
154*4882a593Smuzhiyun 	u8 byte0;
155*4882a593Smuzhiyun 	u8 byte1;
156*4882a593Smuzhiyun 	__le16 word0;
157*4882a593Smuzhiyun 	u8 flags0;
158*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_MASK		0xF
159*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_SHIFT	0
160*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT0_MASK		0x1
161*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT0_SHIFT		4
162*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT1_MASK		0x1
163*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT		5
164*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT2_MASK		0x1
165*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT		6
166*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT3_MASK		0x1
167*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT		7
168*4882a593Smuzhiyun 	u8 flags1;
169*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0_MASK		0x3
170*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0_SHIFT		0
171*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1_MASK		0x3
172*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT		2
173*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_MASK	0x3
174*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_SHIFT	4
175*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0EN_MASK		0x1
176*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT		6
177*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK		0x1
178*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT		7
179*4882a593Smuzhiyun 	u8 flags2;
180*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT4_MASK		0x1
181*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT4_SHIFT		0
182*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK		0x1
183*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT	1
184*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK		0x1
185*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT	2
186*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK		0x1
187*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT	3
188*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK		0x1
189*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT	4
190*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK		0x1
191*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT	5
192*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK		0x1
193*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT	6
194*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK		0x1
195*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT	7
196*4882a593Smuzhiyun 	u8 byte2;
197*4882a593Smuzhiyun 	__le32 reg0;
198*4882a593Smuzhiyun 	u8 byte3;
199*4882a593Smuzhiyun 	u8 byte4;
200*4882a593Smuzhiyun 	__le16 rx_id;
201*4882a593Smuzhiyun 	__le16 word2;
202*4882a593Smuzhiyun 	__le16 word3;
203*4882a593Smuzhiyun 	__le16 word4;
204*4882a593Smuzhiyun 	__le16 word5;
205*4882a593Smuzhiyun 	__le32 reg1;
206*4882a593Smuzhiyun 	__le32 reg2;
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun struct e4_tstorm_fcoe_task_ag_ctx {
210*4882a593Smuzhiyun 	u8 reserved;
211*4882a593Smuzhiyun 	u8 byte1;
212*4882a593Smuzhiyun 	__le16 icid;
213*4882a593Smuzhiyun 	u8 flags0;
214*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK		0xF
215*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT	0
216*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK		0x1
217*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT		4
218*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT1_MASK			0x1
219*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT			5
220*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_MASK		0x1
221*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_SHIFT	6
222*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_VALID_MASK			0x1
223*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_VALID_SHIFT			7
224*4882a593Smuzhiyun 	u8 flags1;
225*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_MASK	0x1
226*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_SHIFT	0
227*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT5_MASK		0x1
228*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT5_SHIFT		1
229*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_MASK	0x3
230*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_SHIFT	2
231*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_MASK	0x3
232*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_SHIFT	4
233*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2_MASK		0x3
234*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT		6
235*4882a593Smuzhiyun 	u8 flags2;
236*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_MASK		0x3
237*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_SHIFT		0
238*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK		0x3
239*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT		2
240*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_MASK		0x3
241*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_SHIFT		4
242*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_MASK		0x3
243*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_SHIFT	6
244*4882a593Smuzhiyun 	u8 flags3;
245*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_MASK		0x3
246*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_SHIFT		0
247*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_MASK	0x1
248*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_SHIFT	2
249*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_MASK		0x1
250*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_SHIFT		3
251*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK			0x1
252*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT			4
253*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_MASK	0x1
254*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_SHIFT	5
255*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK	0x1
256*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT	6
257*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_MASK		0x1
258*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_SHIFT		7
259*4882a593Smuzhiyun 	u8 flags4;
260*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_MASK	0x1
261*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_SHIFT	0
262*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_MASK	0x1
263*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_SHIFT	1
264*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK			0x1
265*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT		2
266*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK			0x1
267*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT		3
268*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK			0x1
269*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT		4
270*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK			0x1
271*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT		5
272*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK			0x1
273*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT		6
274*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK			0x1
275*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT		7
276*4882a593Smuzhiyun 	u8 cleanup_state;
277*4882a593Smuzhiyun 	__le16 last_sent_tid;
278*4882a593Smuzhiyun 	__le32 rec_rr_tov_exp_timeout;
279*4882a593Smuzhiyun 	u8 byte3;
280*4882a593Smuzhiyun 	u8 byte4;
281*4882a593Smuzhiyun 	__le16 word2;
282*4882a593Smuzhiyun 	__le16 word3;
283*4882a593Smuzhiyun 	__le16 word4;
284*4882a593Smuzhiyun 	__le32 data_offset_end_of_seq;
285*4882a593Smuzhiyun 	__le32 data_offset_next;
286*4882a593Smuzhiyun };
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /* Cached data sges */
289*4882a593Smuzhiyun struct fcoe_exp_ro {
290*4882a593Smuzhiyun 	__le32 data_offset;
291*4882a593Smuzhiyun 	__le32 reserved;
292*4882a593Smuzhiyun };
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun /* Union of Cleanup address \ expected relative offsets */
295*4882a593Smuzhiyun union fcoe_cleanup_addr_exp_ro_union {
296*4882a593Smuzhiyun 	struct regpair abts_rsp_fc_payload_hi;
297*4882a593Smuzhiyun 	struct fcoe_exp_ro exp_ro;
298*4882a593Smuzhiyun };
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun /* Fields coppied from ABTSrsp pckt */
301*4882a593Smuzhiyun struct fcoe_abts_pkt {
302*4882a593Smuzhiyun 	__le32 abts_rsp_fc_payload_lo;
303*4882a593Smuzhiyun 	__le16 abts_rsp_rx_id;
304*4882a593Smuzhiyun 	u8 abts_rsp_rctl;
305*4882a593Smuzhiyun 	u8 reserved2;
306*4882a593Smuzhiyun };
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun /* FW read- write (modifyable) part The fcoe task storm context of Tstorm */
309*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_write {
310*4882a593Smuzhiyun 	union fcoe_cleanup_addr_exp_ro_union cleanup_addr_exp_ro_union;
311*4882a593Smuzhiyun 	__le16 flags;
312*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_MASK	0x1
313*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_SHIFT	0
314*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_MASK	0x1
315*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_SHIFT	1
316*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_MASK		0x1
317*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_SHIFT	2
318*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_MASK	0x1
319*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_SHIFT	3
320*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_MASK	0x1
321*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_SHIFT	4
322*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_MASK	0x1
323*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_SHIFT	5
324*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_MASK		0x3
325*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_SHIFT	6
326*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_MASK		0xFF
327*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_SHIFT		8
328*4882a593Smuzhiyun 	__le16 seq_cnt;
329*4882a593Smuzhiyun 	u8 seq_id;
330*4882a593Smuzhiyun 	u8 ooo_rx_seq_id;
331*4882a593Smuzhiyun 	__le16 rx_id;
332*4882a593Smuzhiyun 	struct fcoe_abts_pkt abts_data;
333*4882a593Smuzhiyun 	__le32 e_d_tov_exp_timeout_val;
334*4882a593Smuzhiyun 	__le16 ooo_rx_seq_cnt;
335*4882a593Smuzhiyun 	__le16 reserved1;
336*4882a593Smuzhiyun };
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun /* FW read only part The fcoe task storm context of Tstorm */
339*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_only {
340*4882a593Smuzhiyun 	u8 task_type;
341*4882a593Smuzhiyun 	u8 dev_type;
342*4882a593Smuzhiyun 	u8 conf_supported;
343*4882a593Smuzhiyun 	u8 glbl_q_num;
344*4882a593Smuzhiyun 	__le32 cid;
345*4882a593Smuzhiyun 	__le32 fcp_cmd_trns_size;
346*4882a593Smuzhiyun 	__le32 rsrv;
347*4882a593Smuzhiyun };
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun /** The fcoe task storm context of Tstorm */
350*4882a593Smuzhiyun struct tstorm_fcoe_task_st_ctx {
351*4882a593Smuzhiyun 	struct fcoe_tstorm_fcoe_task_st_ctx_read_write read_write;
352*4882a593Smuzhiyun 	struct fcoe_tstorm_fcoe_task_st_ctx_read_only read_only;
353*4882a593Smuzhiyun };
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun struct e4_mstorm_fcoe_task_ag_ctx {
356*4882a593Smuzhiyun 	u8 byte0;
357*4882a593Smuzhiyun 	u8 byte1;
358*4882a593Smuzhiyun 	__le16 icid;
359*4882a593Smuzhiyun 	u8 flags0;
360*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK		0xF
361*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT	0
362*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK		0x1
363*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT		4
364*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_MASK		0x1
365*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_SHIFT		5
366*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT2_MASK			0x1
367*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT			6
368*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT3_MASK			0x1
369*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT			7
370*4882a593Smuzhiyun 	u8 flags1;
371*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK		0x3
372*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT		0
373*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1_MASK			0x3
374*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT			2
375*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2_MASK			0x3
376*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT			4
377*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK	0x1
378*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT	6
379*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK			0x1
380*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT			7
381*4882a593Smuzhiyun 	u8 flags2;
382*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK			0x1
383*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT			0
384*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK			0x1
385*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT		1
386*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK			0x1
387*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT		2
388*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK			0x1
389*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT		3
390*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK			0x1
391*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT		4
392*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK			0x1
393*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT		5
394*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_MASK	0x1
395*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_SHIFT	6
396*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK			0x1
397*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT		7
398*4882a593Smuzhiyun 	u8 cleanup_state;
399*4882a593Smuzhiyun 	__le32 received_bytes;
400*4882a593Smuzhiyun 	u8 byte3;
401*4882a593Smuzhiyun 	u8 glbl_q_num;
402*4882a593Smuzhiyun 	__le16 word1;
403*4882a593Smuzhiyun 	__le16 tid_to_xfer;
404*4882a593Smuzhiyun 	__le16 word3;
405*4882a593Smuzhiyun 	__le16 word4;
406*4882a593Smuzhiyun 	__le16 word5;
407*4882a593Smuzhiyun 	__le32 expected_bytes;
408*4882a593Smuzhiyun 	__le32 reg2;
409*4882a593Smuzhiyun };
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun /* The fcoe task storm context of Mstorm */
412*4882a593Smuzhiyun struct mstorm_fcoe_task_st_ctx {
413*4882a593Smuzhiyun 	struct regpair rsp_buf_addr;
414*4882a593Smuzhiyun 	__le32 rsrv[2];
415*4882a593Smuzhiyun 	struct scsi_sgl_params sgl_params;
416*4882a593Smuzhiyun 	__le32 data_2_trns_rem;
417*4882a593Smuzhiyun 	__le32 data_buffer_offset;
418*4882a593Smuzhiyun 	__le16 parent_id;
419*4882a593Smuzhiyun 	__le16 flags;
420*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_MASK		0xF
421*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_SHIFT		0
422*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_MASK		0x3
423*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_SHIFT		4
424*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_MASK		0x1
425*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_SHIFT		6
426*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_MASK	0x1
427*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_SHIFT	7
428*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_MASK		0x3
429*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_SHIFT		8
430*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_MASK	0x1
431*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_SHIFT	10
432*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_MASK		0x1
433*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_SHIFT	11
434*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_MASK		0x1
435*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_SHIFT		12
436*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK		0x1
437*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT		13
438*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_MASK			0x3
439*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_SHIFT			14
440*4882a593Smuzhiyun 	struct scsi_cached_sges data_desc;
441*4882a593Smuzhiyun };
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun struct e4_ustorm_fcoe_task_ag_ctx {
444*4882a593Smuzhiyun 	u8 reserved;
445*4882a593Smuzhiyun 	u8 byte1;
446*4882a593Smuzhiyun 	__le16 icid;
447*4882a593Smuzhiyun 	u8 flags0;
448*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK		0xF
449*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT	0
450*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK		0x1
451*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT		4
452*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_BIT1_MASK			0x1
453*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT			5
454*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0_MASK			0x3
455*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0_SHIFT			6
456*4882a593Smuzhiyun 	u8 flags1;
457*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1_MASK		0x3
458*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1_SHIFT		0
459*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2_MASK		0x3
460*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2_SHIFT		2
461*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3_MASK		0x3
462*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3_SHIFT		4
463*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_MASK	0x3
464*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_SHIFT	6
465*4882a593Smuzhiyun 	u8 flags2;
466*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0EN_MASK			0x1
467*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT			0
468*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1EN_MASK			0x1
469*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT			1
470*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2EN_MASK			0x1
471*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT			2
472*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3EN_MASK			0x1
473*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3EN_SHIFT			3
474*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK		0x1
475*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT	4
476*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK			0x1
477*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT		5
478*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK			0x1
479*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT		6
480*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK			0x1
481*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT		7
482*4882a593Smuzhiyun 	u8 flags3;
483*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK		0x1
484*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT	0
485*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK		0x1
486*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT	1
487*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK		0x1
488*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT	2
489*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK		0x1
490*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT	3
491*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_MASK	0xF
492*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT	4
493*4882a593Smuzhiyun 	__le32 dif_err_intervals;
494*4882a593Smuzhiyun 	__le32 dif_error_1st_interval;
495*4882a593Smuzhiyun 	__le32 global_cq_num;
496*4882a593Smuzhiyun 	__le32 reg3;
497*4882a593Smuzhiyun 	__le32 reg4;
498*4882a593Smuzhiyun 	__le32 reg5;
499*4882a593Smuzhiyun };
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun /* FCoE task context */
502*4882a593Smuzhiyun struct e4_fcoe_task_context {
503*4882a593Smuzhiyun 	struct ystorm_fcoe_task_st_ctx ystorm_st_context;
504*4882a593Smuzhiyun 	struct regpair ystorm_st_padding[2];
505*4882a593Smuzhiyun 	struct tdif_task_context tdif_context;
506*4882a593Smuzhiyun 	struct e4_ystorm_fcoe_task_ag_ctx ystorm_ag_context;
507*4882a593Smuzhiyun 	struct e4_tstorm_fcoe_task_ag_ctx tstorm_ag_context;
508*4882a593Smuzhiyun 	struct timers_context timer_context;
509*4882a593Smuzhiyun 	struct tstorm_fcoe_task_st_ctx tstorm_st_context;
510*4882a593Smuzhiyun 	struct regpair tstorm_st_padding[2];
511*4882a593Smuzhiyun 	struct e4_mstorm_fcoe_task_ag_ctx mstorm_ag_context;
512*4882a593Smuzhiyun 	struct mstorm_fcoe_task_st_ctx mstorm_st_context;
513*4882a593Smuzhiyun 	struct e4_ustorm_fcoe_task_ag_ctx ustorm_ag_context;
514*4882a593Smuzhiyun 	struct rdif_task_context rdif_context;
515*4882a593Smuzhiyun };
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun /* FCoE additional WQE (Sq/XferQ) information */
518*4882a593Smuzhiyun union fcoe_additional_info_union {
519*4882a593Smuzhiyun 	__le32 previous_tid;
520*4882a593Smuzhiyun 	__le32 parent_tid;
521*4882a593Smuzhiyun 	__le32 burst_length;
522*4882a593Smuzhiyun 	__le32 seq_rec_updated_offset;
523*4882a593Smuzhiyun };
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun /* FCoE Ramrod Command IDs */
526*4882a593Smuzhiyun enum fcoe_completion_status {
527*4882a593Smuzhiyun 	FCOE_COMPLETION_STATUS_SUCCESS,
528*4882a593Smuzhiyun 	FCOE_COMPLETION_STATUS_FCOE_VER_ERR,
529*4882a593Smuzhiyun 	FCOE_COMPLETION_STATUS_SRC_MAC_ADD_ARR_ERR,
530*4882a593Smuzhiyun 	MAX_FCOE_COMPLETION_STATUS
531*4882a593Smuzhiyun };
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun /* FC address (SID/DID) network presentation */
534*4882a593Smuzhiyun struct fc_addr_nw {
535*4882a593Smuzhiyun 	u8 addr_lo;
536*4882a593Smuzhiyun 	u8 addr_mid;
537*4882a593Smuzhiyun 	u8 addr_hi;
538*4882a593Smuzhiyun };
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun /* FCoE connection offload */
541*4882a593Smuzhiyun struct fcoe_conn_offload_ramrod_data {
542*4882a593Smuzhiyun 	struct regpair sq_pbl_addr;
543*4882a593Smuzhiyun 	struct regpair sq_curr_page_addr;
544*4882a593Smuzhiyun 	struct regpair sq_next_page_addr;
545*4882a593Smuzhiyun 	struct regpair xferq_pbl_addr;
546*4882a593Smuzhiyun 	struct regpair xferq_curr_page_addr;
547*4882a593Smuzhiyun 	struct regpair xferq_next_page_addr;
548*4882a593Smuzhiyun 	struct regpair respq_pbl_addr;
549*4882a593Smuzhiyun 	struct regpair respq_curr_page_addr;
550*4882a593Smuzhiyun 	struct regpair respq_next_page_addr;
551*4882a593Smuzhiyun 	__le16 dst_mac_addr_lo;
552*4882a593Smuzhiyun 	__le16 dst_mac_addr_mid;
553*4882a593Smuzhiyun 	__le16 dst_mac_addr_hi;
554*4882a593Smuzhiyun 	__le16 src_mac_addr_lo;
555*4882a593Smuzhiyun 	__le16 src_mac_addr_mid;
556*4882a593Smuzhiyun 	__le16 src_mac_addr_hi;
557*4882a593Smuzhiyun 	__le16 tx_max_fc_pay_len;
558*4882a593Smuzhiyun 	__le16 e_d_tov_timer_val;
559*4882a593Smuzhiyun 	__le16 rx_max_fc_pay_len;
560*4882a593Smuzhiyun 	__le16 vlan_tag;
561*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_MASK	0xFFF
562*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_SHIFT	0
563*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_MASK		0x1
564*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_SHIFT		12
565*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_MASK	0x7
566*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_SHIFT	13
567*4882a593Smuzhiyun 	__le16 physical_q0;
568*4882a593Smuzhiyun 	__le16 rec_rr_tov_timer_val;
569*4882a593Smuzhiyun 	struct fc_addr_nw s_id;
570*4882a593Smuzhiyun 	u8 max_conc_seqs_c3;
571*4882a593Smuzhiyun 	struct fc_addr_nw d_id;
572*4882a593Smuzhiyun 	u8 flags;
573*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_MASK	0x1
574*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_SHIFT	0
575*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_MASK		0x1
576*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_SHIFT		1
577*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_MASK		0x1
578*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_SHIFT		2
579*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_MASK		0x1
580*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_SHIFT		3
581*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_MASK	0x1
582*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_SHIFT	4
583*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_MASK			0x3
584*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_SHIFT		5
585*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_MASK		0x1
586*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_SHIFT		7
587*4882a593Smuzhiyun 	__le16 conn_id;
588*4882a593Smuzhiyun 	u8 def_q_idx;
589*4882a593Smuzhiyun 	u8 reserved[5];
590*4882a593Smuzhiyun };
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun /* FCoE terminate connection request */
593*4882a593Smuzhiyun struct fcoe_conn_terminate_ramrod_data {
594*4882a593Smuzhiyun 	struct regpair terminate_params_addr;
595*4882a593Smuzhiyun };
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun /* FCoE device type */
598*4882a593Smuzhiyun enum fcoe_device_type {
599*4882a593Smuzhiyun 	FCOE_TASK_DEV_TYPE_DISK,
600*4882a593Smuzhiyun 	FCOE_TASK_DEV_TYPE_TAPE,
601*4882a593Smuzhiyun 	MAX_FCOE_DEVICE_TYPE
602*4882a593Smuzhiyun };
603*4882a593Smuzhiyun 
604*4882a593Smuzhiyun /* Data sgl */
605*4882a593Smuzhiyun struct fcoe_fast_sgl_ctx {
606*4882a593Smuzhiyun 	struct regpair sgl_start_addr;
607*4882a593Smuzhiyun 	__le32 sgl_byte_offset;
608*4882a593Smuzhiyun 	__le16 task_reuse_cnt;
609*4882a593Smuzhiyun 	__le16 init_offset_in_first_sge;
610*4882a593Smuzhiyun };
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun /* FCoE firmware function init */
613*4882a593Smuzhiyun struct fcoe_init_func_ramrod_data {
614*4882a593Smuzhiyun 	struct scsi_init_func_params func_params;
615*4882a593Smuzhiyun 	struct scsi_init_func_queues q_params;
616*4882a593Smuzhiyun 	__le16 mtu;
617*4882a593Smuzhiyun 	__le16 sq_num_pages_in_pbl;
618*4882a593Smuzhiyun 	__le32 reserved[3];
619*4882a593Smuzhiyun };
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun /* FCoE: Mode of the connection: Target or Initiator or both */
622*4882a593Smuzhiyun enum fcoe_mode_type {
623*4882a593Smuzhiyun 	FCOE_INITIATOR_MODE = 0x0,
624*4882a593Smuzhiyun 	FCOE_TARGET_MODE = 0x1,
625*4882a593Smuzhiyun 	FCOE_BOTH_OR_NOT_CHOSEN = 0x3,
626*4882a593Smuzhiyun 	MAX_FCOE_MODE_TYPE
627*4882a593Smuzhiyun };
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun /* Per PF FCoE receive path statistics - tStorm RAM structure */
630*4882a593Smuzhiyun struct fcoe_rx_stat {
631*4882a593Smuzhiyun 	struct regpair fcoe_rx_byte_cnt;
632*4882a593Smuzhiyun 	struct regpair fcoe_rx_data_pkt_cnt;
633*4882a593Smuzhiyun 	struct regpair fcoe_rx_xfer_pkt_cnt;
634*4882a593Smuzhiyun 	struct regpair fcoe_rx_other_pkt_cnt;
635*4882a593Smuzhiyun 	__le32 fcoe_silent_drop_pkt_cmdq_full_cnt;
636*4882a593Smuzhiyun 	__le32 fcoe_silent_drop_pkt_rq_full_cnt;
637*4882a593Smuzhiyun 	__le32 fcoe_silent_drop_pkt_crc_error_cnt;
638*4882a593Smuzhiyun 	__le32 fcoe_silent_drop_pkt_task_invalid_cnt;
639*4882a593Smuzhiyun 	__le32 fcoe_silent_drop_total_pkt_cnt;
640*4882a593Smuzhiyun 	__le32 rsrv;
641*4882a593Smuzhiyun };
642*4882a593Smuzhiyun 
643*4882a593Smuzhiyun /* FCoE SQE request type */
644*4882a593Smuzhiyun enum fcoe_sqe_request_type {
645*4882a593Smuzhiyun 	SEND_FCOE_CMD,
646*4882a593Smuzhiyun 	SEND_FCOE_MIDPATH,
647*4882a593Smuzhiyun 	SEND_FCOE_ABTS_REQUEST,
648*4882a593Smuzhiyun 	FCOE_EXCHANGE_CLEANUP,
649*4882a593Smuzhiyun 	FCOE_SEQUENCE_RECOVERY,
650*4882a593Smuzhiyun 	SEND_FCOE_XFER_RDY,
651*4882a593Smuzhiyun 	SEND_FCOE_RSP,
652*4882a593Smuzhiyun 	SEND_FCOE_RSP_WITH_SENSE_DATA,
653*4882a593Smuzhiyun 	SEND_FCOE_TARGET_DATA,
654*4882a593Smuzhiyun 	SEND_FCOE_INITIATOR_DATA,
655*4882a593Smuzhiyun 	SEND_FCOE_XFER_CONTINUATION_RDY,
656*4882a593Smuzhiyun 	SEND_FCOE_TARGET_ABTS_RSP,
657*4882a593Smuzhiyun 	MAX_FCOE_SQE_REQUEST_TYPE
658*4882a593Smuzhiyun };
659*4882a593Smuzhiyun 
660*4882a593Smuzhiyun /* FCoe statistics request */
661*4882a593Smuzhiyun struct fcoe_stat_ramrod_data {
662*4882a593Smuzhiyun 	struct regpair stat_params_addr;
663*4882a593Smuzhiyun };
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun /* FCoE task type */
666*4882a593Smuzhiyun enum fcoe_task_type {
667*4882a593Smuzhiyun 	FCOE_TASK_TYPE_WRITE_INITIATOR,
668*4882a593Smuzhiyun 	FCOE_TASK_TYPE_READ_INITIATOR,
669*4882a593Smuzhiyun 	FCOE_TASK_TYPE_MIDPATH,
670*4882a593Smuzhiyun 	FCOE_TASK_TYPE_UNSOLICITED,
671*4882a593Smuzhiyun 	FCOE_TASK_TYPE_ABTS,
672*4882a593Smuzhiyun 	FCOE_TASK_TYPE_EXCHANGE_CLEANUP,
673*4882a593Smuzhiyun 	FCOE_TASK_TYPE_SEQUENCE_CLEANUP,
674*4882a593Smuzhiyun 	FCOE_TASK_TYPE_WRITE_TARGET,
675*4882a593Smuzhiyun 	FCOE_TASK_TYPE_READ_TARGET,
676*4882a593Smuzhiyun 	FCOE_TASK_TYPE_RSP,
677*4882a593Smuzhiyun 	FCOE_TASK_TYPE_RSP_SENSE_DATA,
678*4882a593Smuzhiyun 	FCOE_TASK_TYPE_ABTS_TARGET,
679*4882a593Smuzhiyun 	FCOE_TASK_TYPE_ENUM_SIZE,
680*4882a593Smuzhiyun 	MAX_FCOE_TASK_TYPE
681*4882a593Smuzhiyun };
682*4882a593Smuzhiyun 
683*4882a593Smuzhiyun /* Per PF FCoE transmit path statistics - pStorm RAM structure */
684*4882a593Smuzhiyun struct fcoe_tx_stat {
685*4882a593Smuzhiyun 	struct regpair fcoe_tx_byte_cnt;
686*4882a593Smuzhiyun 	struct regpair fcoe_tx_data_pkt_cnt;
687*4882a593Smuzhiyun 	struct regpair fcoe_tx_xfer_pkt_cnt;
688*4882a593Smuzhiyun 	struct regpair fcoe_tx_other_pkt_cnt;
689*4882a593Smuzhiyun };
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun /* FCoE SQ/XferQ element */
692*4882a593Smuzhiyun struct fcoe_wqe {
693*4882a593Smuzhiyun 	__le16 task_id;
694*4882a593Smuzhiyun 	__le16 flags;
695*4882a593Smuzhiyun #define FCOE_WQE_REQ_TYPE_MASK		0xF
696*4882a593Smuzhiyun #define FCOE_WQE_REQ_TYPE_SHIFT		0
697*4882a593Smuzhiyun #define FCOE_WQE_SGL_MODE_MASK		0x1
698*4882a593Smuzhiyun #define FCOE_WQE_SGL_MODE_SHIFT		4
699*4882a593Smuzhiyun #define FCOE_WQE_CONTINUATION_MASK	0x1
700*4882a593Smuzhiyun #define FCOE_WQE_CONTINUATION_SHIFT	5
701*4882a593Smuzhiyun #define FCOE_WQE_SEND_AUTO_RSP_MASK	0x1
702*4882a593Smuzhiyun #define FCOE_WQE_SEND_AUTO_RSP_SHIFT	6
703*4882a593Smuzhiyun #define FCOE_WQE_RESERVED_MASK		0x1
704*4882a593Smuzhiyun #define FCOE_WQE_RESERVED_SHIFT		7
705*4882a593Smuzhiyun #define FCOE_WQE_NUM_SGES_MASK		0xF
706*4882a593Smuzhiyun #define FCOE_WQE_NUM_SGES_SHIFT		8
707*4882a593Smuzhiyun #define FCOE_WQE_RESERVED1_MASK		0xF
708*4882a593Smuzhiyun #define FCOE_WQE_RESERVED1_SHIFT	12
709*4882a593Smuzhiyun 	union fcoe_additional_info_union additional_info_union;
710*4882a593Smuzhiyun };
711*4882a593Smuzhiyun 
712*4882a593Smuzhiyun /* FCoE XFRQ element */
713*4882a593Smuzhiyun struct xfrqe_prot_flags {
714*4882a593Smuzhiyun 	u8 flags;
715*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK	0xF
716*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT	0
717*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_DIF_TO_PEER_MASK		0x1
718*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_DIF_TO_PEER_SHIFT		4
719*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_HOST_INTERFACE_MASK		0x3
720*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_HOST_INTERFACE_SHIFT		5
721*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_RESERVED_MASK			0x1
722*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_RESERVED_SHIFT			7
723*4882a593Smuzhiyun };
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun /* FCoE doorbell data */
726*4882a593Smuzhiyun struct fcoe_db_data {
727*4882a593Smuzhiyun 	u8 params;
728*4882a593Smuzhiyun #define FCOE_DB_DATA_DEST_MASK		0x3
729*4882a593Smuzhiyun #define FCOE_DB_DATA_DEST_SHIFT		0
730*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_CMD_MASK	0x3
731*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_CMD_SHIFT	2
732*4882a593Smuzhiyun #define FCOE_DB_DATA_BYPASS_EN_MASK	0x1
733*4882a593Smuzhiyun #define FCOE_DB_DATA_BYPASS_EN_SHIFT	4
734*4882a593Smuzhiyun #define FCOE_DB_DATA_RESERVED_MASK	0x1
735*4882a593Smuzhiyun #define FCOE_DB_DATA_RESERVED_SHIFT	5
736*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_VAL_SEL_MASK	0x3
737*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_VAL_SEL_SHIFT	6
738*4882a593Smuzhiyun 	u8 agg_flags;
739*4882a593Smuzhiyun 	__le16 sq_prod;
740*4882a593Smuzhiyun };
741*4882a593Smuzhiyun 
742*4882a593Smuzhiyun #endif /* __FCOE_COMMON__ */
743