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