1 /* 57xx_iscsi_hsi.h: QLogic NetXtreme II iSCSI HSI.
2  *
3  * Copyright (c) 2006 - 2013 Broadcom Corporation
4  * Copyright (c) 2014, QLogic Corporation
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation.
9  *
10  * Written by: Anil Veerabhadrappa (anilgv@broadcom.com)
11  * Previously Maintained by: Eddie Wai (eddie.wai@broadcom.com)
12  * Maintained by: QLogic-Storage-Upstream@qlogic.com
13  */
14 #ifndef __57XX_ISCSI_HSI_LINUX_LE__
15 #define __57XX_ISCSI_HSI_LINUX_LE__
16 
17 /*
18  * iSCSI Async CQE
19  */
20 struct bnx2i_async_msg {
21 #if defined(__BIG_ENDIAN)
22 	u8 op_code;
23 	u8 reserved1;
24 	u16 reserved0;
25 #elif defined(__LITTLE_ENDIAN)
26 	u16 reserved0;
27 	u8 reserved1;
28 	u8 op_code;
29 #endif
30 	u32 reserved2;
31 	u32 exp_cmd_sn;
32 	u32 max_cmd_sn;
33 	u32 reserved3[2];
34 #if defined(__BIG_ENDIAN)
35 	u16 reserved5;
36 	u8 err_code;
37 	u8 reserved4;
38 #elif defined(__LITTLE_ENDIAN)
39 	u8 reserved4;
40 	u8 err_code;
41 	u16 reserved5;
42 #endif
43 	u32 reserved6;
44 	u32 lun[2];
45 #if defined(__BIG_ENDIAN)
46 	u8 async_event;
47 	u8 async_vcode;
48 	u16 param1;
49 #elif defined(__LITTLE_ENDIAN)
50 	u16 param1;
51 	u8 async_vcode;
52 	u8 async_event;
53 #endif
54 #if defined(__BIG_ENDIAN)
55 	u16 param2;
56 	u16 param3;
57 #elif defined(__LITTLE_ENDIAN)
58 	u16 param3;
59 	u16 param2;
60 #endif
61 	u32 reserved7[3];
62 	u32 cq_req_sn;
63 };
64 
65 
66 /*
67  * iSCSI Buffer Descriptor (BD)
68  */
69 struct iscsi_bd {
70 	u32 buffer_addr_hi;
71 	u32 buffer_addr_lo;
72 #if defined(__BIG_ENDIAN)
73 	u16 reserved0;
74 	u16 buffer_length;
75 #elif defined(__LITTLE_ENDIAN)
76 	u16 buffer_length;
77 	u16 reserved0;
78 #endif
79 #if defined(__BIG_ENDIAN)
80 	u16 reserved3;
81 	u16 flags;
82 #define ISCSI_BD_RESERVED1 (0x3F<<0)
83 #define ISCSI_BD_RESERVED1_SHIFT 0
84 #define ISCSI_BD_LAST_IN_BD_CHAIN (0x1<<6)
85 #define ISCSI_BD_LAST_IN_BD_CHAIN_SHIFT 6
86 #define ISCSI_BD_FIRST_IN_BD_CHAIN (0x1<<7)
87 #define ISCSI_BD_FIRST_IN_BD_CHAIN_SHIFT 7
88 #define ISCSI_BD_RESERVED2 (0xFF<<8)
89 #define ISCSI_BD_RESERVED2_SHIFT 8
90 #elif defined(__LITTLE_ENDIAN)
91 	u16 flags;
92 #define ISCSI_BD_RESERVED1 (0x3F<<0)
93 #define ISCSI_BD_RESERVED1_SHIFT 0
94 #define ISCSI_BD_LAST_IN_BD_CHAIN (0x1<<6)
95 #define ISCSI_BD_LAST_IN_BD_CHAIN_SHIFT 6
96 #define ISCSI_BD_FIRST_IN_BD_CHAIN (0x1<<7)
97 #define ISCSI_BD_FIRST_IN_BD_CHAIN_SHIFT 7
98 #define ISCSI_BD_RESERVED2 (0xFF<<8)
99 #define ISCSI_BD_RESERVED2_SHIFT 8
100 	u16 reserved3;
101 #endif
102 };
103 
104 
105 /*
106  * iSCSI Cleanup SQ WQE
107  */
108 struct bnx2i_cleanup_request {
109 #if defined(__BIG_ENDIAN)
110 	u8 op_code;
111 	u8 reserved1;
112 	u16 reserved0;
113 #elif defined(__LITTLE_ENDIAN)
114 	u16 reserved0;
115 	u8 reserved1;
116 	u8 op_code;
117 #endif
118 	u32 reserved2[3];
119 #if defined(__BIG_ENDIAN)
120 	u16 reserved3;
121 	u16 itt;
122 #define ISCSI_CLEANUP_REQUEST_INDEX (0x3FFF<<0)
123 #define ISCSI_CLEANUP_REQUEST_INDEX_SHIFT 0
124 #define ISCSI_CLEANUP_REQUEST_TYPE (0x3<<14)
125 #define ISCSI_CLEANUP_REQUEST_TYPE_SHIFT 14
126 #elif defined(__LITTLE_ENDIAN)
127 	u16 itt;
128 #define ISCSI_CLEANUP_REQUEST_INDEX (0x3FFF<<0)
129 #define ISCSI_CLEANUP_REQUEST_INDEX_SHIFT 0
130 #define ISCSI_CLEANUP_REQUEST_TYPE (0x3<<14)
131 #define ISCSI_CLEANUP_REQUEST_TYPE_SHIFT 14
132 	u16 reserved3;
133 #endif
134 	u32 reserved4[10];
135 #if defined(__BIG_ENDIAN)
136 	u8 cq_index;
137 	u8 reserved6;
138 	u16 reserved5;
139 #elif defined(__LITTLE_ENDIAN)
140 	u16 reserved5;
141 	u8 reserved6;
142 	u8 cq_index;
143 #endif
144 };
145 
146 
147 /*
148  * iSCSI Cleanup CQE
149  */
150 struct bnx2i_cleanup_response {
151 #if defined(__BIG_ENDIAN)
152 	u8 op_code;
153 	u8 status;
154 	u16 reserved0;
155 #elif defined(__LITTLE_ENDIAN)
156 	u16 reserved0;
157 	u8 status;
158 	u8 op_code;
159 #endif
160 	u32 reserved1[3];
161 	u32 reserved2[2];
162 #if defined(__BIG_ENDIAN)
163 	u16 reserved4;
164 	u8 err_code;
165 	u8 reserved3;
166 #elif defined(__LITTLE_ENDIAN)
167 	u8 reserved3;
168 	u8 err_code;
169 	u16 reserved4;
170 #endif
171 	u32 reserved5[7];
172 #if defined(__BIG_ENDIAN)
173 	u16 reserved6;
174 	u16 itt;
175 #define ISCSI_CLEANUP_RESPONSE_INDEX (0x3FFF<<0)
176 #define ISCSI_CLEANUP_RESPONSE_INDEX_SHIFT 0
177 #define ISCSI_CLEANUP_RESPONSE_TYPE (0x3<<14)
178 #define ISCSI_CLEANUP_RESPONSE_TYPE_SHIFT 14
179 #elif defined(__LITTLE_ENDIAN)
180 	u16 itt;
181 #define ISCSI_CLEANUP_RESPONSE_INDEX (0x3FFF<<0)
182 #define ISCSI_CLEANUP_RESPONSE_INDEX_SHIFT 0
183 #define ISCSI_CLEANUP_RESPONSE_TYPE (0x3<<14)
184 #define ISCSI_CLEANUP_RESPONSE_TYPE_SHIFT 14
185 	u16 reserved6;
186 #endif
187 	u32 cq_req_sn;
188 };
189 
190 
191 /*
192  * SCSI read/write SQ WQE
193  */
194 struct bnx2i_cmd_request {
195 #if defined(__BIG_ENDIAN)
196 	u8 op_code;
197 	u8 op_attr;
198 #define ISCSI_CMD_REQUEST_TASK_ATTR (0x7<<0)
199 #define ISCSI_CMD_REQUEST_TASK_ATTR_SHIFT 0
200 #define ISCSI_CMD_REQUEST_RESERVED1 (0x3<<3)
201 #define ISCSI_CMD_REQUEST_RESERVED1_SHIFT 3
202 #define ISCSI_CMD_REQUEST_WRITE (0x1<<5)
203 #define ISCSI_CMD_REQUEST_WRITE_SHIFT 5
204 #define ISCSI_CMD_REQUEST_READ (0x1<<6)
205 #define ISCSI_CMD_REQUEST_READ_SHIFT 6
206 #define ISCSI_CMD_REQUEST_FINAL (0x1<<7)
207 #define ISCSI_CMD_REQUEST_FINAL_SHIFT 7
208 	u16 reserved0;
209 #elif defined(__LITTLE_ENDIAN)
210 	u16 reserved0;
211 	u8 op_attr;
212 #define ISCSI_CMD_REQUEST_TASK_ATTR (0x7<<0)
213 #define ISCSI_CMD_REQUEST_TASK_ATTR_SHIFT 0
214 #define ISCSI_CMD_REQUEST_RESERVED1 (0x3<<3)
215 #define ISCSI_CMD_REQUEST_RESERVED1_SHIFT 3
216 #define ISCSI_CMD_REQUEST_WRITE (0x1<<5)
217 #define ISCSI_CMD_REQUEST_WRITE_SHIFT 5
218 #define ISCSI_CMD_REQUEST_READ (0x1<<6)
219 #define ISCSI_CMD_REQUEST_READ_SHIFT 6
220 #define ISCSI_CMD_REQUEST_FINAL (0x1<<7)
221 #define ISCSI_CMD_REQUEST_FINAL_SHIFT 7
222 	u8 op_code;
223 #endif
224 #if defined(__BIG_ENDIAN)
225 	u16 ud_buffer_offset;
226 	u16 sd_buffer_offset;
227 #elif defined(__LITTLE_ENDIAN)
228 	u16 sd_buffer_offset;
229 	u16 ud_buffer_offset;
230 #endif
231 	u32 lun[2];
232 #if defined(__BIG_ENDIAN)
233 	u16 reserved2;
234 	u16 itt;
235 #define ISCSI_CMD_REQUEST_INDEX (0x3FFF<<0)
236 #define ISCSI_CMD_REQUEST_INDEX_SHIFT 0
237 #define ISCSI_CMD_REQUEST_TYPE (0x3<<14)
238 #define ISCSI_CMD_REQUEST_TYPE_SHIFT 14
239 #elif defined(__LITTLE_ENDIAN)
240 	u16 itt;
241 #define ISCSI_CMD_REQUEST_INDEX (0x3FFF<<0)
242 #define ISCSI_CMD_REQUEST_INDEX_SHIFT 0
243 #define ISCSI_CMD_REQUEST_TYPE (0x3<<14)
244 #define ISCSI_CMD_REQUEST_TYPE_SHIFT 14
245 	u16 reserved2;
246 #endif
247 	u32 total_data_transfer_length;
248 	u32 cmd_sn;
249 	u32 reserved3;
250 	u32 cdb[4];
251 	u32 zero_fill;
252 	u32 bd_list_addr_lo;
253 	u32 bd_list_addr_hi;
254 #if defined(__BIG_ENDIAN)
255 	u8 cq_index;
256 	u8 sd_start_bd_index;
257 	u8 ud_start_bd_index;
258 	u8 num_bds;
259 #elif defined(__LITTLE_ENDIAN)
260 	u8 num_bds;
261 	u8 ud_start_bd_index;
262 	u8 sd_start_bd_index;
263 	u8 cq_index;
264 #endif
265 };
266 
267 
268 /*
269  * task statistics for write response
270  */
271 struct bnx2i_write_resp_task_stat {
272 #if defined(__BIG_ENDIAN)
273 	u16 num_r2ts;
274 	u16 num_data_outs;
275 #elif defined(__LITTLE_ENDIAN)
276 	u16 num_data_outs;
277 	u16 num_r2ts;
278 #endif
279 };
280 
281 /*
282  * task statistics for read response
283  */
284 struct bnx2i_read_resp_task_stat {
285 #if defined(__BIG_ENDIAN)
286 	u16 reserved;
287 	u16 num_data_ins;
288 #elif defined(__LITTLE_ENDIAN)
289 	u16 num_data_ins;
290 	u16 reserved;
291 #endif
292 };
293 
294 /*
295  * task statistics for iSCSI cmd response
296  */
297 union bnx2i_cmd_resp_task_stat {
298 	struct bnx2i_write_resp_task_stat write_stat;
299 	struct bnx2i_read_resp_task_stat read_stat;
300 };
301 
302 /*
303  * SCSI Command CQE
304  */
305 struct bnx2i_cmd_response {
306 #if defined(__BIG_ENDIAN)
307 	u8 op_code;
308 	u8 response_flags;
309 #define ISCSI_CMD_RESPONSE_RESERVED0 (0x1<<0)
310 #define ISCSI_CMD_RESPONSE_RESERVED0_SHIFT 0
311 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW (0x1<<1)
312 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW_SHIFT 1
313 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW (0x1<<2)
314 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW_SHIFT 2
315 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW (0x1<<3)
316 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW_SHIFT 3
317 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW (0x1<<4)
318 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW_SHIFT 4
319 #define ISCSI_CMD_RESPONSE_RESERVED1 (0x7<<5)
320 #define ISCSI_CMD_RESPONSE_RESERVED1_SHIFT 5
321 	u8 response;
322 	u8 status;
323 #elif defined(__LITTLE_ENDIAN)
324 	u8 status;
325 	u8 response;
326 	u8 response_flags;
327 #define ISCSI_CMD_RESPONSE_RESERVED0 (0x1<<0)
328 #define ISCSI_CMD_RESPONSE_RESERVED0_SHIFT 0
329 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW (0x1<<1)
330 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW_SHIFT 1
331 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW (0x1<<2)
332 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW_SHIFT 2
333 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW (0x1<<3)
334 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW_SHIFT 3
335 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW (0x1<<4)
336 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW_SHIFT 4
337 #define ISCSI_CMD_RESPONSE_RESERVED1 (0x7<<5)
338 #define ISCSI_CMD_RESPONSE_RESERVED1_SHIFT 5
339 	u8 op_code;
340 #endif
341 	u32 data_length;
342 	u32 exp_cmd_sn;
343 	u32 max_cmd_sn;
344 	u32 reserved2;
345 	u32 residual_count;
346 #if defined(__BIG_ENDIAN)
347 	u16 reserved4;
348 	u8 err_code;
349 	u8 reserved3;
350 #elif defined(__LITTLE_ENDIAN)
351 	u8 reserved3;
352 	u8 err_code;
353 	u16 reserved4;
354 #endif
355 	u32 reserved5[5];
356 	union bnx2i_cmd_resp_task_stat task_stat;
357 	u32 reserved6;
358 #if defined(__BIG_ENDIAN)
359 	u16 reserved7;
360 	u16 itt;
361 #define ISCSI_CMD_RESPONSE_INDEX (0x3FFF<<0)
362 #define ISCSI_CMD_RESPONSE_INDEX_SHIFT 0
363 #define ISCSI_CMD_RESPONSE_TYPE (0x3<<14)
364 #define ISCSI_CMD_RESPONSE_TYPE_SHIFT 14
365 #elif defined(__LITTLE_ENDIAN)
366 	u16 itt;
367 #define ISCSI_CMD_RESPONSE_INDEX (0x3FFF<<0)
368 #define ISCSI_CMD_RESPONSE_INDEX_SHIFT 0
369 #define ISCSI_CMD_RESPONSE_TYPE (0x3<<14)
370 #define ISCSI_CMD_RESPONSE_TYPE_SHIFT 14
371 	u16 reserved7;
372 #endif
373 	u32 cq_req_sn;
374 };
375 
376 
377 
378 /*
379  * firmware middle-path request SQ WQE
380  */
381 struct bnx2i_fw_mp_request {
382 #if defined(__BIG_ENDIAN)
383 	u8 op_code;
384 	u8 op_attr;
385 	u16 hdr_opaque1;
386 #elif defined(__LITTLE_ENDIAN)
387 	u16 hdr_opaque1;
388 	u8 op_attr;
389 	u8 op_code;
390 #endif
391 	u32 data_length;
392 	u32 hdr_opaque2[2];
393 #if defined(__BIG_ENDIAN)
394 	u16 reserved0;
395 	u16 itt;
396 #define ISCSI_FW_MP_REQUEST_INDEX (0x3FFF<<0)
397 #define ISCSI_FW_MP_REQUEST_INDEX_SHIFT 0
398 #define ISCSI_FW_MP_REQUEST_TYPE (0x3<<14)
399 #define ISCSI_FW_MP_REQUEST_TYPE_SHIFT 14
400 #elif defined(__LITTLE_ENDIAN)
401 	u16 itt;
402 #define ISCSI_FW_MP_REQUEST_INDEX (0x3FFF<<0)
403 #define ISCSI_FW_MP_REQUEST_INDEX_SHIFT 0
404 #define ISCSI_FW_MP_REQUEST_TYPE (0x3<<14)
405 #define ISCSI_FW_MP_REQUEST_TYPE_SHIFT 14
406 	u16 reserved0;
407 #endif
408 	u32 hdr_opaque3[4];
409 	u32 resp_bd_list_addr_lo;
410 	u32 resp_bd_list_addr_hi;
411 	u32 resp_buffer;
412 #define ISCSI_FW_MP_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
413 #define ISCSI_FW_MP_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
414 #define ISCSI_FW_MP_REQUEST_NUM_RESP_BDS (0xFF<<24)
415 #define ISCSI_FW_MP_REQUEST_NUM_RESP_BDS_SHIFT 24
416 #if defined(__BIG_ENDIAN)
417 	u16 reserved4;
418 	u8 reserved3;
419 	u8 flags;
420 #define ISCSI_FW_MP_REQUEST_RESERVED1 (0x1<<0)
421 #define ISCSI_FW_MP_REQUEST_RESERVED1_SHIFT 0
422 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION (0x1<<1)
423 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION_SHIFT 1
424 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
425 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
426 #define ISCSI_FW_MP_REQUEST_RESERVED2 (0x1F<<3)
427 #define ISCSI_FW_MP_REQUEST_RESERVED2_SHIFT 3
428 #elif defined(__LITTLE_ENDIAN)
429 	u8 flags;
430 #define ISCSI_FW_MP_REQUEST_RESERVED1 (0x1<<0)
431 #define ISCSI_FW_MP_REQUEST_RESERVED1_SHIFT 0
432 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION (0x1<<1)
433 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION_SHIFT 1
434 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
435 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
436 #define ISCSI_FW_MP_REQUEST_RESERVED2 (0x1F<<3)
437 #define ISCSI_FW_MP_REQUEST_RESERVED2_SHIFT 3
438 	u8 reserved3;
439 	u16 reserved4;
440 #endif
441 	u32 bd_list_addr_lo;
442 	u32 bd_list_addr_hi;
443 #if defined(__BIG_ENDIAN)
444 	u8 cq_index;
445 	u8 reserved6;
446 	u8 reserved5;
447 	u8 num_bds;
448 #elif defined(__LITTLE_ENDIAN)
449 	u8 num_bds;
450 	u8 reserved5;
451 	u8 reserved6;
452 	u8 cq_index;
453 #endif
454 };
455 
456 
457 /*
458  * firmware response - CQE: used only by firmware
459  */
460 struct bnx2i_fw_response {
461 	u32 hdr_dword1[2];
462 	u32 hdr_exp_cmd_sn;
463 	u32 hdr_max_cmd_sn;
464 	u32 hdr_ttt;
465 	u32 hdr_res_cnt;
466 	u32 cqe_flags;
467 #define ISCSI_FW_RESPONSE_RESERVED2 (0xFF<<0)
468 #define ISCSI_FW_RESPONSE_RESERVED2_SHIFT 0
469 #define ISCSI_FW_RESPONSE_ERR_CODE (0xFF<<8)
470 #define ISCSI_FW_RESPONSE_ERR_CODE_SHIFT 8
471 #define ISCSI_FW_RESPONSE_RESERVED3 (0xFFFF<<16)
472 #define ISCSI_FW_RESPONSE_RESERVED3_SHIFT 16
473 	u32 stat_sn;
474 	u32 hdr_dword2[2];
475 	u32 hdr_dword3[2];
476 	u32 task_stat;
477 	u32 reserved0;
478 	u32 hdr_itt;
479 	u32 cq_req_sn;
480 };
481 
482 
483 /*
484  * iSCSI KCQ CQE parameters
485  */
486 union iscsi_kcqe_params {
487 	u32 reserved0[4];
488 };
489 
490 /*
491  * iSCSI KCQ CQE
492  */
493 struct iscsi_kcqe {
494 	u32 iscsi_conn_id;
495 	u32 completion_status;
496 	u32 iscsi_conn_context_id;
497 	union iscsi_kcqe_params params;
498 #if defined(__BIG_ENDIAN)
499 	u8 flags;
500 #define ISCSI_KCQE_RESERVED0 (0xF<<0)
501 #define ISCSI_KCQE_RESERVED0_SHIFT 0
502 #define ISCSI_KCQE_LAYER_CODE (0x7<<4)
503 #define ISCSI_KCQE_LAYER_CODE_SHIFT 4
504 #define ISCSI_KCQE_RESERVED1 (0x1<<7)
505 #define ISCSI_KCQE_RESERVED1_SHIFT 7
506 	u8 op_code;
507 	u16 qe_self_seq;
508 #elif defined(__LITTLE_ENDIAN)
509 	u16 qe_self_seq;
510 	u8 op_code;
511 	u8 flags;
512 #define ISCSI_KCQE_RESERVED0 (0xF<<0)
513 #define ISCSI_KCQE_RESERVED0_SHIFT 0
514 #define ISCSI_KCQE_LAYER_CODE (0x7<<4)
515 #define ISCSI_KCQE_LAYER_CODE_SHIFT 4
516 #define ISCSI_KCQE_RESERVED1 (0x1<<7)
517 #define ISCSI_KCQE_RESERVED1_SHIFT 7
518 #endif
519 };
520 
521 
522 
523 /*
524  * iSCSI KWQE header
525  */
526 struct iscsi_kwqe_header {
527 #if defined(__BIG_ENDIAN)
528 	u8 flags;
529 #define ISCSI_KWQE_HEADER_RESERVED0 (0xF<<0)
530 #define ISCSI_KWQE_HEADER_RESERVED0_SHIFT 0
531 #define ISCSI_KWQE_HEADER_LAYER_CODE (0x7<<4)
532 #define ISCSI_KWQE_HEADER_LAYER_CODE_SHIFT 4
533 #define ISCSI_KWQE_HEADER_RESERVED1 (0x1<<7)
534 #define ISCSI_KWQE_HEADER_RESERVED1_SHIFT 7
535 	u8 op_code;
536 #elif defined(__LITTLE_ENDIAN)
537 	u8 op_code;
538 	u8 flags;
539 #define ISCSI_KWQE_HEADER_RESERVED0 (0xF<<0)
540 #define ISCSI_KWQE_HEADER_RESERVED0_SHIFT 0
541 #define ISCSI_KWQE_HEADER_LAYER_CODE (0x7<<4)
542 #define ISCSI_KWQE_HEADER_LAYER_CODE_SHIFT 4
543 #define ISCSI_KWQE_HEADER_RESERVED1 (0x1<<7)
544 #define ISCSI_KWQE_HEADER_RESERVED1_SHIFT 7
545 #endif
546 };
547 
548 /*
549  * iSCSI firmware init request 1
550  */
551 struct iscsi_kwqe_init1 {
552 #if defined(__BIG_ENDIAN)
553 	struct iscsi_kwqe_header hdr;
554 	u8 reserved0;
555 	u8 num_cqs;
556 #elif defined(__LITTLE_ENDIAN)
557 	u8 num_cqs;
558 	u8 reserved0;
559 	struct iscsi_kwqe_header hdr;
560 #endif
561 	u32 dummy_buffer_addr_lo;
562 	u32 dummy_buffer_addr_hi;
563 #if defined(__BIG_ENDIAN)
564 	u16 num_ccells_per_conn;
565 	u16 num_tasks_per_conn;
566 #elif defined(__LITTLE_ENDIAN)
567 	u16 num_tasks_per_conn;
568 	u16 num_ccells_per_conn;
569 #endif
570 #if defined(__BIG_ENDIAN)
571 	u16 sq_wqes_per_page;
572 	u16 sq_num_wqes;
573 #elif defined(__LITTLE_ENDIAN)
574 	u16 sq_num_wqes;
575 	u16 sq_wqes_per_page;
576 #endif
577 #if defined(__BIG_ENDIAN)
578 	u8 cq_log_wqes_per_page;
579 	u8 flags;
580 #define ISCSI_KWQE_INIT1_PAGE_SIZE (0xF<<0)
581 #define ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT 0
582 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE (0x1<<4)
583 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4
584 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5)
585 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5
586 #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE (0x1<<6)
587 #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE_SHIFT 6
588 #define ISCSI_KWQE_INIT1_RESERVED1 (0x1<<7)
589 #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 7
590 	u16 cq_num_wqes;
591 #elif defined(__LITTLE_ENDIAN)
592 	u16 cq_num_wqes;
593 	u8 flags;
594 #define ISCSI_KWQE_INIT1_PAGE_SIZE (0xF<<0)
595 #define ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT 0
596 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE (0x1<<4)
597 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4
598 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5)
599 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5
600 #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE (0x1<<6)
601 #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE_SHIFT 6
602 #define ISCSI_KWQE_INIT1_RESERVED1 (0x1<<7)
603 #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 7
604 	u8 cq_log_wqes_per_page;
605 #endif
606 #if defined(__BIG_ENDIAN)
607 	u16 cq_num_pages;
608 	u16 sq_num_pages;
609 #elif defined(__LITTLE_ENDIAN)
610 	u16 sq_num_pages;
611 	u16 cq_num_pages;
612 #endif
613 #if defined(__BIG_ENDIAN)
614 	u16 rq_buffer_size;
615 	u16 rq_num_wqes;
616 #elif defined(__LITTLE_ENDIAN)
617 	u16 rq_num_wqes;
618 	u16 rq_buffer_size;
619 #endif
620 };
621 
622 /*
623  * iSCSI firmware init request 2
624  */
625 struct iscsi_kwqe_init2 {
626 #if defined(__BIG_ENDIAN)
627 	struct iscsi_kwqe_header hdr;
628 	u16 max_cq_sqn;
629 #elif defined(__LITTLE_ENDIAN)
630 	u16 max_cq_sqn;
631 	struct iscsi_kwqe_header hdr;
632 #endif
633 	u32 error_bit_map[2];
634 	u32 reserved1[5];
635 };
636 
637 /*
638  * Initial iSCSI connection offload request 1
639  */
640 struct iscsi_kwqe_conn_offload1 {
641 #if defined(__BIG_ENDIAN)
642 	struct iscsi_kwqe_header hdr;
643 	u16 iscsi_conn_id;
644 #elif defined(__LITTLE_ENDIAN)
645 	u16 iscsi_conn_id;
646 	struct iscsi_kwqe_header hdr;
647 #endif
648 	u32 sq_page_table_addr_lo;
649 	u32 sq_page_table_addr_hi;
650 	u32 cq_page_table_addr_lo;
651 	u32 cq_page_table_addr_hi;
652 	u32 reserved0[3];
653 };
654 
655 /*
656  * iSCSI Page Table Entry (PTE)
657  */
658 struct iscsi_pte {
659 	u32 hi;
660 	u32 lo;
661 };
662 
663 /*
664  * Initial iSCSI connection offload request 2
665  */
666 struct iscsi_kwqe_conn_offload2 {
667 #if defined(__BIG_ENDIAN)
668 	struct iscsi_kwqe_header hdr;
669 	u16 reserved0;
670 #elif defined(__LITTLE_ENDIAN)
671 	u16 reserved0;
672 	struct iscsi_kwqe_header hdr;
673 #endif
674 	u32 rq_page_table_addr_lo;
675 	u32 rq_page_table_addr_hi;
676 	struct iscsi_pte sq_first_pte;
677 	struct iscsi_pte cq_first_pte;
678 	u32 num_additional_wqes;
679 };
680 
681 
682 /*
683  * Initial iSCSI connection offload request 3
684  */
685 struct iscsi_kwqe_conn_offload3 {
686 #if defined(__BIG_ENDIAN)
687 	struct iscsi_kwqe_header hdr;
688 	u16 reserved0;
689 #elif defined(__LITTLE_ENDIAN)
690 	u16 reserved0;
691 	struct iscsi_kwqe_header hdr;
692 #endif
693 	u32 reserved1;
694 	struct iscsi_pte qp_first_pte[3];
695 };
696 
697 
698 /*
699  * iSCSI connection update request
700  */
701 struct iscsi_kwqe_conn_update {
702 #if defined(__BIG_ENDIAN)
703 	struct iscsi_kwqe_header hdr;
704 	u16 reserved0;
705 #elif defined(__LITTLE_ENDIAN)
706 	u16 reserved0;
707 	struct iscsi_kwqe_header hdr;
708 #endif
709 #if defined(__BIG_ENDIAN)
710 	u8 session_error_recovery_level;
711 	u8 max_outstanding_r2ts;
712 	u8 reserved2;
713 	u8 conn_flags;
714 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0)
715 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0
716 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1)
717 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1
718 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2)
719 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2
720 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3)
721 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3
722 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE (0x3<<4)
723 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
724 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
725 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
726 #elif defined(__LITTLE_ENDIAN)
727 	u8 conn_flags;
728 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0)
729 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0
730 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1)
731 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1
732 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2)
733 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2
734 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3)
735 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3
736 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE (0x3<<4)
737 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
738 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
739 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
740 	u8 reserved2;
741 	u8 max_outstanding_r2ts;
742 	u8 session_error_recovery_level;
743 #endif
744 	u32 context_id;
745 	u32 max_send_pdu_length;
746 	u32 max_recv_pdu_length;
747 	u32 first_burst_length;
748 	u32 max_burst_length;
749 	u32 exp_stat_sn;
750 };
751 
752 /*
753  * iSCSI destroy connection request
754  */
755 struct iscsi_kwqe_conn_destroy {
756 #if defined(__BIG_ENDIAN)
757 	struct iscsi_kwqe_header hdr;
758 	u16 reserved0;
759 #elif defined(__LITTLE_ENDIAN)
760 	u16 reserved0;
761 	struct iscsi_kwqe_header hdr;
762 #endif
763 	u32 context_id;
764 	u32 reserved1[6];
765 };
766 
767 /*
768  * iSCSI KWQ WQE
769  */
770 union iscsi_kwqe {
771 	struct iscsi_kwqe_init1 init1;
772 	struct iscsi_kwqe_init2 init2;
773 	struct iscsi_kwqe_conn_offload1 conn_offload1;
774 	struct iscsi_kwqe_conn_offload2 conn_offload2;
775 	struct iscsi_kwqe_conn_update conn_update;
776 	struct iscsi_kwqe_conn_destroy conn_destroy;
777 };
778 
779 /*
780  * iSCSI Login SQ WQE
781  */
782 struct bnx2i_login_request {
783 #if defined(__BIG_ENDIAN)
784 	u8 op_code;
785 	u8 op_attr;
786 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
787 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
788 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
789 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
790 #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
791 #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
792 #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
793 #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
794 #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
795 #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
796 	u8 version_max;
797 	u8 version_min;
798 #elif defined(__LITTLE_ENDIAN)
799 	u8 version_min;
800 	u8 version_max;
801 	u8 op_attr;
802 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
803 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
804 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
805 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
806 #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
807 #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
808 #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
809 #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
810 #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
811 #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
812 	u8 op_code;
813 #endif
814 	u32 data_length;
815 	u32 isid_lo;
816 #if defined(__BIG_ENDIAN)
817 	u16 isid_hi;
818 	u16 tsih;
819 #elif defined(__LITTLE_ENDIAN)
820 	u16 tsih;
821 	u16 isid_hi;
822 #endif
823 #if defined(__BIG_ENDIAN)
824 	u16 reserved2;
825 	u16 itt;
826 #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
827 #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
828 #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
829 #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
830 #elif defined(__LITTLE_ENDIAN)
831 	u16 itt;
832 #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
833 #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
834 #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
835 #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
836 	u16 reserved2;
837 #endif
838 #if defined(__BIG_ENDIAN)
839 	u16 cid;
840 	u16 reserved3;
841 #elif defined(__LITTLE_ENDIAN)
842 	u16 reserved3;
843 	u16 cid;
844 #endif
845 	u32 cmd_sn;
846 	u32 exp_stat_sn;
847 	u32 reserved4;
848 	u32 resp_bd_list_addr_lo;
849 	u32 resp_bd_list_addr_hi;
850 	u32 resp_buffer;
851 #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
852 #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
853 #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS (0xFF<<24)
854 #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS_SHIFT 24
855 #if defined(__BIG_ENDIAN)
856 	u16 reserved8;
857 	u8 reserved7;
858 	u8 flags;
859 #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
860 #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
861 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
862 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
863 #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
864 #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
865 #elif defined(__LITTLE_ENDIAN)
866 	u8 flags;
867 #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
868 #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
869 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
870 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
871 #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
872 #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
873 	u8 reserved7;
874 	u16 reserved8;
875 #endif
876 	u32 bd_list_addr_lo;
877 	u32 bd_list_addr_hi;
878 #if defined(__BIG_ENDIAN)
879 	u8 cq_index;
880 	u8 reserved10;
881 	u8 reserved9;
882 	u8 num_bds;
883 #elif defined(__LITTLE_ENDIAN)
884 	u8 num_bds;
885 	u8 reserved9;
886 	u8 reserved10;
887 	u8 cq_index;
888 #endif
889 };
890 
891 
892 /*
893  * iSCSI Login CQE
894  */
895 struct bnx2i_login_response {
896 #if defined(__BIG_ENDIAN)
897 	u8 op_code;
898 	u8 response_flags;
899 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
900 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
901 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
902 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
903 #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
904 #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
905 #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
906 #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
907 #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
908 #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
909 	u8 version_max;
910 	u8 version_active;
911 #elif defined(__LITTLE_ENDIAN)
912 	u8 version_active;
913 	u8 version_max;
914 	u8 response_flags;
915 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
916 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
917 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
918 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
919 #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
920 #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
921 #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
922 #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
923 #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
924 #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
925 	u8 op_code;
926 #endif
927 	u32 data_length;
928 	u32 exp_cmd_sn;
929 	u32 max_cmd_sn;
930 	u32 reserved1[2];
931 #if defined(__BIG_ENDIAN)
932 	u16 reserved3;
933 	u8 err_code;
934 	u8 reserved2;
935 #elif defined(__LITTLE_ENDIAN)
936 	u8 reserved2;
937 	u8 err_code;
938 	u16 reserved3;
939 #endif
940 	u32 stat_sn;
941 	u32 isid_lo;
942 #if defined(__BIG_ENDIAN)
943 	u16 isid_hi;
944 	u16 tsih;
945 #elif defined(__LITTLE_ENDIAN)
946 	u16 tsih;
947 	u16 isid_hi;
948 #endif
949 #if defined(__BIG_ENDIAN)
950 	u8 status_class;
951 	u8 status_detail;
952 	u16 reserved4;
953 #elif defined(__LITTLE_ENDIAN)
954 	u16 reserved4;
955 	u8 status_detail;
956 	u8 status_class;
957 #endif
958 	u32 reserved5[3];
959 #if defined(__BIG_ENDIAN)
960 	u16 reserved6;
961 	u16 itt;
962 #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
963 #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
964 #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
965 #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
966 #elif defined(__LITTLE_ENDIAN)
967 	u16 itt;
968 #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
969 #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
970 #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
971 #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
972 	u16 reserved6;
973 #endif
974 	u32 cq_req_sn;
975 };
976 
977 
978 /*
979  * iSCSI Logout SQ WQE
980  */
981 struct bnx2i_logout_request {
982 #if defined(__BIG_ENDIAN)
983 	u8 op_code;
984 	u8 op_attr;
985 #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
986 #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
987 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
988 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
989 	u16 reserved0;
990 #elif defined(__LITTLE_ENDIAN)
991 	u16 reserved0;
992 	u8 op_attr;
993 #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
994 #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
995 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
996 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
997 	u8 op_code;
998 #endif
999 	u32 data_length;
1000 	u32 reserved1[2];
1001 #if defined(__BIG_ENDIAN)
1002 	u16 reserved2;
1003 	u16 itt;
1004 #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
1005 #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
1006 #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
1007 #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
1008 #elif defined(__LITTLE_ENDIAN)
1009 	u16 itt;
1010 #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
1011 #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
1012 #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
1013 #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
1014 	u16 reserved2;
1015 #endif
1016 #if defined(__BIG_ENDIAN)
1017 	u16 cid;
1018 	u16 reserved3;
1019 #elif defined(__LITTLE_ENDIAN)
1020 	u16 reserved3;
1021 	u16 cid;
1022 #endif
1023 	u32 cmd_sn;
1024 	u32 reserved4[5];
1025 	u32 zero_fill;
1026 	u32 bd_list_addr_lo;
1027 	u32 bd_list_addr_hi;
1028 #if defined(__BIG_ENDIAN)
1029 	u8 cq_index;
1030 	u8 reserved6;
1031 	u8 reserved5;
1032 	u8 num_bds;
1033 #elif defined(__LITTLE_ENDIAN)
1034 	u8 num_bds;
1035 	u8 reserved5;
1036 	u8 reserved6;
1037 	u8 cq_index;
1038 #endif
1039 };
1040 
1041 
1042 /*
1043  * iSCSI Logout CQE
1044  */
1045 struct bnx2i_logout_response {
1046 #if defined(__BIG_ENDIAN)
1047 	u8 op_code;
1048 	u8 reserved1;
1049 	u8 response;
1050 	u8 reserved0;
1051 #elif defined(__LITTLE_ENDIAN)
1052 	u8 reserved0;
1053 	u8 response;
1054 	u8 reserved1;
1055 	u8 op_code;
1056 #endif
1057 	u32 reserved2;
1058 	u32 exp_cmd_sn;
1059 	u32 max_cmd_sn;
1060 	u32 reserved3[2];
1061 #if defined(__BIG_ENDIAN)
1062 	u16 reserved5;
1063 	u8 err_code;
1064 	u8 reserved4;
1065 #elif defined(__LITTLE_ENDIAN)
1066 	u8 reserved4;
1067 	u8 err_code;
1068 	u16 reserved5;
1069 #endif
1070 	u32 reserved6[3];
1071 #if defined(__BIG_ENDIAN)
1072 	u16 time_to_wait;
1073 	u16 time_to_retain;
1074 #elif defined(__LITTLE_ENDIAN)
1075 	u16 time_to_retain;
1076 	u16 time_to_wait;
1077 #endif
1078 	u32 reserved7[3];
1079 #if defined(__BIG_ENDIAN)
1080 	u16 reserved8;
1081 	u16 itt;
1082 #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1083 #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1084 #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1085 #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1086 #elif defined(__LITTLE_ENDIAN)
1087 	u16 itt;
1088 #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1089 #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1090 #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1091 #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1092 	u16 reserved8;
1093 #endif
1094 	u32 cq_req_sn;
1095 };
1096 
1097 
1098 /*
1099  * iSCSI Nop-In CQE
1100  */
1101 struct bnx2i_nop_in_msg {
1102 #if defined(__BIG_ENDIAN)
1103 	u8 op_code;
1104 	u8 reserved1;
1105 	u16 reserved0;
1106 #elif defined(__LITTLE_ENDIAN)
1107 	u16 reserved0;
1108 	u8 reserved1;
1109 	u8 op_code;
1110 #endif
1111 	u32 data_length;
1112 	u32 exp_cmd_sn;
1113 	u32 max_cmd_sn;
1114 	u32 ttt;
1115 	u32 reserved2;
1116 #if defined(__BIG_ENDIAN)
1117 	u16 reserved4;
1118 	u8 err_code;
1119 	u8 reserved3;
1120 #elif defined(__LITTLE_ENDIAN)
1121 	u8 reserved3;
1122 	u8 err_code;
1123 	u16 reserved4;
1124 #endif
1125 	u32 reserved5;
1126 	u32 lun[2];
1127 	u32 reserved6[4];
1128 #if defined(__BIG_ENDIAN)
1129 	u16 reserved7;
1130 	u16 itt;
1131 #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1132 #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1133 #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1134 #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1135 #elif defined(__LITTLE_ENDIAN)
1136 	u16 itt;
1137 #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1138 #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1139 #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1140 #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1141 	u16 reserved7;
1142 #endif
1143 	u32 cq_req_sn;
1144 };
1145 
1146 
1147 /*
1148  * iSCSI NOP-OUT SQ WQE
1149  */
1150 struct bnx2i_nop_out_request {
1151 #if defined(__BIG_ENDIAN)
1152 	u8 op_code;
1153 	u8 op_attr;
1154 #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1155 #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1156 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1157 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1158 	u16 reserved0;
1159 #elif defined(__LITTLE_ENDIAN)
1160 	u16 reserved0;
1161 	u8 op_attr;
1162 #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1163 #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1164 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1165 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1166 	u8 op_code;
1167 #endif
1168 	u32 data_length;
1169 	u32 lun[2];
1170 #if defined(__BIG_ENDIAN)
1171 	u16 reserved2;
1172 	u16 itt;
1173 #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1174 #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1175 #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1176 #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1177 #elif defined(__LITTLE_ENDIAN)
1178 	u16 itt;
1179 #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1180 #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1181 #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1182 #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1183 	u16 reserved2;
1184 #endif
1185 	u32 ttt;
1186 	u32 cmd_sn;
1187 	u32 reserved3[2];
1188 	u32 resp_bd_list_addr_lo;
1189 	u32 resp_bd_list_addr_hi;
1190 	u32 resp_buffer;
1191 #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1192 #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1193 #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1194 #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS_SHIFT 24
1195 #if defined(__BIG_ENDIAN)
1196 	u16 reserved7;
1197 	u8 reserved6;
1198 	u8 flags;
1199 #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1200 #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1201 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1202 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1203 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1204 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1205 #elif defined(__LITTLE_ENDIAN)
1206 	u8 flags;
1207 #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1208 #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1209 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1210 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1211 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1212 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1213 	u8 reserved6;
1214 	u16 reserved7;
1215 #endif
1216 	u32 bd_list_addr_lo;
1217 	u32 bd_list_addr_hi;
1218 #if defined(__BIG_ENDIAN)
1219 	u8 cq_index;
1220 	u8 reserved9;
1221 	u8 reserved8;
1222 	u8 num_bds;
1223 #elif defined(__LITTLE_ENDIAN)
1224 	u8 num_bds;
1225 	u8 reserved8;
1226 	u8 reserved9;
1227 	u8 cq_index;
1228 #endif
1229 };
1230 
1231 /*
1232  * iSCSI Reject CQE
1233  */
1234 struct bnx2i_reject_msg {
1235 #if defined(__BIG_ENDIAN)
1236 	u8 op_code;
1237 	u8 reserved1;
1238 	u8 reason;
1239 	u8 reserved0;
1240 #elif defined(__LITTLE_ENDIAN)
1241 	u8 reserved0;
1242 	u8 reason;
1243 	u8 reserved1;
1244 	u8 op_code;
1245 #endif
1246 	u32 data_length;
1247 	u32 exp_cmd_sn;
1248 	u32 max_cmd_sn;
1249 	u32 reserved2[2];
1250 #if defined(__BIG_ENDIAN)
1251 	u16 reserved4;
1252 	u8 err_code;
1253 	u8 reserved3;
1254 #elif defined(__LITTLE_ENDIAN)
1255 	u8 reserved3;
1256 	u8 err_code;
1257 	u16 reserved4;
1258 #endif
1259 	u32 reserved5[8];
1260 	u32 cq_req_sn;
1261 };
1262 
1263 /*
1264  * bnx2i iSCSI TMF SQ WQE
1265  */
1266 struct bnx2i_tmf_request {
1267 #if defined(__BIG_ENDIAN)
1268 	u8 op_code;
1269 	u8 op_attr;
1270 #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1271 #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1272 #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1273 #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1274 	u16 reserved0;
1275 #elif defined(__LITTLE_ENDIAN)
1276 	u16 reserved0;
1277 	u8 op_attr;
1278 #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1279 #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1280 #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1281 #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1282 	u8 op_code;
1283 #endif
1284 	u32 data_length;
1285 	u32 lun[2];
1286 #if defined(__BIG_ENDIAN)
1287 	u16 reserved1;
1288 	u16 itt;
1289 #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1290 #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1291 #define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1292 #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1293 #elif defined(__LITTLE_ENDIAN)
1294 	u16 itt;
1295 #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1296 #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1297 #define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1298 #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1299 	u16 reserved1;
1300 #endif
1301 	u32 ref_itt;
1302 	u32 cmd_sn;
1303 	u32 reserved2;
1304 	u32 ref_cmd_sn;
1305 	u32 reserved3[3];
1306 	u32 zero_fill;
1307 	u32 bd_list_addr_lo;
1308 	u32 bd_list_addr_hi;
1309 #if defined(__BIG_ENDIAN)
1310 	u8 cq_index;
1311 	u8 reserved5;
1312 	u8 reserved4;
1313 	u8 num_bds;
1314 #elif defined(__LITTLE_ENDIAN)
1315 	u8 num_bds;
1316 	u8 reserved4;
1317 	u8 reserved5;
1318 	u8 cq_index;
1319 #endif
1320 };
1321 
1322 /*
1323  * iSCSI Text SQ WQE
1324  */
1325 struct bnx2i_text_request {
1326 #if defined(__BIG_ENDIAN)
1327 	u8 op_code;
1328 	u8 op_attr;
1329 #define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0)
1330 #define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0
1331 #define ISCSI_TEXT_REQUEST_CONT (0x1<<6)
1332 #define ISCSI_TEXT_REQUEST_CONT_SHIFT 6
1333 #define ISCSI_TEXT_REQUEST_FINAL (0x1<<7)
1334 #define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7
1335 	u16 reserved0;
1336 #elif defined(__LITTLE_ENDIAN)
1337 	u16 reserved0;
1338 	u8 op_attr;
1339 #define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0)
1340 #define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0
1341 #define ISCSI_TEXT_REQUEST_CONT (0x1<<6)
1342 #define ISCSI_TEXT_REQUEST_CONT_SHIFT 6
1343 #define ISCSI_TEXT_REQUEST_FINAL (0x1<<7)
1344 #define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7
1345 	u8 op_code;
1346 #endif
1347 	u32 data_length;
1348 	u32 lun[2];
1349 #if defined(__BIG_ENDIAN)
1350 	u16 reserved3;
1351 	u16 itt;
1352 #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1353 #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1354 #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1355 #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1356 #elif defined(__LITTLE_ENDIAN)
1357 	u16 itt;
1358 #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1359 #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1360 #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1361 #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1362 	u16 reserved3;
1363 #endif
1364 	u32 ttt;
1365 	u32 cmd_sn;
1366 	u32 reserved4[2];
1367 	u32 resp_bd_list_addr_lo;
1368 	u32 resp_bd_list_addr_hi;
1369 	u32 resp_buffer;
1370 #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1371 #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1372 #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1373 #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS_SHIFT 24
1374 	u32 zero_fill;
1375 	u32 bd_list_addr_lo;
1376 	u32 bd_list_addr_hi;
1377 #if defined(__BIG_ENDIAN)
1378 	u8 cq_index;
1379 	u8 reserved7;
1380 	u8 reserved6;
1381 	u8 num_bds;
1382 #elif defined(__LITTLE_ENDIAN)
1383 	u8 num_bds;
1384 	u8 reserved6;
1385 	u8 reserved7;
1386 	u8 cq_index;
1387 #endif
1388 };
1389 
1390 /*
1391  * iSCSI SQ WQE
1392  */
1393 union iscsi_request {
1394 	struct bnx2i_cmd_request cmd;
1395 	struct bnx2i_tmf_request tmf;
1396 	struct bnx2i_nop_out_request nop_out;
1397 	struct bnx2i_login_request login_req;
1398 	struct bnx2i_text_request text;
1399 	struct bnx2i_logout_request logout_req;
1400 	struct bnx2i_cleanup_request cleanup;
1401 };
1402 
1403 
1404 /*
1405  * iSCSI TMF CQE
1406  */
1407 struct bnx2i_tmf_response {
1408 #if defined(__BIG_ENDIAN)
1409 	u8 op_code;
1410 	u8 reserved1;
1411 	u8 response;
1412 	u8 reserved0;
1413 #elif defined(__LITTLE_ENDIAN)
1414 	u8 reserved0;
1415 	u8 response;
1416 	u8 reserved1;
1417 	u8 op_code;
1418 #endif
1419 	u32 reserved2;
1420 	u32 exp_cmd_sn;
1421 	u32 max_cmd_sn;
1422 	u32 reserved3[2];
1423 #if defined(__BIG_ENDIAN)
1424 	u16 reserved5;
1425 	u8 err_code;
1426 	u8 reserved4;
1427 #elif defined(__LITTLE_ENDIAN)
1428 	u8 reserved4;
1429 	u8 err_code;
1430 	u16 reserved5;
1431 #endif
1432 	u32 reserved6[7];
1433 #if defined(__BIG_ENDIAN)
1434 	u16 reserved7;
1435 	u16 itt;
1436 #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1437 #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1438 #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1439 #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1440 #elif defined(__LITTLE_ENDIAN)
1441 	u16 itt;
1442 #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1443 #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1444 #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1445 #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1446 	u16 reserved7;
1447 #endif
1448 	u32 cq_req_sn;
1449 };
1450 
1451 /*
1452  * iSCSI Text CQE
1453  */
1454 struct bnx2i_text_response {
1455 #if defined(__BIG_ENDIAN)
1456 	u8 op_code;
1457 	u8 response_flags;
1458 #define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0)
1459 #define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0
1460 #define ISCSI_TEXT_RESPONSE_CONT (0x1<<6)
1461 #define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6
1462 #define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7)
1463 #define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7
1464 	u16 reserved0;
1465 #elif defined(__LITTLE_ENDIAN)
1466 	u16 reserved0;
1467 	u8 response_flags;
1468 #define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0)
1469 #define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0
1470 #define ISCSI_TEXT_RESPONSE_CONT (0x1<<6)
1471 #define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6
1472 #define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7)
1473 #define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7
1474 	u8 op_code;
1475 #endif
1476 	u32 data_length;
1477 	u32 exp_cmd_sn;
1478 	u32 max_cmd_sn;
1479 	u32 ttt;
1480 	u32 reserved2;
1481 #if defined(__BIG_ENDIAN)
1482 	u16 reserved4;
1483 	u8 err_code;
1484 	u8 reserved3;
1485 #elif defined(__LITTLE_ENDIAN)
1486 	u8 reserved3;
1487 	u8 err_code;
1488 	u16 reserved4;
1489 #endif
1490 	u32 reserved5;
1491 	u32 lun[2];
1492 	u32 reserved6[4];
1493 #if defined(__BIG_ENDIAN)
1494 	u16 reserved7;
1495 	u16 itt;
1496 #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1497 #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1498 #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1499 #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1500 #elif defined(__LITTLE_ENDIAN)
1501 	u16 itt;
1502 #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1503 #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1504 #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1505 #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1506 	u16 reserved7;
1507 #endif
1508 	u32 cq_req_sn;
1509 };
1510 
1511 /*
1512  * iSCSI CQE
1513  */
1514 union iscsi_response {
1515 	struct bnx2i_cmd_response cmd;
1516 	struct bnx2i_tmf_response tmf;
1517 	struct bnx2i_login_response login_resp;
1518 	struct bnx2i_text_response text;
1519 	struct bnx2i_logout_response logout_resp;
1520 	struct bnx2i_cleanup_response cleanup;
1521 	struct bnx2i_reject_msg reject;
1522 	struct bnx2i_async_msg async;
1523 	struct bnx2i_nop_in_msg nop_in;
1524 };
1525 
1526 #endif /* __57XX_ISCSI_HSI_LINUX_LE__ */
1527