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