1/* 57xx_iscsi_hsi.h: Broadcom NetXtreme II iSCSI HSI.
2 *
3 * Copyright (c) 2006 - 2011 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 */
18struct 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 */
67struct 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 */
106struct 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 */
148struct 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 */
192struct 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 */
269struct bnx2i_write_resp_task_stat {
270	u32 num_data_ins;
271};
272
273/*
274 * task statistics for read response
275 */
276struct 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 */
289union 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 */
297struct 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 */
373struct 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 */
452struct 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 */
478union iscsi_kcqe_params {
479	u32 reserved0[4];
480};
481
482/*
483 * iSCSI KCQ CQE
484 */
485struct 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 */
518struct 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 */
543struct 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 */
613struct 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 */
628struct 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 */
646struct iscsi_pte {
647	u32 hi;
648	u32 lo;
649};
650
651/*
652 * Initial iSCSI connection offload request 2
653 */
654struct 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 */
673struct 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 */
689struct 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_OOO_SUPPORT_MODE (0x3<<4)
711#define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
712#define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
713#define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
714#elif defined(__LITTLE_ENDIAN)
715	u8 conn_flags;
716#define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0)
717#define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0
718#define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1)
719#define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1
720#define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2)
721#define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2
722#define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3)
723#define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3
724#define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE (0x3<<4)
725#define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
726#define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
727#define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
728	u8 reserved2;
729	u8 max_outstanding_r2ts;
730	u8 session_error_recovery_level;
731#endif
732	u32 context_id;
733	u32 max_send_pdu_length;
734	u32 max_recv_pdu_length;
735	u32 first_burst_length;
736	u32 max_burst_length;
737	u32 exp_stat_sn;
738};
739
740/*
741 * iSCSI destroy connection request
742 */
743struct iscsi_kwqe_conn_destroy {
744#if defined(__BIG_ENDIAN)
745	struct iscsi_kwqe_header hdr;
746	u16 reserved0;
747#elif defined(__LITTLE_ENDIAN)
748	u16 reserved0;
749	struct iscsi_kwqe_header hdr;
750#endif
751	u32 context_id;
752	u32 reserved1[6];
753};
754
755/*
756 * iSCSI KWQ WQE
757 */
758union iscsi_kwqe {
759	struct iscsi_kwqe_init1 init1;
760	struct iscsi_kwqe_init2 init2;
761	struct iscsi_kwqe_conn_offload1 conn_offload1;
762	struct iscsi_kwqe_conn_offload2 conn_offload2;
763	struct iscsi_kwqe_conn_update conn_update;
764	struct iscsi_kwqe_conn_destroy conn_destroy;
765};
766
767/*
768 * iSCSI Login SQ WQE
769 */
770struct bnx2i_login_request {
771#if defined(__BIG_ENDIAN)
772	u8 op_code;
773	u8 op_attr;
774#define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
775#define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
776#define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
777#define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
778#define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
779#define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
780#define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
781#define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
782#define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
783#define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
784	u8 version_max;
785	u8 version_min;
786#elif defined(__LITTLE_ENDIAN)
787	u8 version_min;
788	u8 version_max;
789	u8 op_attr;
790#define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
791#define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
792#define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
793#define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
794#define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
795#define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
796#define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
797#define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
798#define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
799#define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
800	u8 op_code;
801#endif
802	u32 data_length;
803	u32 isid_lo;
804#if defined(__BIG_ENDIAN)
805	u16 isid_hi;
806	u16 tsih;
807#elif defined(__LITTLE_ENDIAN)
808	u16 tsih;
809	u16 isid_hi;
810#endif
811#if defined(__BIG_ENDIAN)
812	u16 reserved2;
813	u16 itt;
814#define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
815#define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
816#define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
817#define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
818#elif defined(__LITTLE_ENDIAN)
819	u16 itt;
820#define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
821#define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
822#define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
823#define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
824	u16 reserved2;
825#endif
826#if defined(__BIG_ENDIAN)
827	u16 cid;
828	u16 reserved3;
829#elif defined(__LITTLE_ENDIAN)
830	u16 reserved3;
831	u16 cid;
832#endif
833	u32 cmd_sn;
834	u32 exp_stat_sn;
835	u32 reserved4;
836	u32 resp_bd_list_addr_lo;
837	u32 resp_bd_list_addr_hi;
838	u32 resp_buffer;
839#define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
840#define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
841#define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS (0xFF<<24)
842#define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS_SHIFT 24
843#if defined(__BIG_ENDIAN)
844	u16 reserved8;
845	u8 reserved7;
846	u8 flags;
847#define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
848#define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
849#define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
850#define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
851#define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
852#define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
853#elif defined(__LITTLE_ENDIAN)
854	u8 flags;
855#define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
856#define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
857#define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
858#define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
859#define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
860#define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
861	u8 reserved7;
862	u16 reserved8;
863#endif
864	u32 bd_list_addr_lo;
865	u32 bd_list_addr_hi;
866#if defined(__BIG_ENDIAN)
867	u8 cq_index;
868	u8 reserved10;
869	u8 reserved9;
870	u8 num_bds;
871#elif defined(__LITTLE_ENDIAN)
872	u8 num_bds;
873	u8 reserved9;
874	u8 reserved10;
875	u8 cq_index;
876#endif
877};
878
879
880/*
881 * iSCSI Login CQE
882 */
883struct bnx2i_login_response {
884#if defined(__BIG_ENDIAN)
885	u8 op_code;
886	u8 response_flags;
887#define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
888#define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
889#define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
890#define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
891#define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
892#define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
893#define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
894#define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
895#define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
896#define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
897	u8 version_max;
898	u8 version_active;
899#elif defined(__LITTLE_ENDIAN)
900	u8 version_active;
901	u8 version_max;
902	u8 response_flags;
903#define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
904#define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
905#define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
906#define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
907#define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
908#define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
909#define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
910#define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
911#define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
912#define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
913	u8 op_code;
914#endif
915	u32 data_length;
916	u32 exp_cmd_sn;
917	u32 max_cmd_sn;
918	u32 reserved1[2];
919#if defined(__BIG_ENDIAN)
920	u16 reserved3;
921	u8 err_code;
922	u8 reserved2;
923#elif defined(__LITTLE_ENDIAN)
924	u8 reserved2;
925	u8 err_code;
926	u16 reserved3;
927#endif
928	u32 stat_sn;
929	u32 isid_lo;
930#if defined(__BIG_ENDIAN)
931	u16 isid_hi;
932	u16 tsih;
933#elif defined(__LITTLE_ENDIAN)
934	u16 tsih;
935	u16 isid_hi;
936#endif
937#if defined(__BIG_ENDIAN)
938	u8 status_class;
939	u8 status_detail;
940	u16 reserved4;
941#elif defined(__LITTLE_ENDIAN)
942	u16 reserved4;
943	u8 status_detail;
944	u8 status_class;
945#endif
946	u32 reserved5[3];
947#if defined(__BIG_ENDIAN)
948	u16 reserved6;
949	u16 itt;
950#define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
951#define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
952#define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
953#define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
954#elif defined(__LITTLE_ENDIAN)
955	u16 itt;
956#define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
957#define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
958#define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
959#define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
960	u16 reserved6;
961#endif
962	u32 cq_req_sn;
963};
964
965
966/*
967 * iSCSI Logout SQ WQE
968 */
969struct bnx2i_logout_request {
970#if defined(__BIG_ENDIAN)
971	u8 op_code;
972	u8 op_attr;
973#define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
974#define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
975#define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
976#define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
977	u16 reserved0;
978#elif defined(__LITTLE_ENDIAN)
979	u16 reserved0;
980	u8 op_attr;
981#define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
982#define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
983#define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
984#define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
985	u8 op_code;
986#endif
987	u32 data_length;
988	u32 reserved1[2];
989#if defined(__BIG_ENDIAN)
990	u16 reserved2;
991	u16 itt;
992#define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
993#define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
994#define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
995#define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
996#elif defined(__LITTLE_ENDIAN)
997	u16 itt;
998#define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
999#define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
1000#define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
1001#define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
1002	u16 reserved2;
1003#endif
1004#if defined(__BIG_ENDIAN)
1005	u16 cid;
1006	u16 reserved3;
1007#elif defined(__LITTLE_ENDIAN)
1008	u16 reserved3;
1009	u16 cid;
1010#endif
1011	u32 cmd_sn;
1012	u32 reserved4[5];
1013	u32 zero_fill;
1014	u32 bd_list_addr_lo;
1015	u32 bd_list_addr_hi;
1016#if defined(__BIG_ENDIAN)
1017	u8 cq_index;
1018	u8 reserved6;
1019	u8 reserved5;
1020	u8 num_bds;
1021#elif defined(__LITTLE_ENDIAN)
1022	u8 num_bds;
1023	u8 reserved5;
1024	u8 reserved6;
1025	u8 cq_index;
1026#endif
1027};
1028
1029
1030/*
1031 * iSCSI Logout CQE
1032 */
1033struct bnx2i_logout_response {
1034#if defined(__BIG_ENDIAN)
1035	u8 op_code;
1036	u8 reserved1;
1037	u8 response;
1038	u8 reserved0;
1039#elif defined(__LITTLE_ENDIAN)
1040	u8 reserved0;
1041	u8 response;
1042	u8 reserved1;
1043	u8 op_code;
1044#endif
1045	u32 reserved2;
1046	u32 exp_cmd_sn;
1047	u32 max_cmd_sn;
1048	u32 reserved3[2];
1049#if defined(__BIG_ENDIAN)
1050	u16 reserved5;
1051	u8 err_code;
1052	u8 reserved4;
1053#elif defined(__LITTLE_ENDIAN)
1054	u8 reserved4;
1055	u8 err_code;
1056	u16 reserved5;
1057#endif
1058	u32 reserved6[3];
1059#if defined(__BIG_ENDIAN)
1060	u16 time_to_wait;
1061	u16 time_to_retain;
1062#elif defined(__LITTLE_ENDIAN)
1063	u16 time_to_retain;
1064	u16 time_to_wait;
1065#endif
1066	u32 reserved7[3];
1067#if defined(__BIG_ENDIAN)
1068	u16 reserved8;
1069	u16 itt;
1070#define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1071#define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1072#define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1073#define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1074#elif defined(__LITTLE_ENDIAN)
1075	u16 itt;
1076#define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1077#define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1078#define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1079#define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1080	u16 reserved8;
1081#endif
1082	u32 cq_req_sn;
1083};
1084
1085
1086/*
1087 * iSCSI Nop-In CQE
1088 */
1089struct bnx2i_nop_in_msg {
1090#if defined(__BIG_ENDIAN)
1091	u8 op_code;
1092	u8 reserved1;
1093	u16 reserved0;
1094#elif defined(__LITTLE_ENDIAN)
1095	u16 reserved0;
1096	u8 reserved1;
1097	u8 op_code;
1098#endif
1099	u32 data_length;
1100	u32 exp_cmd_sn;
1101	u32 max_cmd_sn;
1102	u32 ttt;
1103	u32 reserved2;
1104#if defined(__BIG_ENDIAN)
1105	u16 reserved4;
1106	u8 err_code;
1107	u8 reserved3;
1108#elif defined(__LITTLE_ENDIAN)
1109	u8 reserved3;
1110	u8 err_code;
1111	u16 reserved4;
1112#endif
1113	u32 reserved5;
1114	u32 lun[2];
1115	u32 reserved6[4];
1116#if defined(__BIG_ENDIAN)
1117	u16 reserved7;
1118	u16 itt;
1119#define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1120#define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1121#define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1122#define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1123#elif defined(__LITTLE_ENDIAN)
1124	u16 itt;
1125#define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1126#define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1127#define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1128#define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1129	u16 reserved7;
1130#endif
1131	u32 cq_req_sn;
1132};
1133
1134
1135/*
1136 * iSCSI NOP-OUT SQ WQE
1137 */
1138struct bnx2i_nop_out_request {
1139#if defined(__BIG_ENDIAN)
1140	u8 op_code;
1141	u8 op_attr;
1142#define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1143#define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1144#define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1145#define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1146	u16 reserved0;
1147#elif defined(__LITTLE_ENDIAN)
1148	u16 reserved0;
1149	u8 op_attr;
1150#define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1151#define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1152#define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1153#define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1154	u8 op_code;
1155#endif
1156	u32 data_length;
1157	u32 lun[2];
1158#if defined(__BIG_ENDIAN)
1159	u16 reserved2;
1160	u16 itt;
1161#define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1162#define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1163#define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1164#define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1165#elif defined(__LITTLE_ENDIAN)
1166	u16 itt;
1167#define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1168#define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1169#define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1170#define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1171	u16 reserved2;
1172#endif
1173	u32 ttt;
1174	u32 cmd_sn;
1175	u32 reserved3[2];
1176	u32 resp_bd_list_addr_lo;
1177	u32 resp_bd_list_addr_hi;
1178	u32 resp_buffer;
1179#define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1180#define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1181#define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1182#define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS_SHIFT 24
1183#if defined(__BIG_ENDIAN)
1184	u16 reserved7;
1185	u8 reserved6;
1186	u8 flags;
1187#define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1188#define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1189#define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1190#define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1191#define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1192#define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1193#elif defined(__LITTLE_ENDIAN)
1194	u8 flags;
1195#define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1196#define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1197#define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1198#define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1199#define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1200#define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1201	u8 reserved6;
1202	u16 reserved7;
1203#endif
1204	u32 bd_list_addr_lo;
1205	u32 bd_list_addr_hi;
1206#if defined(__BIG_ENDIAN)
1207	u8 cq_index;
1208	u8 reserved9;
1209	u8 reserved8;
1210	u8 num_bds;
1211#elif defined(__LITTLE_ENDIAN)
1212	u8 num_bds;
1213	u8 reserved8;
1214	u8 reserved9;
1215	u8 cq_index;
1216#endif
1217};
1218
1219/*
1220 * iSCSI Reject CQE
1221 */
1222struct bnx2i_reject_msg {
1223#if defined(__BIG_ENDIAN)
1224	u8 op_code;
1225	u8 reserved1;
1226	u8 reason;
1227	u8 reserved0;
1228#elif defined(__LITTLE_ENDIAN)
1229	u8 reserved0;
1230	u8 reason;
1231	u8 reserved1;
1232	u8 op_code;
1233#endif
1234	u32 data_length;
1235	u32 exp_cmd_sn;
1236	u32 max_cmd_sn;
1237	u32 reserved2[2];
1238#if defined(__BIG_ENDIAN)
1239	u16 reserved4;
1240	u8 err_code;
1241	u8 reserved3;
1242#elif defined(__LITTLE_ENDIAN)
1243	u8 reserved3;
1244	u8 err_code;
1245	u16 reserved4;
1246#endif
1247	u32 reserved5[8];
1248	u32 cq_req_sn;
1249};
1250
1251/*
1252 * bnx2i iSCSI TMF SQ WQE
1253 */
1254struct bnx2i_tmf_request {
1255#if defined(__BIG_ENDIAN)
1256	u8 op_code;
1257	u8 op_attr;
1258#define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1259#define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1260#define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1261#define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1262	u16 reserved0;
1263#elif defined(__LITTLE_ENDIAN)
1264	u16 reserved0;
1265	u8 op_attr;
1266#define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1267#define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1268#define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1269#define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1270	u8 op_code;
1271#endif
1272	u32 data_length;
1273	u32 lun[2];
1274#if defined(__BIG_ENDIAN)
1275	u16 reserved1;
1276	u16 itt;
1277#define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1278#define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1279#define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1280#define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1281#elif defined(__LITTLE_ENDIAN)
1282	u16 itt;
1283#define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1284#define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1285#define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1286#define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1287	u16 reserved1;
1288#endif
1289	u32 ref_itt;
1290	u32 cmd_sn;
1291	u32 reserved2;
1292	u32 ref_cmd_sn;
1293	u32 reserved3[3];
1294	u32 zero_fill;
1295	u32 bd_list_addr_lo;
1296	u32 bd_list_addr_hi;
1297#if defined(__BIG_ENDIAN)
1298	u8 cq_index;
1299	u8 reserved5;
1300	u8 reserved4;
1301	u8 num_bds;
1302#elif defined(__LITTLE_ENDIAN)
1303	u8 num_bds;
1304	u8 reserved4;
1305	u8 reserved5;
1306	u8 cq_index;
1307#endif
1308};
1309
1310/*
1311 * iSCSI Text SQ WQE
1312 */
1313struct bnx2i_text_request {
1314#if defined(__BIG_ENDIAN)
1315	u8 op_code;
1316	u8 op_attr;
1317#define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0)
1318#define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0
1319#define ISCSI_TEXT_REQUEST_CONT (0x1<<6)
1320#define ISCSI_TEXT_REQUEST_CONT_SHIFT 6
1321#define ISCSI_TEXT_REQUEST_FINAL (0x1<<7)
1322#define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7
1323	u16 reserved0;
1324#elif defined(__LITTLE_ENDIAN)
1325	u16 reserved0;
1326	u8 op_attr;
1327#define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0)
1328#define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0
1329#define ISCSI_TEXT_REQUEST_CONT (0x1<<6)
1330#define ISCSI_TEXT_REQUEST_CONT_SHIFT 6
1331#define ISCSI_TEXT_REQUEST_FINAL (0x1<<7)
1332#define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7
1333	u8 op_code;
1334#endif
1335	u32 data_length;
1336	u32 lun[2];
1337#if defined(__BIG_ENDIAN)
1338	u16 reserved3;
1339	u16 itt;
1340#define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1341#define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1342#define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1343#define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1344#elif defined(__LITTLE_ENDIAN)
1345	u16 itt;
1346#define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1347#define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1348#define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1349#define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1350	u16 reserved3;
1351#endif
1352	u32 ttt;
1353	u32 cmd_sn;
1354	u32 reserved4[2];
1355	u32 resp_bd_list_addr_lo;
1356	u32 resp_bd_list_addr_hi;
1357	u32 resp_buffer;
1358#define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1359#define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1360#define ISCSI_TEXT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1361#define ISCSI_TEXT_REQUEST_NUM_RESP_BDS_SHIFT 24
1362	u32 zero_fill;
1363	u32 bd_list_addr_lo;
1364	u32 bd_list_addr_hi;
1365#if defined(__BIG_ENDIAN)
1366	u8 cq_index;
1367	u8 reserved7;
1368	u8 reserved6;
1369	u8 num_bds;
1370#elif defined(__LITTLE_ENDIAN)
1371	u8 num_bds;
1372	u8 reserved6;
1373	u8 reserved7;
1374	u8 cq_index;
1375#endif
1376};
1377
1378/*
1379 * iSCSI SQ WQE
1380 */
1381union iscsi_request {
1382	struct bnx2i_cmd_request cmd;
1383	struct bnx2i_tmf_request tmf;
1384	struct bnx2i_nop_out_request nop_out;
1385	struct bnx2i_login_request login_req;
1386	struct bnx2i_text_request text;
1387	struct bnx2i_logout_request logout_req;
1388	struct bnx2i_cleanup_request cleanup;
1389};
1390
1391
1392/*
1393 * iSCSI TMF CQE
1394 */
1395struct bnx2i_tmf_response {
1396#if defined(__BIG_ENDIAN)
1397	u8 op_code;
1398	u8 reserved1;
1399	u8 response;
1400	u8 reserved0;
1401#elif defined(__LITTLE_ENDIAN)
1402	u8 reserved0;
1403	u8 response;
1404	u8 reserved1;
1405	u8 op_code;
1406#endif
1407	u32 reserved2;
1408	u32 exp_cmd_sn;
1409	u32 max_cmd_sn;
1410	u32 reserved3[2];
1411#if defined(__BIG_ENDIAN)
1412	u16 reserved5;
1413	u8 err_code;
1414	u8 reserved4;
1415#elif defined(__LITTLE_ENDIAN)
1416	u8 reserved4;
1417	u8 err_code;
1418	u16 reserved5;
1419#endif
1420	u32 reserved6[7];
1421#if defined(__BIG_ENDIAN)
1422	u16 reserved7;
1423	u16 itt;
1424#define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1425#define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1426#define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1427#define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1428#elif defined(__LITTLE_ENDIAN)
1429	u16 itt;
1430#define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1431#define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1432#define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1433#define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1434	u16 reserved7;
1435#endif
1436	u32 cq_req_sn;
1437};
1438
1439/*
1440 * iSCSI Text CQE
1441 */
1442struct bnx2i_text_response {
1443#if defined(__BIG_ENDIAN)
1444	u8 op_code;
1445	u8 response_flags;
1446#define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0)
1447#define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0
1448#define ISCSI_TEXT_RESPONSE_CONT (0x1<<6)
1449#define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6
1450#define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7)
1451#define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7
1452	u16 reserved0;
1453#elif defined(__LITTLE_ENDIAN)
1454	u16 reserved0;
1455	u8 response_flags;
1456#define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0)
1457#define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0
1458#define ISCSI_TEXT_RESPONSE_CONT (0x1<<6)
1459#define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6
1460#define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7)
1461#define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7
1462	u8 op_code;
1463#endif
1464	u32 data_length;
1465	u32 exp_cmd_sn;
1466	u32 max_cmd_sn;
1467	u32 ttt;
1468	u32 reserved2;
1469#if defined(__BIG_ENDIAN)
1470	u16 reserved4;
1471	u8 err_code;
1472	u8 reserved3;
1473#elif defined(__LITTLE_ENDIAN)
1474	u8 reserved3;
1475	u8 err_code;
1476	u16 reserved4;
1477#endif
1478	u32 reserved5;
1479	u32 lun[2];
1480	u32 reserved6[4];
1481#if defined(__BIG_ENDIAN)
1482	u16 reserved7;
1483	u16 itt;
1484#define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1485#define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1486#define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1487#define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1488#elif defined(__LITTLE_ENDIAN)
1489	u16 itt;
1490#define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1491#define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1492#define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1493#define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1494	u16 reserved7;
1495#endif
1496	u32 cq_req_sn;
1497};
1498
1499/*
1500 * iSCSI CQE
1501 */
1502union iscsi_response {
1503	struct bnx2i_cmd_response cmd;
1504	struct bnx2i_tmf_response tmf;
1505	struct bnx2i_login_response login_resp;
1506	struct bnx2i_text_response text;
1507	struct bnx2i_logout_response logout_resp;
1508	struct bnx2i_cleanup_response cleanup;
1509	struct bnx2i_reject_msg reject;
1510	struct bnx2i_async_msg async;
1511	struct bnx2i_nop_in_msg nop_in;
1512};
1513
1514#endif /* __57XX_ISCSI_HSI_LINUX_LE__ */
1515