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