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