1
2
3
4
5
6
7
8
9#ifndef __QEDF_HSI__
10#define __QEDF_HSI__
11
12
13
14#include <linux/qed/common_hsi.h>
15
16
17
18
19#include <linux/qed/storage_common.h>
20
21
22
23
24#include <linux/qed/fcoe_common.h>
25
26
27
28
29
30struct fcoe_abts_info {
31 u8 r_ctl ;
32 u8 reserved0;
33 __le16 rx_id;
34 __le32 reserved2[2];
35 __le32 fc_payload[3] ;
36};
37
38
39
40
41
42enum fcoe_class_type {
43 FCOE_TASK_CLASS_TYPE_3,
44 FCOE_TASK_CLASS_TYPE_2,
45 MAX_FCOE_CLASS_TYPE
46};
47
48
49
50
51
52struct fcoe_cmdqe_control {
53 __le16 conn_id;
54 u8 num_additional_cmdqes;
55 u8 cmdType;
56
57#define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK 0x1
58#define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0
59#define FCOE_CMDQE_CONTROL_RESERVED1_MASK 0x7F
60#define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT 1
61 u8 reserved2[4];
62};
63
64
65
66
67struct fcoe_cmdqe {
68 struct fcoe_cmdqe_control hdr;
69 u8 fc_header[24];
70 __le32 fcp_cmd_payload[8];
71};
72
73
74
75
76
77
78struct fcoe_fcp_rsp_flags {
79 u8 flags;
80#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK 0x1
81#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
82#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK 0x1
83#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
84#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK 0x1
85#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
86#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK 0x1
87#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
88#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK 0x1
89#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
90#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK 0x7
91#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
92};
93
94
95
96
97struct fcoe_cqe_rsp_info {
98 struct fcoe_fcp_rsp_flags rsp_flags;
99 u8 scsi_status_code;
100 __le16 retry_delay_timer;
101 __le32 fcp_resid;
102 __le32 fcp_sns_len;
103 __le32 fcp_rsp_len;
104 __le16 rx_id;
105 u8 fw_error_flags;
106#define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK 0x1
107#define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0
108#define FCOE_CQE_RSP_INFO_RESREVED_MASK 0x7F
109#define FCOE_CQE_RSP_INFO_RESREVED_SHIFT 1
110 u8 reserved;
111 __le32 fw_residual ;
112};
113
114
115
116
117struct fcoe_cqe_target_info {
118 __le16 rx_id;
119 __le16 reserved0;
120 __le32 reserved1[5];
121};
122
123
124
125
126struct fcoe_err_report_entry {
127 __le32 err_warn_bitmap_lo ;
128 __le32 err_warn_bitmap_hi ;
129
130 __le32 tx_buf_off;
131
132 __le32 rx_buf_off;
133 __le16 rx_id ;
134 __le16 reserved1;
135 __le32 reserved2;
136};
137
138
139
140
141struct fcoe_cqe_midpath_info {
142 __le32 data_placement_size;
143 __le16 rx_id;
144 __le16 reserved0;
145 __le32 reserved1[4];
146};
147
148
149
150
151struct fcoe_unsolic_info {
152
153 struct scsi_bd bd_info;
154 __le16 conn_id ;
155 __le16 pkt_len ;
156 u8 reserved1[4];
157};
158
159
160
161
162struct fcoe_warning_report_entry {
163
164 struct scsi_bd bd_info;
165
166 __le32 buf_off;
167 __le16 rx_id ;
168 __le16 reserved1;
169};
170
171
172
173
174union fcoe_cqe_info {
175 struct fcoe_cqe_rsp_info rsp_info ;
176
177 struct fcoe_cqe_target_info target_info;
178
179 struct fcoe_err_report_entry err_info;
180 struct fcoe_abts_info abts_info ;
181
182 struct fcoe_cqe_midpath_info midpath_info;
183
184 struct fcoe_unsolic_info unsolic_info;
185
186 struct fcoe_warning_report_entry warn_info;
187};
188
189
190
191
192struct fcoe_cqe {
193 __le32 cqe_data;
194
195#define FCOE_CQE_TASK_ID_MASK 0xFFFF
196#define FCOE_CQE_TASK_ID_SHIFT 0
197
198
199
200
201
202#define FCOE_CQE_CQE_TYPE_MASK 0xF
203#define FCOE_CQE_CQE_TYPE_SHIFT 16
204#define FCOE_CQE_RESERVED0_MASK 0xFFF
205#define FCOE_CQE_RESERVED0_SHIFT 20
206 __le16 reserved1;
207 __le16 fw_cq_prod;
208 union fcoe_cqe_info cqe_info;
209};
210
211
212
213
214enum fcoe_cqe_type {
215
216 FCOE_GOOD_COMPLETION_CQE_TYPE,
217 FCOE_UNSOLIC_CQE_TYPE ,
218 FCOE_ERROR_DETECTION_CQE_TYPE ,
219 FCOE_WARNING_CQE_TYPE ,
220 FCOE_EXCH_CLEANUP_CQE_TYPE ,
221 FCOE_ABTS_CQE_TYPE ,
222 FCOE_DUMMY_CQE_TYPE ,
223
224 FCOE_LOCAL_COMP_CQE_TYPE,
225 MAX_FCOE_CQE_TYPE
226};
227
228
229
230
231
232enum fcoe_device_type {
233 FCOE_TASK_DEV_TYPE_DISK,
234 FCOE_TASK_DEV_TYPE_TAPE,
235 MAX_FCOE_DEVICE_TYPE
236};
237
238
239
240
241
242
243
244enum fcoe_fp_error_warning_code {
245 FCOE_ERROR_CODE_XFER_OOO_RO ,
246 FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED,
247 FCOE_ERROR_CODE_XFER_NULL_BURST_LEN,
248 FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS,
249 FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE,
250 FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE,
251 FCOE_ERROR_CODE_XFER_PEND_XFER_SET,
252 FCOE_ERROR_CODE_XFER_OPENED_SEQ,
253 FCOE_ERROR_CODE_XFER_FCTL,
254 FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET ,
255 FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD,
256 FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD,
257 FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE,
258 FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET,
259 FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ,
260 FCOE_ERROR_CODE_FCP_RSP_FCTL,
261 FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET,
262 FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET,
263 FCOE_ERROR_CODE_DATA_OOO_RO ,
264 FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE,
265 FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS,
266 FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET,
267 FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET,
268 FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET,
269 FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET,
270 FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ,
271 FCOE_ERROR_CODE_DATA_FCTL_INITIATIR,
272 FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE ,
273 FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET,
274 FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET,
275 FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET,
276 FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET,
277 FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL,
278 FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY,
279 FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL,
280 FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD ,
281 FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE,
282 FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH,
283 FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT,
284 FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH,
285 FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES,
286 FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR,
287 FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG,
288 FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED,
289 FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD,
290 FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL,
291 FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH,
292 FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION ,
293 FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION ,
294 FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION ,
295
296 FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED,
297 FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP,
298 FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER,
299 FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE,
300 FCOE_ERROR_CODE_DATA_FCTL_TARGET,
301 FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER,
302 FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR,
303 FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR,
304 FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR,
305 MAX_FCOE_FP_ERROR_WARNING_CODE
306};
307
308
309
310
311
312struct fcoe_respqe {
313 __le16 ox_id ;
314 __le16 rx_id ;
315 __le32 additional_info;
316
317#define FCOE_RESPQE_PARAM_MASK 0xFFFFFF
318#define FCOE_RESPQE_PARAM_SHIFT 0
319
320#define FCOE_RESPQE_TARGET_AUTO_RSP_MASK 0xFF
321#define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24
322};
323
324
325
326
327
328enum fcoe_sp_error_code {
329
330 FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS,
331 FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE,
332 MAX_FCOE_SP_ERROR_CODE
333};
334
335
336
337
338
339enum fcoe_sqe_request_type {
340 SEND_FCOE_CMD,
341 SEND_FCOE_MIDPATH,
342 SEND_FCOE_ABTS_REQUEST,
343 FCOE_EXCHANGE_CLEANUP,
344 FCOE_SEQUENCE_RECOVERY,
345 SEND_FCOE_XFER_RDY,
346 SEND_FCOE_RSP,
347 SEND_FCOE_RSP_WITH_SENSE_DATA,
348 SEND_FCOE_TARGET_DATA,
349 SEND_FCOE_INITIATOR_DATA,
350
351
352
353
354 SEND_FCOE_XFER_CONTINUATION_RDY,
355 SEND_FCOE_TARGET_ABTS_RSP,
356 MAX_FCOE_SQE_REQUEST_TYPE
357};
358
359
360
361
362
363enum fcoe_task_tx_state {
364
365 FCOE_TASK_TX_STATE_NORMAL,
366
367 FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED,
368
369
370
371
372 FCOE_TASK_TX_STATE_CLEAN_REQ,
373 FCOE_TASK_TX_STATE_ABTS ,
374
375 FCOE_TASK_TX_STATE_EXCLEANUP,
376
377
378
379
380 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT,
381
382 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE,
383
384 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP,
385
386 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE,
387
388 FCOE_TASK_TX_STATE_SEQRECOVERY,
389 MAX_FCOE_TASK_TX_STATE
390};
391
392
393
394
395
396enum fcoe_task_type {
397 FCOE_TASK_TYPE_WRITE_INITIATOR,
398 FCOE_TASK_TYPE_READ_INITIATOR,
399 FCOE_TASK_TYPE_MIDPATH,
400 FCOE_TASK_TYPE_UNSOLICITED,
401 FCOE_TASK_TYPE_ABTS,
402 FCOE_TASK_TYPE_EXCHANGE_CLEANUP,
403 FCOE_TASK_TYPE_SEQUENCE_CLEANUP,
404 FCOE_TASK_TYPE_WRITE_TARGET,
405 FCOE_TASK_TYPE_READ_TARGET,
406 FCOE_TASK_TYPE_RSP,
407 FCOE_TASK_TYPE_RSP_SENSE_DATA,
408 FCOE_TASK_TYPE_ABTS_TARGET,
409 FCOE_TASK_TYPE_ENUM_SIZE,
410 MAX_FCOE_TASK_TYPE
411};
412
413struct scsi_glbl_queue_entry {
414
415 struct regpair rq_pbl_addr;
416
417 struct regpair cq_pbl_addr;
418
419 struct regpair cmdq_pbl_addr;
420};
421
422#endif
423