1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni #ifndef __QEDF_HSI__
37*14b24e2bSVaishali Kulkarni #define __QEDF_HSI__
38*14b24e2bSVaishali Kulkarni /********************************/
39*14b24e2bSVaishali Kulkarni /* Add include to common target */
40*14b24e2bSVaishali Kulkarni /********************************/
41*14b24e2bSVaishali Kulkarni #include "common_hsi.h"
42*14b24e2bSVaishali Kulkarni 
43*14b24e2bSVaishali Kulkarni /********************************************************/
44*14b24e2bSVaishali Kulkarni /* Add include to common storage target for upper driver*/
45*14b24e2bSVaishali Kulkarni /*******************************************************/
46*14b24e2bSVaishali Kulkarni #include "qeds_hsi.h"
47*14b24e2bSVaishali Kulkarni 
48*14b24e2bSVaishali Kulkarni /****************************************/
49*14b24e2bSVaishali Kulkarni /* Add include to common storage target */
50*14b24e2bSVaishali Kulkarni /****************************************/
51*14b24e2bSVaishali Kulkarni #include "storage_common.h"
52*14b24e2bSVaishali Kulkarni 
53*14b24e2bSVaishali Kulkarni /************************************************************************/
54*14b24e2bSVaishali Kulkarni /* Add include to common fcoe target for both eCore and protocol driver */
55*14b24e2bSVaishali Kulkarni /************************************************************************/
56*14b24e2bSVaishali Kulkarni #include "fcoe_common.h"
57*14b24e2bSVaishali Kulkarni 
58*14b24e2bSVaishali Kulkarni 
59*14b24e2bSVaishali Kulkarni /*
60*14b24e2bSVaishali Kulkarni  * FCoE CQ element ABTS information
61*14b24e2bSVaishali Kulkarni  */
62*14b24e2bSVaishali Kulkarni struct fcoe_abts_info
63*14b24e2bSVaishali Kulkarni {
64*14b24e2bSVaishali Kulkarni 	u8 r_ctl /* R_CTL in the ABTS response frame */;
65*14b24e2bSVaishali Kulkarni 	u8 reserved0;
66*14b24e2bSVaishali Kulkarni 	__le16 rx_id;
67*14b24e2bSVaishali Kulkarni 	__le32 reserved2[2];
68*14b24e2bSVaishali Kulkarni 	__le32 fc_payload[3] /* ABTS FC payload response frame */;
69*14b24e2bSVaishali Kulkarni };
70*14b24e2bSVaishali Kulkarni 
71*14b24e2bSVaishali Kulkarni 
72*14b24e2bSVaishali Kulkarni /*
73*14b24e2bSVaishali Kulkarni  * FCoE class type
74*14b24e2bSVaishali Kulkarni  */
75*14b24e2bSVaishali Kulkarni enum fcoe_class_type
76*14b24e2bSVaishali Kulkarni {
77*14b24e2bSVaishali Kulkarni 	FCOE_TASK_CLASS_TYPE_3,
78*14b24e2bSVaishali Kulkarni 	FCOE_TASK_CLASS_TYPE_2,
79*14b24e2bSVaishali Kulkarni 	MAX_FCOE_CLASS_TYPE
80*14b24e2bSVaishali Kulkarni };
81*14b24e2bSVaishali Kulkarni 
82*14b24e2bSVaishali Kulkarni 
83*14b24e2bSVaishali Kulkarni /*
84*14b24e2bSVaishali Kulkarni  * FCoE CMDQ element control information
85*14b24e2bSVaishali Kulkarni  */
86*14b24e2bSVaishali Kulkarni struct fcoe_cmdqe_control
87*14b24e2bSVaishali Kulkarni {
88*14b24e2bSVaishali Kulkarni 	__le16 conn_id;
89*14b24e2bSVaishali Kulkarni 	u8 num_additional_cmdqes;
90*14b24e2bSVaishali Kulkarni 	u8 cmdType;
91*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK  0x1 /* true for ABTS request cmdqe. used in Target mode */
92*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0
93*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_RESERVED1_MASK   0x7F
94*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT  1
95*14b24e2bSVaishali Kulkarni 	u8 reserved2[4];
96*14b24e2bSVaishali Kulkarni };
97*14b24e2bSVaishali Kulkarni 
98*14b24e2bSVaishali Kulkarni /*
99*14b24e2bSVaishali Kulkarni  * FCoE control + payload CMDQ element
100*14b24e2bSVaishali Kulkarni  */
101*14b24e2bSVaishali Kulkarni struct fcoe_cmdqe
102*14b24e2bSVaishali Kulkarni {
103*14b24e2bSVaishali Kulkarni 	struct fcoe_cmdqe_control hdr;
104*14b24e2bSVaishali Kulkarni 	u8 fc_header[24];
105*14b24e2bSVaishali Kulkarni 	__le32 fcp_cmd_payload[8];
106*14b24e2bSVaishali Kulkarni };
107*14b24e2bSVaishali Kulkarni 
108*14b24e2bSVaishali Kulkarni 
109*14b24e2bSVaishali Kulkarni 
110*14b24e2bSVaishali Kulkarni /*
111*14b24e2bSVaishali Kulkarni  * FCP RSP flags
112*14b24e2bSVaishali Kulkarni  */
113*14b24e2bSVaishali Kulkarni struct fcoe_fcp_rsp_flags
114*14b24e2bSVaishali Kulkarni {
115*14b24e2bSVaishali Kulkarni 	u8 flags;
116*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK  0x1
117*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
118*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK  0x1
119*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
120*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK     0x1
121*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT    2
122*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK    0x1
123*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT   3
124*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK       0x1
125*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT      4
126*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK     0x7
127*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT    5
128*14b24e2bSVaishali Kulkarni };
129*14b24e2bSVaishali Kulkarni 
130*14b24e2bSVaishali Kulkarni /*
131*14b24e2bSVaishali Kulkarni  * FCoE CQ element response information
132*14b24e2bSVaishali Kulkarni  */
133*14b24e2bSVaishali Kulkarni struct fcoe_cqe_rsp_info
134*14b24e2bSVaishali Kulkarni {
135*14b24e2bSVaishali Kulkarni 	struct fcoe_fcp_rsp_flags rsp_flags;
136*14b24e2bSVaishali Kulkarni 	u8 scsi_status_code;
137*14b24e2bSVaishali Kulkarni 	__le16 retry_delay_timer;
138*14b24e2bSVaishali Kulkarni 	__le32 fcp_resid;
139*14b24e2bSVaishali Kulkarni 	__le32 fcp_sns_len;
140*14b24e2bSVaishali Kulkarni 	__le32 fcp_rsp_len;
141*14b24e2bSVaishali Kulkarni 	__le16 rx_id;
142*14b24e2bSVaishali Kulkarni 	u8 fw_error_flags;
143*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK  0x1 /* FW detected underrun */
144*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0
145*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_RESREVED_MASK     0x7F
146*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_RESREVED_SHIFT    1
147*14b24e2bSVaishali Kulkarni 	u8 reserved;
148*14b24e2bSVaishali Kulkarni 	__le32 fw_residual /* Residual bytes calculated by FW */;
149*14b24e2bSVaishali Kulkarni };
150*14b24e2bSVaishali Kulkarni 
151*14b24e2bSVaishali Kulkarni /*
152*14b24e2bSVaishali Kulkarni  * FCoE CQ element Target completion information
153*14b24e2bSVaishali Kulkarni  */
154*14b24e2bSVaishali Kulkarni struct fcoe_cqe_target_info
155*14b24e2bSVaishali Kulkarni {
156*14b24e2bSVaishali Kulkarni 	__le16 rx_id;
157*14b24e2bSVaishali Kulkarni 	__le16 reserved0;
158*14b24e2bSVaishali Kulkarni 	__le32 reserved1[5];
159*14b24e2bSVaishali Kulkarni };
160*14b24e2bSVaishali Kulkarni 
161*14b24e2bSVaishali Kulkarni /*
162*14b24e2bSVaishali Kulkarni  * FCoE error/warning reporting entry
163*14b24e2bSVaishali Kulkarni  */
164*14b24e2bSVaishali Kulkarni struct fcoe_err_report_entry
165*14b24e2bSVaishali Kulkarni {
166*14b24e2bSVaishali Kulkarni 	__le32 err_warn_bitmap_lo /* Error bitmap lower 32 bits */;
167*14b24e2bSVaishali Kulkarni 	__le32 err_warn_bitmap_hi /* Error bitmap higher 32 bits */;
168*14b24e2bSVaishali Kulkarni 	__le32 tx_buf_off /* Buffer offset the beginning of the Sequence last transmitted */;
169*14b24e2bSVaishali Kulkarni 	__le32 rx_buf_off /* Buffer offset from the beginning of the Sequence last received */;
170*14b24e2bSVaishali Kulkarni 	__le16 rx_id /* RX_ID of the associated task */;
171*14b24e2bSVaishali Kulkarni 	__le16 reserved1;
172*14b24e2bSVaishali Kulkarni 	__le32 reserved2;
173*14b24e2bSVaishali Kulkarni };
174*14b24e2bSVaishali Kulkarni 
175*14b24e2bSVaishali Kulkarni /*
176*14b24e2bSVaishali Kulkarni  * FCoE CQ element middle path information
177*14b24e2bSVaishali Kulkarni  */
178*14b24e2bSVaishali Kulkarni struct fcoe_cqe_midpath_info
179*14b24e2bSVaishali Kulkarni {
180*14b24e2bSVaishali Kulkarni 	__le32 data_placement_size;
181*14b24e2bSVaishali Kulkarni 	__le16 rx_id;
182*14b24e2bSVaishali Kulkarni 	__le16 reserved0;
183*14b24e2bSVaishali Kulkarni 	__le32 reserved1[4];
184*14b24e2bSVaishali Kulkarni };
185*14b24e2bSVaishali Kulkarni 
186*14b24e2bSVaishali Kulkarni /*
187*14b24e2bSVaishali Kulkarni  * FCoE CQ element unsolicited information
188*14b24e2bSVaishali Kulkarni  */
189*14b24e2bSVaishali Kulkarni struct fcoe_unsolic_info
190*14b24e2bSVaishali Kulkarni {
191*14b24e2bSVaishali Kulkarni 	struct scsi_bd bd_info /* BD information: Physical address and opaque data */;
192*14b24e2bSVaishali Kulkarni 	__le16 conn_id /* Connection ID the frame is associated to */;
193*14b24e2bSVaishali Kulkarni 	__le16 pkt_len /* Packet length */;
194*14b24e2bSVaishali Kulkarni 	u8 reserved1[4];
195*14b24e2bSVaishali Kulkarni };
196*14b24e2bSVaishali Kulkarni 
197*14b24e2bSVaishali Kulkarni /*
198*14b24e2bSVaishali Kulkarni  * FCoE warning reporting entry
199*14b24e2bSVaishali Kulkarni  */
200*14b24e2bSVaishali Kulkarni struct fcoe_warning_report_entry
201*14b24e2bSVaishali Kulkarni {
202*14b24e2bSVaishali Kulkarni 	struct scsi_bd bd_info /* BD information: Physical address and opaque data */;
203*14b24e2bSVaishali Kulkarni 	__le32 buf_off /* Buffer offset the beginning of the Sequence last transmitted */;
204*14b24e2bSVaishali Kulkarni 	__le16 rx_id /* RX_ID of the associated task */;
205*14b24e2bSVaishali Kulkarni 	__le16 reserved1;
206*14b24e2bSVaishali Kulkarni };
207*14b24e2bSVaishali Kulkarni 
208*14b24e2bSVaishali Kulkarni /*
209*14b24e2bSVaishali Kulkarni  * FCoE CQ element information
210*14b24e2bSVaishali Kulkarni  */
211*14b24e2bSVaishali Kulkarni union fcoe_cqe_info
212*14b24e2bSVaishali Kulkarni {
213*14b24e2bSVaishali Kulkarni 	struct fcoe_cqe_rsp_info rsp_info /* Response completion information */;
214*14b24e2bSVaishali Kulkarni 	struct fcoe_cqe_target_info target_info /* Target completion information */;
215*14b24e2bSVaishali Kulkarni 	struct fcoe_err_report_entry err_info /* Error completion information */;
216*14b24e2bSVaishali Kulkarni 	struct fcoe_abts_info abts_info /* ABTS completion information */;
217*14b24e2bSVaishali Kulkarni 	struct fcoe_cqe_midpath_info midpath_info /* Middle path completion information */;
218*14b24e2bSVaishali Kulkarni 	struct fcoe_unsolic_info unsolic_info /* Unsolicited packet completion information */;
219*14b24e2bSVaishali Kulkarni 	struct fcoe_warning_report_entry warn_info /* Warning completion information (Rec Tov expiration) */;
220*14b24e2bSVaishali Kulkarni };
221*14b24e2bSVaishali Kulkarni 
222*14b24e2bSVaishali Kulkarni /*
223*14b24e2bSVaishali Kulkarni  * FCoE CQ element
224*14b24e2bSVaishali Kulkarni  */
225*14b24e2bSVaishali Kulkarni struct fcoe_cqe
226*14b24e2bSVaishali Kulkarni {
227*14b24e2bSVaishali Kulkarni 	__le32 cqe_data;
228*14b24e2bSVaishali Kulkarni #define FCOE_CQE_TASK_ID_MASK    0xFFFF /* The task identifier (OX_ID) to be completed */
229*14b24e2bSVaishali Kulkarni #define FCOE_CQE_TASK_ID_SHIFT   0
230*14b24e2bSVaishali Kulkarni #define FCOE_CQE_CQE_TYPE_MASK   0xF /* The CQE type: 0x0 Indicating on a pending work request completion. 0x1 - Indicating on an unsolicited event notification. use enum fcoe_cqe_type  (use enum fcoe_cqe_type) */
231*14b24e2bSVaishali Kulkarni #define FCOE_CQE_CQE_TYPE_SHIFT  16
232*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RESERVED0_MASK  0xFFF
233*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RESERVED0_SHIFT 20
234*14b24e2bSVaishali Kulkarni 	__le16 reserved1;
235*14b24e2bSVaishali Kulkarni 	__le16 fw_cq_prod;
236*14b24e2bSVaishali Kulkarni 	union fcoe_cqe_info cqe_info;
237*14b24e2bSVaishali Kulkarni };
238*14b24e2bSVaishali Kulkarni 
239*14b24e2bSVaishali Kulkarni 
240*14b24e2bSVaishali Kulkarni 
241*14b24e2bSVaishali Kulkarni 
242*14b24e2bSVaishali Kulkarni 
243*14b24e2bSVaishali Kulkarni 
244*14b24e2bSVaishali Kulkarni /*
245*14b24e2bSVaishali Kulkarni  * FCoE CQE type
246*14b24e2bSVaishali Kulkarni  */
247*14b24e2bSVaishali Kulkarni enum fcoe_cqe_type
248*14b24e2bSVaishali Kulkarni {
249*14b24e2bSVaishali Kulkarni 	FCOE_GOOD_COMPLETION_CQE_TYPE /* solicited response on a R/W or middle-path SQE */,
250*14b24e2bSVaishali Kulkarni 	FCOE_UNSOLIC_CQE_TYPE /* unsolicited packet, RQ consumed */,
251*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_DETECTION_CQE_TYPE /* timer expiration, validation error */,
252*14b24e2bSVaishali Kulkarni 	FCOE_WARNING_CQE_TYPE /* rec_tov or rr_tov timer expiration */,
253*14b24e2bSVaishali Kulkarni 	FCOE_EXCH_CLEANUP_CQE_TYPE /* task cleanup completed */,
254*14b24e2bSVaishali Kulkarni 	FCOE_ABTS_CQE_TYPE /* ABTS received and task cleaned */,
255*14b24e2bSVaishali Kulkarni 	FCOE_DUMMY_CQE_TYPE /* just increment SQ CONS */,
256*14b24e2bSVaishali Kulkarni 	FCOE_LOCAL_COMP_CQE_TYPE /* Task was completed wight after sending a pkt to the target */,
257*14b24e2bSVaishali Kulkarni 	MAX_FCOE_CQE_TYPE
258*14b24e2bSVaishali Kulkarni };
259*14b24e2bSVaishali Kulkarni 
260*14b24e2bSVaishali Kulkarni 
261*14b24e2bSVaishali Kulkarni /*
262*14b24e2bSVaishali Kulkarni  * FCoE device type
263*14b24e2bSVaishali Kulkarni  */
264*14b24e2bSVaishali Kulkarni enum fcoe_device_type
265*14b24e2bSVaishali Kulkarni {
266*14b24e2bSVaishali Kulkarni 	FCOE_TASK_DEV_TYPE_DISK,
267*14b24e2bSVaishali Kulkarni 	FCOE_TASK_DEV_TYPE_TAPE,
268*14b24e2bSVaishali Kulkarni 	MAX_FCOE_DEVICE_TYPE
269*14b24e2bSVaishali Kulkarni };
270*14b24e2bSVaishali Kulkarni 
271*14b24e2bSVaishali Kulkarni 
272*14b24e2bSVaishali Kulkarni 
273*14b24e2bSVaishali Kulkarni 
274*14b24e2bSVaishali Kulkarni /*
275*14b24e2bSVaishali Kulkarni  * FCoE fast path error codes
276*14b24e2bSVaishali Kulkarni  */
277*14b24e2bSVaishali Kulkarni enum fcoe_fp_error_warning_code
278*14b24e2bSVaishali Kulkarni {
279*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_OOO_RO /* XFER error codes */,
280*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED,
281*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_NULL_BURST_LEN,
282*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS,
283*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE,
284*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE,
285*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_PEND_XFER_SET,
286*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_OPENED_SEQ,
287*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_XFER_FCTL,
288*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET /* FCP RSP error codes */,
289*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD,
290*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD,
291*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE,
292*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET,
293*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ,
294*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_FCTL,
295*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET,
296*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET,
297*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_OOO_RO /* FCP DATA error codes */,
298*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE,
299*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS,
300*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET,
301*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET,
302*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET,
303*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET,
304*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ,
305*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_FCTL_INITIATIR,
306*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE /* Middle path error codes */,
307*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET,
308*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET,
309*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET,
310*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET,
311*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL,
312*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY,
313*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL,
314*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD /* Common error codes */,
315*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE,
316*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH,
317*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT,
318*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH,
319*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES,
320*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR,
321*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG,
322*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED,
323*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD,
324*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL,
325*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH,
326*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION /* Timer error codes */,
327*14b24e2bSVaishali Kulkarni 	FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION /* Timer error codes */,
328*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION /* Timer error codes */,
329*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED /* ABTSrsp pckt arrived unexpected */,
330*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP,
331*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER,
332*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE,
333*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_DATA_FCTL_TARGET,
334*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER,
335*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR,
336*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR,
337*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR,
338*14b24e2bSVaishali Kulkarni 	MAX_FCOE_FP_ERROR_WARNING_CODE
339*14b24e2bSVaishali Kulkarni };
340*14b24e2bSVaishali Kulkarni 
341*14b24e2bSVaishali Kulkarni 
342*14b24e2bSVaishali Kulkarni /*
343*14b24e2bSVaishali Kulkarni  * FCoE RESPQ element
344*14b24e2bSVaishali Kulkarni  */
345*14b24e2bSVaishali Kulkarni struct fcoe_respqe
346*14b24e2bSVaishali Kulkarni {
347*14b24e2bSVaishali Kulkarni 	__le16 ox_id /* OX_ID that is located in the FCP_RSP FC header */;
348*14b24e2bSVaishali Kulkarni 	__le16 rx_id /* RX_ID that is located in the FCP_RSP FC header */;
349*14b24e2bSVaishali Kulkarni 	__le32 additional_info;
350*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_PARAM_MASK            0xFFFFFF /* PARAM that is located in the FCP_RSP FC header */
351*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_PARAM_SHIFT           0
352*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_TARGET_AUTO_RSP_MASK  0xFF /* Indication whther its Target-auto-rsp mode or not */
353*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24
354*14b24e2bSVaishali Kulkarni };
355*14b24e2bSVaishali Kulkarni 
356*14b24e2bSVaishali Kulkarni 
357*14b24e2bSVaishali Kulkarni /*
358*14b24e2bSVaishali Kulkarni  * FCoE slow path error codes
359*14b24e2bSVaishali Kulkarni  */
360*14b24e2bSVaishali Kulkarni enum fcoe_sp_error_code
361*14b24e2bSVaishali Kulkarni {
362*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS /* Error codes for Error Reporting in slow path flows */,
363*14b24e2bSVaishali Kulkarni 	FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE,
364*14b24e2bSVaishali Kulkarni 	MAX_FCOE_SP_ERROR_CODE
365*14b24e2bSVaishali Kulkarni };
366*14b24e2bSVaishali Kulkarni 
367*14b24e2bSVaishali Kulkarni 
368*14b24e2bSVaishali Kulkarni /*
369*14b24e2bSVaishali Kulkarni  * FCoE SQE request type
370*14b24e2bSVaishali Kulkarni  */
371*14b24e2bSVaishali Kulkarni enum fcoe_sqe_request_type
372*14b24e2bSVaishali Kulkarni {
373*14b24e2bSVaishali Kulkarni 	SEND_FCOE_CMD,
374*14b24e2bSVaishali Kulkarni 	SEND_FCOE_MIDPATH,
375*14b24e2bSVaishali Kulkarni 	SEND_FCOE_ABTS_REQUEST,
376*14b24e2bSVaishali Kulkarni 	FCOE_EXCHANGE_CLEANUP,
377*14b24e2bSVaishali Kulkarni 	FCOE_SEQUENCE_RECOVERY,
378*14b24e2bSVaishali Kulkarni 	SEND_FCOE_XFER_RDY,
379*14b24e2bSVaishali Kulkarni 	SEND_FCOE_RSP,
380*14b24e2bSVaishali Kulkarni 	SEND_FCOE_RSP_WITH_SENSE_DATA,
381*14b24e2bSVaishali Kulkarni 	SEND_FCOE_TARGET_DATA,
382*14b24e2bSVaishali Kulkarni 	SEND_FCOE_INITIATOR_DATA,
383*14b24e2bSVaishali Kulkarni 	SEND_FCOE_XFER_CONTINUATION_RDY /* Xfer Continuation (==1) ready to be sent. Previous XFERs data received successfully. */,
384*14b24e2bSVaishali Kulkarni 	SEND_FCOE_TARGET_ABTS_RSP,
385*14b24e2bSVaishali Kulkarni 	MAX_FCOE_SQE_REQUEST_TYPE
386*14b24e2bSVaishali Kulkarni };
387*14b24e2bSVaishali Kulkarni 
388*14b24e2bSVaishali Kulkarni 
389*14b24e2bSVaishali Kulkarni /*
390*14b24e2bSVaishali Kulkarni  * FCoE task TX state
391*14b24e2bSVaishali Kulkarni  */
392*14b24e2bSVaishali Kulkarni enum fcoe_task_tx_state
393*14b24e2bSVaishali Kulkarni {
394*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_NORMAL /* Initiate state after driver has initialized the task */,
395*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED /* Updated by TX path after complete transmitting unsolicited packet */,
396*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_CLEAN_REQ /* Updated by TX path after start processing the task requesting the cleanup/abort operation */,
397*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_ABTS /* Updated by TX path during abort procedure */,
398*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_EXCLEANUP /* Updated by TX path during exchange cleanup procedure */,
399*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT /* Updated by TX path during exchange cleanup continuation task procedure */,
400*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE /* Updated by TX path during exchange cleanup first xfer procedure */,
401*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP /* Updated by TX path during exchange cleanup read task in Target */,
402*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE /* Updated by TX path during target exchange cleanup procedure */,
403*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TX_STATE_SEQRECOVERY /* Updated by TX path during sequence recovery procedure */,
404*14b24e2bSVaishali Kulkarni 	MAX_FCOE_TASK_TX_STATE
405*14b24e2bSVaishali Kulkarni };
406*14b24e2bSVaishali Kulkarni 
407*14b24e2bSVaishali Kulkarni 
408*14b24e2bSVaishali Kulkarni /*
409*14b24e2bSVaishali Kulkarni  * FCoE task type
410*14b24e2bSVaishali Kulkarni  */
411*14b24e2bSVaishali Kulkarni enum fcoe_task_type
412*14b24e2bSVaishali Kulkarni {
413*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_WRITE_INITIATOR,
414*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_READ_INITIATOR,
415*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_MIDPATH,
416*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_UNSOLICITED,
417*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_ABTS,
418*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_EXCHANGE_CLEANUP,
419*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_SEQUENCE_CLEANUP,
420*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_WRITE_TARGET,
421*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_READ_TARGET,
422*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_RSP,
423*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_RSP_SENSE_DATA,
424*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_ABTS_TARGET,
425*14b24e2bSVaishali Kulkarni 	FCOE_TASK_TYPE_ENUM_SIZE,
426*14b24e2bSVaishali Kulkarni 	MAX_FCOE_TASK_TYPE
427*14b24e2bSVaishali Kulkarni };
428*14b24e2bSVaishali Kulkarni 
429*14b24e2bSVaishali Kulkarni 
430*14b24e2bSVaishali Kulkarni 
431*14b24e2bSVaishali Kulkarni #endif /* __QEDF_HSI__ */
432