xref: /OK3568_Linux_fs/kernel/drivers/scsi/qedf/qedf_hsi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  QLogic FCoE Offload Driver
4*4882a593Smuzhiyun  *  Copyright (c) 2016-2018 Cavium Inc.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef __QEDF_HSI__
7*4882a593Smuzhiyun #define __QEDF_HSI__
8*4882a593Smuzhiyun /*
9*4882a593Smuzhiyun  * Add include to common target
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun #include <linux/qed/common_hsi.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*
14*4882a593Smuzhiyun  * Add include to common storage target
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun #include <linux/qed/storage_common.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /*
19*4882a593Smuzhiyun  * Add include to common fcoe target for both eCore and protocol driver
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun #include <linux/qed/fcoe_common.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /*
25*4882a593Smuzhiyun  * FCoE CQ element ABTS information
26*4882a593Smuzhiyun  */
27*4882a593Smuzhiyun struct fcoe_abts_info {
28*4882a593Smuzhiyun 	u8 r_ctl /* R_CTL in the ABTS response frame */;
29*4882a593Smuzhiyun 	u8 reserved0;
30*4882a593Smuzhiyun 	__le16 rx_id;
31*4882a593Smuzhiyun 	__le32 reserved2[2];
32*4882a593Smuzhiyun 	__le32 fc_payload[3] /* ABTS FC payload response frame */;
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /*
37*4882a593Smuzhiyun  * FCoE class type
38*4882a593Smuzhiyun  */
39*4882a593Smuzhiyun enum fcoe_class_type {
40*4882a593Smuzhiyun 	FCOE_TASK_CLASS_TYPE_3,
41*4882a593Smuzhiyun 	FCOE_TASK_CLASS_TYPE_2,
42*4882a593Smuzhiyun 	MAX_FCOE_CLASS_TYPE
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /*
47*4882a593Smuzhiyun  * FCoE CMDQ element control information
48*4882a593Smuzhiyun  */
49*4882a593Smuzhiyun struct fcoe_cmdqe_control {
50*4882a593Smuzhiyun 	__le16 conn_id;
51*4882a593Smuzhiyun 	u8 num_additional_cmdqes;
52*4882a593Smuzhiyun 	u8 cmdType;
53*4882a593Smuzhiyun 	/* true for ABTS request cmdqe. used in Target mode */
54*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK  0x1
55*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0
56*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_RESERVED1_MASK   0x7F
57*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT  1
58*4882a593Smuzhiyun 	u8 reserved2[4];
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /*
62*4882a593Smuzhiyun  * FCoE control + payload CMDQ element
63*4882a593Smuzhiyun  */
64*4882a593Smuzhiyun struct fcoe_cmdqe {
65*4882a593Smuzhiyun 	struct fcoe_cmdqe_control hdr;
66*4882a593Smuzhiyun 	u8 fc_header[24];
67*4882a593Smuzhiyun 	__le32 fcp_cmd_payload[8];
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun /*
73*4882a593Smuzhiyun  * FCP RSP flags
74*4882a593Smuzhiyun  */
75*4882a593Smuzhiyun struct fcoe_fcp_rsp_flags {
76*4882a593Smuzhiyun 	u8 flags;
77*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK  0x1
78*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
79*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK  0x1
80*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
81*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK     0x1
82*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT    2
83*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK    0x1
84*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT   3
85*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK       0x1
86*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT      4
87*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK     0x7
88*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT    5
89*4882a593Smuzhiyun };
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /*
92*4882a593Smuzhiyun  * FCoE CQ element response information
93*4882a593Smuzhiyun  */
94*4882a593Smuzhiyun struct fcoe_cqe_rsp_info {
95*4882a593Smuzhiyun 	struct fcoe_fcp_rsp_flags rsp_flags;
96*4882a593Smuzhiyun 	u8 scsi_status_code;
97*4882a593Smuzhiyun 	__le16 retry_delay_timer;
98*4882a593Smuzhiyun 	__le32 fcp_resid;
99*4882a593Smuzhiyun 	__le32 fcp_sns_len;
100*4882a593Smuzhiyun 	__le32 fcp_rsp_len;
101*4882a593Smuzhiyun 	__le16 rx_id;
102*4882a593Smuzhiyun 	u8 fw_error_flags;
103*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK  0x1 /* FW detected underrun */
104*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0
105*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_RESREVED_MASK     0x7F
106*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_RESREVED_SHIFT    1
107*4882a593Smuzhiyun 	u8 reserved;
108*4882a593Smuzhiyun 	__le32 fw_residual /* Residual bytes calculated by FW */;
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun /*
112*4882a593Smuzhiyun  * FCoE CQ element Target completion information
113*4882a593Smuzhiyun  */
114*4882a593Smuzhiyun struct fcoe_cqe_target_info {
115*4882a593Smuzhiyun 	__le16 rx_id;
116*4882a593Smuzhiyun 	__le16 reserved0;
117*4882a593Smuzhiyun 	__le32 reserved1[5];
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /*
121*4882a593Smuzhiyun  * FCoE error/warning reporting entry
122*4882a593Smuzhiyun  */
123*4882a593Smuzhiyun struct fcoe_err_report_entry {
124*4882a593Smuzhiyun 	__le32 err_warn_bitmap_lo /* Error bitmap lower 32 bits */;
125*4882a593Smuzhiyun 	__le32 err_warn_bitmap_hi /* Error bitmap higher 32 bits */;
126*4882a593Smuzhiyun 	/* Buffer offset the beginning of the Sequence last transmitted */
127*4882a593Smuzhiyun 	__le32 tx_buf_off;
128*4882a593Smuzhiyun 	/* Buffer offset from the beginning of the Sequence last received */
129*4882a593Smuzhiyun 	__le32 rx_buf_off;
130*4882a593Smuzhiyun 	__le16 rx_id /* RX_ID of the associated task */;
131*4882a593Smuzhiyun 	__le16 reserved1;
132*4882a593Smuzhiyun 	__le32 reserved2;
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /*
136*4882a593Smuzhiyun  * FCoE CQ element middle path information
137*4882a593Smuzhiyun  */
138*4882a593Smuzhiyun struct fcoe_cqe_midpath_info {
139*4882a593Smuzhiyun 	__le32 data_placement_size;
140*4882a593Smuzhiyun 	__le16 rx_id;
141*4882a593Smuzhiyun 	__le16 reserved0;
142*4882a593Smuzhiyun 	__le32 reserved1[4];
143*4882a593Smuzhiyun };
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /*
146*4882a593Smuzhiyun  * FCoE CQ element unsolicited information
147*4882a593Smuzhiyun  */
148*4882a593Smuzhiyun struct fcoe_unsolic_info {
149*4882a593Smuzhiyun 	/* BD information: Physical address and opaque data */
150*4882a593Smuzhiyun 	struct scsi_bd bd_info;
151*4882a593Smuzhiyun 	__le16 conn_id /* Connection ID the frame is associated to */;
152*4882a593Smuzhiyun 	__le16 pkt_len /* Packet length */;
153*4882a593Smuzhiyun 	u8 reserved1[4];
154*4882a593Smuzhiyun };
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /*
157*4882a593Smuzhiyun  * FCoE warning reporting entry
158*4882a593Smuzhiyun  */
159*4882a593Smuzhiyun struct fcoe_warning_report_entry {
160*4882a593Smuzhiyun 	/* BD information: Physical address and opaque data */
161*4882a593Smuzhiyun 	struct scsi_bd bd_info;
162*4882a593Smuzhiyun 	/* Buffer offset the beginning of the Sequence last transmitted */
163*4882a593Smuzhiyun 	__le32 buf_off;
164*4882a593Smuzhiyun 	__le16 rx_id /* RX_ID of the associated task */;
165*4882a593Smuzhiyun 	__le16 reserved1;
166*4882a593Smuzhiyun };
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /*
169*4882a593Smuzhiyun  * FCoE CQ element information
170*4882a593Smuzhiyun  */
171*4882a593Smuzhiyun union fcoe_cqe_info {
172*4882a593Smuzhiyun 	struct fcoe_cqe_rsp_info rsp_info /* Response completion information */;
173*4882a593Smuzhiyun 	/* Target completion information */
174*4882a593Smuzhiyun 	struct fcoe_cqe_target_info target_info;
175*4882a593Smuzhiyun 	/* Error completion information */
176*4882a593Smuzhiyun 	struct fcoe_err_report_entry err_info;
177*4882a593Smuzhiyun 	struct fcoe_abts_info abts_info /* ABTS completion information */;
178*4882a593Smuzhiyun 	/* Middle path completion information */
179*4882a593Smuzhiyun 	struct fcoe_cqe_midpath_info midpath_info;
180*4882a593Smuzhiyun 	/* Unsolicited packet completion information */
181*4882a593Smuzhiyun 	struct fcoe_unsolic_info unsolic_info;
182*4882a593Smuzhiyun 	/* Warning completion information (Rec Tov expiration) */
183*4882a593Smuzhiyun 	struct fcoe_warning_report_entry warn_info;
184*4882a593Smuzhiyun };
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun /*
187*4882a593Smuzhiyun  * FCoE CQ element
188*4882a593Smuzhiyun  */
189*4882a593Smuzhiyun struct fcoe_cqe {
190*4882a593Smuzhiyun 	__le32 cqe_data;
191*4882a593Smuzhiyun 	/* The task identifier (OX_ID) to be completed */
192*4882a593Smuzhiyun #define FCOE_CQE_TASK_ID_MASK    0xFFFF
193*4882a593Smuzhiyun #define FCOE_CQE_TASK_ID_SHIFT   0
194*4882a593Smuzhiyun 	/*
195*4882a593Smuzhiyun 	 * The CQE type: 0x0 Indicating on a pending work request completion.
196*4882a593Smuzhiyun 	 * 0x1 - Indicating on an unsolicited event notification. use enum
197*4882a593Smuzhiyun 	 * fcoe_cqe_type  (use enum fcoe_cqe_type)
198*4882a593Smuzhiyun 	 */
199*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE_MASK   0xF
200*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE_SHIFT  16
201*4882a593Smuzhiyun #define FCOE_CQE_RESERVED0_MASK  0xFFF
202*4882a593Smuzhiyun #define FCOE_CQE_RESERVED0_SHIFT 20
203*4882a593Smuzhiyun 	__le16 reserved1;
204*4882a593Smuzhiyun 	__le16 fw_cq_prod;
205*4882a593Smuzhiyun 	union fcoe_cqe_info cqe_info;
206*4882a593Smuzhiyun };
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun /*
209*4882a593Smuzhiyun  * FCoE CQE type
210*4882a593Smuzhiyun  */
211*4882a593Smuzhiyun enum fcoe_cqe_type {
212*4882a593Smuzhiyun 	/* solicited response on a R/W or middle-path SQE */
213*4882a593Smuzhiyun 	FCOE_GOOD_COMPLETION_CQE_TYPE,
214*4882a593Smuzhiyun 	FCOE_UNSOLIC_CQE_TYPE /* unsolicited packet, RQ consumed */,
215*4882a593Smuzhiyun 	FCOE_ERROR_DETECTION_CQE_TYPE /* timer expiration, validation error */,
216*4882a593Smuzhiyun 	FCOE_WARNING_CQE_TYPE /* rec_tov or rr_tov timer expiration */,
217*4882a593Smuzhiyun 	FCOE_EXCH_CLEANUP_CQE_TYPE /* task cleanup completed */,
218*4882a593Smuzhiyun 	FCOE_ABTS_CQE_TYPE /* ABTS received and task cleaned */,
219*4882a593Smuzhiyun 	FCOE_DUMMY_CQE_TYPE /* just increment SQ CONS */,
220*4882a593Smuzhiyun 	/* Task was completed wight after sending a pkt to the target */
221*4882a593Smuzhiyun 	FCOE_LOCAL_COMP_CQE_TYPE,
222*4882a593Smuzhiyun 	MAX_FCOE_CQE_TYPE
223*4882a593Smuzhiyun };
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /*
226*4882a593Smuzhiyun  * FCoE fast path error codes
227*4882a593Smuzhiyun  */
228*4882a593Smuzhiyun enum fcoe_fp_error_warning_code {
229*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_OOO_RO /* XFER error codes */,
230*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED,
231*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_NULL_BURST_LEN,
232*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS,
233*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE,
234*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE,
235*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_PEND_XFER_SET,
236*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_OPENED_SEQ,
237*4882a593Smuzhiyun 	FCOE_ERROR_CODE_XFER_FCTL,
238*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET /* FCP RSP error codes */,
239*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD,
240*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD,
241*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE,
242*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET,
243*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ,
244*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_FCTL,
245*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET,
246*4882a593Smuzhiyun 	FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET,
247*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_OOO_RO /* FCP DATA error codes */,
248*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE,
249*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS,
250*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET,
251*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET,
252*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET,
253*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET,
254*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ,
255*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_FCTL_INITIATIR,
256*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE /* Middle path error codes */,
257*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET,
258*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET,
259*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET,
260*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET,
261*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL,
262*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY,
263*4882a593Smuzhiyun 	FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL,
264*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD /* Common error codes */,
265*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE,
266*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH,
267*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT,
268*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH,
269*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES,
270*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR,
271*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG,
272*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED,
273*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD,
274*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL,
275*4882a593Smuzhiyun 	FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH,
276*4882a593Smuzhiyun 	FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION /* Timer error codes */,
277*4882a593Smuzhiyun 	FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION /* Timer error codes */,
278*4882a593Smuzhiyun 	FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION /* Timer error codes */,
279*4882a593Smuzhiyun 	/* ABTSrsp pckt arrived unexpected */
280*4882a593Smuzhiyun 	FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED,
281*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP,
282*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER,
283*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE,
284*4882a593Smuzhiyun 	FCOE_ERROR_CODE_DATA_FCTL_TARGET,
285*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER,
286*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR,
287*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR,
288*4882a593Smuzhiyun 	FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR,
289*4882a593Smuzhiyun 	MAX_FCOE_FP_ERROR_WARNING_CODE
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun /*
294*4882a593Smuzhiyun  * FCoE RESPQ element
295*4882a593Smuzhiyun  */
296*4882a593Smuzhiyun struct fcoe_respqe {
297*4882a593Smuzhiyun 	__le16 ox_id /* OX_ID that is located in the FCP_RSP FC header */;
298*4882a593Smuzhiyun 	__le16 rx_id /* RX_ID that is located in the FCP_RSP FC header */;
299*4882a593Smuzhiyun 	__le32 additional_info;
300*4882a593Smuzhiyun /* PARAM that is located in the FCP_RSP FC header */
301*4882a593Smuzhiyun #define FCOE_RESPQE_PARAM_MASK            0xFFFFFF
302*4882a593Smuzhiyun #define FCOE_RESPQE_PARAM_SHIFT           0
303*4882a593Smuzhiyun /* Indication whther its Target-auto-rsp mode or not */
304*4882a593Smuzhiyun #define FCOE_RESPQE_TARGET_AUTO_RSP_MASK  0xFF
305*4882a593Smuzhiyun #define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24
306*4882a593Smuzhiyun };
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun /*
310*4882a593Smuzhiyun  * FCoE slow path error codes
311*4882a593Smuzhiyun  */
312*4882a593Smuzhiyun enum fcoe_sp_error_code {
313*4882a593Smuzhiyun 	/* Error codes for Error Reporting in slow path flows */
314*4882a593Smuzhiyun 	FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS,
315*4882a593Smuzhiyun 	FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE,
316*4882a593Smuzhiyun 	MAX_FCOE_SP_ERROR_CODE
317*4882a593Smuzhiyun };
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /*
320*4882a593Smuzhiyun  * FCoE task TX state
321*4882a593Smuzhiyun  */
322*4882a593Smuzhiyun enum fcoe_task_tx_state {
323*4882a593Smuzhiyun 	/* Initiate state after driver has initialized the task */
324*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_NORMAL,
325*4882a593Smuzhiyun 	/* Updated by TX path after complete transmitting unsolicited packet */
326*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED,
327*4882a593Smuzhiyun 	/*
328*4882a593Smuzhiyun 	 * Updated by TX path after start processing the task requesting the
329*4882a593Smuzhiyun 	 * cleanup/abort operation
330*4882a593Smuzhiyun 	 */
331*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_CLEAN_REQ,
332*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_ABTS /* Updated by TX path during abort procedure */,
333*4882a593Smuzhiyun 	/* Updated by TX path during exchange cleanup procedure */
334*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_EXCLEANUP,
335*4882a593Smuzhiyun 	/*
336*4882a593Smuzhiyun 	 * Updated by TX path during exchange cleanup continuation task
337*4882a593Smuzhiyun 	 * procedure
338*4882a593Smuzhiyun 	 */
339*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT,
340*4882a593Smuzhiyun 	/* Updated by TX path during exchange cleanup first xfer procedure */
341*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE,
342*4882a593Smuzhiyun 	/* Updated by TX path during exchange cleanup read task in Target */
343*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP,
344*4882a593Smuzhiyun 	/* Updated by TX path during target exchange cleanup procedure */
345*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE,
346*4882a593Smuzhiyun 	/* Updated by TX path during sequence recovery procedure */
347*4882a593Smuzhiyun 	FCOE_TASK_TX_STATE_SEQRECOVERY,
348*4882a593Smuzhiyun 	MAX_FCOE_TASK_TX_STATE
349*4882a593Smuzhiyun };
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun #endif /* __QEDF_HSI__ */
352