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