Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs...
[linux-2.6.git] / drivers / scsi / bnx2i / 57xx_iscsi_hsi.h
blobf2db5fe7bdc2ba8f8a9c0cbb8458593494eef98a
1 /* 57xx_iscsi_hsi.h: Broadcom NetXtreme II iSCSI HSI.
3 * Copyright (c) 2006 - 2012 Broadcom Corporation
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.
9 * Written by: Anil Veerabhadrappa (anilgv@broadcom.com)
10 * Maintained by: Eddie Wai (eddie.wai@broadcom.com)
12 #ifndef __57XX_ISCSI_HSI_LINUX_LE__
13 #define __57XX_ISCSI_HSI_LINUX_LE__
16 * iSCSI Async CQE
18 struct 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;
65 * iSCSI Buffer Descriptor (BD)
67 struct 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
104 * iSCSI Cleanup SQ WQE
106 struct 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
146 * iSCSI Cleanup CQE
148 struct 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;
190 * SCSI read/write SQ WQE
192 struct 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
267 * task statistics for write response
269 struct bnx2i_write_resp_task_stat {
270 #if defined(__BIG_ENDIAN)
271 u16 num_r2ts;
272 u16 num_data_outs;
273 #elif defined(__LITTLE_ENDIAN)
274 u16 num_data_outs;
275 u16 num_r2ts;
276 #endif
280 * task statistics for read response
282 struct bnx2i_read_resp_task_stat {
283 #if defined(__BIG_ENDIAN)
284 u16 reserved;
285 u16 num_data_ins;
286 #elif defined(__LITTLE_ENDIAN)
287 u16 num_data_ins;
288 u16 reserved;
289 #endif
293 * task statistics for iSCSI cmd response
295 union bnx2i_cmd_resp_task_stat {
296 struct bnx2i_write_resp_task_stat write_stat;
297 struct bnx2i_read_resp_task_stat read_stat;
301 * SCSI Command CQE
303 struct bnx2i_cmd_response {
304 #if defined(__BIG_ENDIAN)
305 u8 op_code;
306 u8 response_flags;
307 #define ISCSI_CMD_RESPONSE_RESERVED0 (0x1<<0)
308 #define ISCSI_CMD_RESPONSE_RESERVED0_SHIFT 0
309 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW (0x1<<1)
310 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW_SHIFT 1
311 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW (0x1<<2)
312 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW_SHIFT 2
313 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW (0x1<<3)
314 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW_SHIFT 3
315 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW (0x1<<4)
316 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW_SHIFT 4
317 #define ISCSI_CMD_RESPONSE_RESERVED1 (0x7<<5)
318 #define ISCSI_CMD_RESPONSE_RESERVED1_SHIFT 5
319 u8 response;
320 u8 status;
321 #elif defined(__LITTLE_ENDIAN)
322 u8 status;
323 u8 response;
324 u8 response_flags;
325 #define ISCSI_CMD_RESPONSE_RESERVED0 (0x1<<0)
326 #define ISCSI_CMD_RESPONSE_RESERVED0_SHIFT 0
327 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW (0x1<<1)
328 #define ISCSI_CMD_RESPONSE_RESIDUAL_UNDERFLOW_SHIFT 1
329 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW (0x1<<2)
330 #define ISCSI_CMD_RESPONSE_RESIDUAL_OVERFLOW_SHIFT 2
331 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW (0x1<<3)
332 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_UNDERFLOW_SHIFT 3
333 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW (0x1<<4)
334 #define ISCSI_CMD_RESPONSE_BR_RESIDUAL_OVERFLOW_SHIFT 4
335 #define ISCSI_CMD_RESPONSE_RESERVED1 (0x7<<5)
336 #define ISCSI_CMD_RESPONSE_RESERVED1_SHIFT 5
337 u8 op_code;
338 #endif
339 u32 data_length;
340 u32 exp_cmd_sn;
341 u32 max_cmd_sn;
342 u32 reserved2;
343 u32 residual_count;
344 #if defined(__BIG_ENDIAN)
345 u16 reserved4;
346 u8 err_code;
347 u8 reserved3;
348 #elif defined(__LITTLE_ENDIAN)
349 u8 reserved3;
350 u8 err_code;
351 u16 reserved4;
352 #endif
353 u32 reserved5[5];
354 union bnx2i_cmd_resp_task_stat task_stat;
355 u32 reserved6;
356 #if defined(__BIG_ENDIAN)
357 u16 reserved7;
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 #elif defined(__LITTLE_ENDIAN)
364 u16 itt;
365 #define ISCSI_CMD_RESPONSE_INDEX (0x3FFF<<0)
366 #define ISCSI_CMD_RESPONSE_INDEX_SHIFT 0
367 #define ISCSI_CMD_RESPONSE_TYPE (0x3<<14)
368 #define ISCSI_CMD_RESPONSE_TYPE_SHIFT 14
369 u16 reserved7;
370 #endif
371 u32 cq_req_sn;
377 * firmware middle-path request SQ WQE
379 struct bnx2i_fw_mp_request {
380 #if defined(__BIG_ENDIAN)
381 u8 op_code;
382 u8 op_attr;
383 u16 hdr_opaque1;
384 #elif defined(__LITTLE_ENDIAN)
385 u16 hdr_opaque1;
386 u8 op_attr;
387 u8 op_code;
388 #endif
389 u32 data_length;
390 u32 hdr_opaque2[2];
391 #if defined(__BIG_ENDIAN)
392 u16 reserved0;
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 #elif defined(__LITTLE_ENDIAN)
399 u16 itt;
400 #define ISCSI_FW_MP_REQUEST_INDEX (0x3FFF<<0)
401 #define ISCSI_FW_MP_REQUEST_INDEX_SHIFT 0
402 #define ISCSI_FW_MP_REQUEST_TYPE (0x3<<14)
403 #define ISCSI_FW_MP_REQUEST_TYPE_SHIFT 14
404 u16 reserved0;
405 #endif
406 u32 hdr_opaque3[4];
407 u32 resp_bd_list_addr_lo;
408 u32 resp_bd_list_addr_hi;
409 u32 resp_buffer;
410 #define ISCSI_FW_MP_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
411 #define ISCSI_FW_MP_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
412 #define ISCSI_FW_MP_REQUEST_NUM_RESP_BDS (0xFF<<24)
413 #define ISCSI_FW_MP_REQUEST_NUM_RESP_BDS_SHIFT 24
414 #if defined(__BIG_ENDIAN)
415 u16 reserved4;
416 u8 reserved3;
417 u8 flags;
418 #define ISCSI_FW_MP_REQUEST_RESERVED1 (0x1<<0)
419 #define ISCSI_FW_MP_REQUEST_RESERVED1_SHIFT 0
420 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION (0x1<<1)
421 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION_SHIFT 1
422 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
423 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
424 #define ISCSI_FW_MP_REQUEST_RESERVED2 (0x1F<<3)
425 #define ISCSI_FW_MP_REQUEST_RESERVED2_SHIFT 3
426 #elif defined(__LITTLE_ENDIAN)
427 u8 flags;
428 #define ISCSI_FW_MP_REQUEST_RESERVED1 (0x1<<0)
429 #define ISCSI_FW_MP_REQUEST_RESERVED1_SHIFT 0
430 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION (0x1<<1)
431 #define ISCSI_FW_MP_REQUEST_LOCAL_COMPLETION_SHIFT 1
432 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
433 #define ISCSI_FW_MP_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
434 #define ISCSI_FW_MP_REQUEST_RESERVED2 (0x1F<<3)
435 #define ISCSI_FW_MP_REQUEST_RESERVED2_SHIFT 3
436 u8 reserved3;
437 u16 reserved4;
438 #endif
439 u32 bd_list_addr_lo;
440 u32 bd_list_addr_hi;
441 #if defined(__BIG_ENDIAN)
442 u8 cq_index;
443 u8 reserved6;
444 u8 reserved5;
445 u8 num_bds;
446 #elif defined(__LITTLE_ENDIAN)
447 u8 num_bds;
448 u8 reserved5;
449 u8 reserved6;
450 u8 cq_index;
451 #endif
456 * firmware response - CQE: used only by firmware
458 struct bnx2i_fw_response {
459 u32 hdr_dword1[2];
460 u32 hdr_exp_cmd_sn;
461 u32 hdr_max_cmd_sn;
462 u32 hdr_ttt;
463 u32 hdr_res_cnt;
464 u32 cqe_flags;
465 #define ISCSI_FW_RESPONSE_RESERVED2 (0xFF<<0)
466 #define ISCSI_FW_RESPONSE_RESERVED2_SHIFT 0
467 #define ISCSI_FW_RESPONSE_ERR_CODE (0xFF<<8)
468 #define ISCSI_FW_RESPONSE_ERR_CODE_SHIFT 8
469 #define ISCSI_FW_RESPONSE_RESERVED3 (0xFFFF<<16)
470 #define ISCSI_FW_RESPONSE_RESERVED3_SHIFT 16
471 u32 stat_sn;
472 u32 hdr_dword2[2];
473 u32 hdr_dword3[2];
474 u32 task_stat;
475 u32 reserved0;
476 u32 hdr_itt;
477 u32 cq_req_sn;
482 * iSCSI KCQ CQE parameters
484 union iscsi_kcqe_params {
485 u32 reserved0[4];
489 * iSCSI KCQ CQE
491 struct iscsi_kcqe {
492 u32 iscsi_conn_id;
493 u32 completion_status;
494 u32 iscsi_conn_context_id;
495 union iscsi_kcqe_params params;
496 #if defined(__BIG_ENDIAN)
497 u8 flags;
498 #define ISCSI_KCQE_RESERVED0 (0xF<<0)
499 #define ISCSI_KCQE_RESERVED0_SHIFT 0
500 #define ISCSI_KCQE_LAYER_CODE (0x7<<4)
501 #define ISCSI_KCQE_LAYER_CODE_SHIFT 4
502 #define ISCSI_KCQE_RESERVED1 (0x1<<7)
503 #define ISCSI_KCQE_RESERVED1_SHIFT 7
504 u8 op_code;
505 u16 qe_self_seq;
506 #elif defined(__LITTLE_ENDIAN)
507 u16 qe_self_seq;
508 u8 op_code;
509 u8 flags;
510 #define ISCSI_KCQE_RESERVED0 (0xF<<0)
511 #define ISCSI_KCQE_RESERVED0_SHIFT 0
512 #define ISCSI_KCQE_LAYER_CODE (0x7<<4)
513 #define ISCSI_KCQE_LAYER_CODE_SHIFT 4
514 #define ISCSI_KCQE_RESERVED1 (0x1<<7)
515 #define ISCSI_KCQE_RESERVED1_SHIFT 7
516 #endif
522 * iSCSI KWQE header
524 struct iscsi_kwqe_header {
525 #if defined(__BIG_ENDIAN)
526 u8 flags;
527 #define ISCSI_KWQE_HEADER_RESERVED0 (0xF<<0)
528 #define ISCSI_KWQE_HEADER_RESERVED0_SHIFT 0
529 #define ISCSI_KWQE_HEADER_LAYER_CODE (0x7<<4)
530 #define ISCSI_KWQE_HEADER_LAYER_CODE_SHIFT 4
531 #define ISCSI_KWQE_HEADER_RESERVED1 (0x1<<7)
532 #define ISCSI_KWQE_HEADER_RESERVED1_SHIFT 7
533 u8 op_code;
534 #elif defined(__LITTLE_ENDIAN)
535 u8 op_code;
536 u8 flags;
537 #define ISCSI_KWQE_HEADER_RESERVED0 (0xF<<0)
538 #define ISCSI_KWQE_HEADER_RESERVED0_SHIFT 0
539 #define ISCSI_KWQE_HEADER_LAYER_CODE (0x7<<4)
540 #define ISCSI_KWQE_HEADER_LAYER_CODE_SHIFT 4
541 #define ISCSI_KWQE_HEADER_RESERVED1 (0x1<<7)
542 #define ISCSI_KWQE_HEADER_RESERVED1_SHIFT 7
543 #endif
547 * iSCSI firmware init request 1
549 struct iscsi_kwqe_init1 {
550 #if defined(__BIG_ENDIAN)
551 struct iscsi_kwqe_header hdr;
552 u8 reserved0;
553 u8 num_cqs;
554 #elif defined(__LITTLE_ENDIAN)
555 u8 num_cqs;
556 u8 reserved0;
557 struct iscsi_kwqe_header hdr;
558 #endif
559 u32 dummy_buffer_addr_lo;
560 u32 dummy_buffer_addr_hi;
561 #if defined(__BIG_ENDIAN)
562 u16 num_ccells_per_conn;
563 u16 num_tasks_per_conn;
564 #elif defined(__LITTLE_ENDIAN)
565 u16 num_tasks_per_conn;
566 u16 num_ccells_per_conn;
567 #endif
568 #if defined(__BIG_ENDIAN)
569 u16 sq_wqes_per_page;
570 u16 sq_num_wqes;
571 #elif defined(__LITTLE_ENDIAN)
572 u16 sq_num_wqes;
573 u16 sq_wqes_per_page;
574 #endif
575 #if defined(__BIG_ENDIAN)
576 u8 cq_log_wqes_per_page;
577 u8 flags;
578 #define ISCSI_KWQE_INIT1_PAGE_SIZE (0xF<<0)
579 #define ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT 0
580 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE (0x1<<4)
581 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4
582 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5)
583 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5
584 #define ISCSI_KWQE_INIT1_RESERVED1 (0x3<<6)
585 #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 6
586 u16 cq_num_wqes;
587 #elif defined(__LITTLE_ENDIAN)
588 u16 cq_num_wqes;
589 u8 flags;
590 #define ISCSI_KWQE_INIT1_PAGE_SIZE (0xF<<0)
591 #define ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT 0
592 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE (0x1<<4)
593 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4
594 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5)
595 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5
596 #define ISCSI_KWQE_INIT1_RESERVED1 (0x3<<6)
597 #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 6
598 u8 cq_log_wqes_per_page;
599 #endif
600 #if defined(__BIG_ENDIAN)
601 u16 cq_num_pages;
602 u16 sq_num_pages;
603 #elif defined(__LITTLE_ENDIAN)
604 u16 sq_num_pages;
605 u16 cq_num_pages;
606 #endif
607 #if defined(__BIG_ENDIAN)
608 u16 rq_buffer_size;
609 u16 rq_num_wqes;
610 #elif defined(__LITTLE_ENDIAN)
611 u16 rq_num_wqes;
612 u16 rq_buffer_size;
613 #endif
617 * iSCSI firmware init request 2
619 struct iscsi_kwqe_init2 {
620 #if defined(__BIG_ENDIAN)
621 struct iscsi_kwqe_header hdr;
622 u16 max_cq_sqn;
623 #elif defined(__LITTLE_ENDIAN)
624 u16 max_cq_sqn;
625 struct iscsi_kwqe_header hdr;
626 #endif
627 u32 error_bit_map[2];
628 u32 reserved1[5];
632 * Initial iSCSI connection offload request 1
634 struct iscsi_kwqe_conn_offload1 {
635 #if defined(__BIG_ENDIAN)
636 struct iscsi_kwqe_header hdr;
637 u16 iscsi_conn_id;
638 #elif defined(__LITTLE_ENDIAN)
639 u16 iscsi_conn_id;
640 struct iscsi_kwqe_header hdr;
641 #endif
642 u32 sq_page_table_addr_lo;
643 u32 sq_page_table_addr_hi;
644 u32 cq_page_table_addr_lo;
645 u32 cq_page_table_addr_hi;
646 u32 reserved0[3];
650 * iSCSI Page Table Entry (PTE)
652 struct iscsi_pte {
653 u32 hi;
654 u32 lo;
658 * Initial iSCSI connection offload request 2
660 struct iscsi_kwqe_conn_offload2 {
661 #if defined(__BIG_ENDIAN)
662 struct iscsi_kwqe_header hdr;
663 u16 reserved0;
664 #elif defined(__LITTLE_ENDIAN)
665 u16 reserved0;
666 struct iscsi_kwqe_header hdr;
667 #endif
668 u32 rq_page_table_addr_lo;
669 u32 rq_page_table_addr_hi;
670 struct iscsi_pte sq_first_pte;
671 struct iscsi_pte cq_first_pte;
672 u32 num_additional_wqes;
677 * Initial iSCSI connection offload request 3
679 struct iscsi_kwqe_conn_offload3 {
680 #if defined(__BIG_ENDIAN)
681 struct iscsi_kwqe_header hdr;
682 u16 reserved0;
683 #elif defined(__LITTLE_ENDIAN)
684 u16 reserved0;
685 struct iscsi_kwqe_header hdr;
686 #endif
687 u32 reserved1;
688 struct iscsi_pte qp_first_pte[3];
693 * iSCSI connection update request
695 struct iscsi_kwqe_conn_update {
696 #if defined(__BIG_ENDIAN)
697 struct iscsi_kwqe_header hdr;
698 u16 reserved0;
699 #elif defined(__LITTLE_ENDIAN)
700 u16 reserved0;
701 struct iscsi_kwqe_header hdr;
702 #endif
703 #if defined(__BIG_ENDIAN)
704 u8 session_error_recovery_level;
705 u8 max_outstanding_r2ts;
706 u8 reserved2;
707 u8 conn_flags;
708 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0)
709 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0
710 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1)
711 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1
712 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2)
713 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2
714 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3)
715 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3
716 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE (0x3<<4)
717 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
718 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
719 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
720 #elif defined(__LITTLE_ENDIAN)
721 u8 conn_flags;
722 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0)
723 #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0
724 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1)
725 #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1
726 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2)
727 #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2
728 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3)
729 #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3
730 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE (0x3<<4)
731 #define ISCSI_KWQE_CONN_UPDATE_OOO_SUPPORT_MODE_SHIFT 4
732 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0x3<<6)
733 #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 6
734 u8 reserved2;
735 u8 max_outstanding_r2ts;
736 u8 session_error_recovery_level;
737 #endif
738 u32 context_id;
739 u32 max_send_pdu_length;
740 u32 max_recv_pdu_length;
741 u32 first_burst_length;
742 u32 max_burst_length;
743 u32 exp_stat_sn;
747 * iSCSI destroy connection request
749 struct iscsi_kwqe_conn_destroy {
750 #if defined(__BIG_ENDIAN)
751 struct iscsi_kwqe_header hdr;
752 u16 reserved0;
753 #elif defined(__LITTLE_ENDIAN)
754 u16 reserved0;
755 struct iscsi_kwqe_header hdr;
756 #endif
757 u32 context_id;
758 u32 reserved1[6];
762 * iSCSI KWQ WQE
764 union iscsi_kwqe {
765 struct iscsi_kwqe_init1 init1;
766 struct iscsi_kwqe_init2 init2;
767 struct iscsi_kwqe_conn_offload1 conn_offload1;
768 struct iscsi_kwqe_conn_offload2 conn_offload2;
769 struct iscsi_kwqe_conn_update conn_update;
770 struct iscsi_kwqe_conn_destroy conn_destroy;
774 * iSCSI Login SQ WQE
776 struct bnx2i_login_request {
777 #if defined(__BIG_ENDIAN)
778 u8 op_code;
779 u8 op_attr;
780 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
781 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
782 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
783 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
784 #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
785 #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
786 #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
787 #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
788 #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
789 #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
790 u8 version_max;
791 u8 version_min;
792 #elif defined(__LITTLE_ENDIAN)
793 u8 version_min;
794 u8 version_max;
795 u8 op_attr;
796 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0)
797 #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0
798 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2)
799 #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2
800 #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4)
801 #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4
802 #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6)
803 #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6
804 #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7)
805 #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7
806 u8 op_code;
807 #endif
808 u32 data_length;
809 u32 isid_lo;
810 #if defined(__BIG_ENDIAN)
811 u16 isid_hi;
812 u16 tsih;
813 #elif defined(__LITTLE_ENDIAN)
814 u16 tsih;
815 u16 isid_hi;
816 #endif
817 #if defined(__BIG_ENDIAN)
818 u16 reserved2;
819 u16 itt;
820 #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
821 #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
822 #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
823 #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
824 #elif defined(__LITTLE_ENDIAN)
825 u16 itt;
826 #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0)
827 #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0
828 #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14)
829 #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
830 u16 reserved2;
831 #endif
832 #if defined(__BIG_ENDIAN)
833 u16 cid;
834 u16 reserved3;
835 #elif defined(__LITTLE_ENDIAN)
836 u16 reserved3;
837 u16 cid;
838 #endif
839 u32 cmd_sn;
840 u32 exp_stat_sn;
841 u32 reserved4;
842 u32 resp_bd_list_addr_lo;
843 u32 resp_bd_list_addr_hi;
844 u32 resp_buffer;
845 #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
846 #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
847 #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS (0xFF<<24)
848 #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS_SHIFT 24
849 #if defined(__BIG_ENDIAN)
850 u16 reserved8;
851 u8 reserved7;
852 u8 flags;
853 #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
854 #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
855 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
856 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
857 #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
858 #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
859 #elif defined(__LITTLE_ENDIAN)
860 u8 flags;
861 #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0)
862 #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0
863 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2)
864 #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2
865 #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3)
866 #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3
867 u8 reserved7;
868 u16 reserved8;
869 #endif
870 u32 bd_list_addr_lo;
871 u32 bd_list_addr_hi;
872 #if defined(__BIG_ENDIAN)
873 u8 cq_index;
874 u8 reserved10;
875 u8 reserved9;
876 u8 num_bds;
877 #elif defined(__LITTLE_ENDIAN)
878 u8 num_bds;
879 u8 reserved9;
880 u8 reserved10;
881 u8 cq_index;
882 #endif
887 * iSCSI Login CQE
889 struct bnx2i_login_response {
890 #if defined(__BIG_ENDIAN)
891 u8 op_code;
892 u8 response_flags;
893 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
894 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
895 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
896 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
897 #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
898 #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
899 #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
900 #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
901 #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
902 #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
903 u8 version_max;
904 u8 version_active;
905 #elif defined(__LITTLE_ENDIAN)
906 u8 version_active;
907 u8 version_max;
908 u8 response_flags;
909 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0)
910 #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0
911 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2)
912 #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2
913 #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4)
914 #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4
915 #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6)
916 #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6
917 #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7)
918 #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7
919 u8 op_code;
920 #endif
921 u32 data_length;
922 u32 exp_cmd_sn;
923 u32 max_cmd_sn;
924 u32 reserved1[2];
925 #if defined(__BIG_ENDIAN)
926 u16 reserved3;
927 u8 err_code;
928 u8 reserved2;
929 #elif defined(__LITTLE_ENDIAN)
930 u8 reserved2;
931 u8 err_code;
932 u16 reserved3;
933 #endif
934 u32 stat_sn;
935 u32 isid_lo;
936 #if defined(__BIG_ENDIAN)
937 u16 isid_hi;
938 u16 tsih;
939 #elif defined(__LITTLE_ENDIAN)
940 u16 tsih;
941 u16 isid_hi;
942 #endif
943 #if defined(__BIG_ENDIAN)
944 u8 status_class;
945 u8 status_detail;
946 u16 reserved4;
947 #elif defined(__LITTLE_ENDIAN)
948 u16 reserved4;
949 u8 status_detail;
950 u8 status_class;
951 #endif
952 u32 reserved5[3];
953 #if defined(__BIG_ENDIAN)
954 u16 reserved6;
955 u16 itt;
956 #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
957 #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
958 #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
959 #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
960 #elif defined(__LITTLE_ENDIAN)
961 u16 itt;
962 #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0)
963 #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0
964 #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14)
965 #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14
966 u16 reserved6;
967 #endif
968 u32 cq_req_sn;
973 * iSCSI Logout SQ WQE
975 struct bnx2i_logout_request {
976 #if defined(__BIG_ENDIAN)
977 u8 op_code;
978 u8 op_attr;
979 #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
980 #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
981 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
982 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
983 u16 reserved0;
984 #elif defined(__LITTLE_ENDIAN)
985 u16 reserved0;
986 u8 op_attr;
987 #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0)
988 #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0
989 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7)
990 #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7
991 u8 op_code;
992 #endif
993 u32 data_length;
994 u32 reserved1[2];
995 #if defined(__BIG_ENDIAN)
996 u16 reserved2;
997 u16 itt;
998 #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
999 #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
1000 #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
1001 #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
1002 #elif defined(__LITTLE_ENDIAN)
1003 u16 itt;
1004 #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0)
1005 #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0
1006 #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14)
1007 #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
1008 u16 reserved2;
1009 #endif
1010 #if defined(__BIG_ENDIAN)
1011 u16 cid;
1012 u16 reserved3;
1013 #elif defined(__LITTLE_ENDIAN)
1014 u16 reserved3;
1015 u16 cid;
1016 #endif
1017 u32 cmd_sn;
1018 u32 reserved4[5];
1019 u32 zero_fill;
1020 u32 bd_list_addr_lo;
1021 u32 bd_list_addr_hi;
1022 #if defined(__BIG_ENDIAN)
1023 u8 cq_index;
1024 u8 reserved6;
1025 u8 reserved5;
1026 u8 num_bds;
1027 #elif defined(__LITTLE_ENDIAN)
1028 u8 num_bds;
1029 u8 reserved5;
1030 u8 reserved6;
1031 u8 cq_index;
1032 #endif
1037 * iSCSI Logout CQE
1039 struct bnx2i_logout_response {
1040 #if defined(__BIG_ENDIAN)
1041 u8 op_code;
1042 u8 reserved1;
1043 u8 response;
1044 u8 reserved0;
1045 #elif defined(__LITTLE_ENDIAN)
1046 u8 reserved0;
1047 u8 response;
1048 u8 reserved1;
1049 u8 op_code;
1050 #endif
1051 u32 reserved2;
1052 u32 exp_cmd_sn;
1053 u32 max_cmd_sn;
1054 u32 reserved3[2];
1055 #if defined(__BIG_ENDIAN)
1056 u16 reserved5;
1057 u8 err_code;
1058 u8 reserved4;
1059 #elif defined(__LITTLE_ENDIAN)
1060 u8 reserved4;
1061 u8 err_code;
1062 u16 reserved5;
1063 #endif
1064 u32 reserved6[3];
1065 #if defined(__BIG_ENDIAN)
1066 u16 time_to_wait;
1067 u16 time_to_retain;
1068 #elif defined(__LITTLE_ENDIAN)
1069 u16 time_to_retain;
1070 u16 time_to_wait;
1071 #endif
1072 u32 reserved7[3];
1073 #if defined(__BIG_ENDIAN)
1074 u16 reserved8;
1075 u16 itt;
1076 #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1077 #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1078 #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1079 #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1080 #elif defined(__LITTLE_ENDIAN)
1081 u16 itt;
1082 #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0)
1083 #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0
1084 #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14)
1085 #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14
1086 u16 reserved8;
1087 #endif
1088 u32 cq_req_sn;
1093 * iSCSI Nop-In CQE
1095 struct bnx2i_nop_in_msg {
1096 #if defined(__BIG_ENDIAN)
1097 u8 op_code;
1098 u8 reserved1;
1099 u16 reserved0;
1100 #elif defined(__LITTLE_ENDIAN)
1101 u16 reserved0;
1102 u8 reserved1;
1103 u8 op_code;
1104 #endif
1105 u32 data_length;
1106 u32 exp_cmd_sn;
1107 u32 max_cmd_sn;
1108 u32 ttt;
1109 u32 reserved2;
1110 #if defined(__BIG_ENDIAN)
1111 u16 reserved4;
1112 u8 err_code;
1113 u8 reserved3;
1114 #elif defined(__LITTLE_ENDIAN)
1115 u8 reserved3;
1116 u8 err_code;
1117 u16 reserved4;
1118 #endif
1119 u32 reserved5;
1120 u32 lun[2];
1121 u32 reserved6[4];
1122 #if defined(__BIG_ENDIAN)
1123 u16 reserved7;
1124 u16 itt;
1125 #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1126 #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1127 #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1128 #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1129 #elif defined(__LITTLE_ENDIAN)
1130 u16 itt;
1131 #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0)
1132 #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0
1133 #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14)
1134 #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14
1135 u16 reserved7;
1136 #endif
1137 u32 cq_req_sn;
1142 * iSCSI NOP-OUT SQ WQE
1144 struct bnx2i_nop_out_request {
1145 #if defined(__BIG_ENDIAN)
1146 u8 op_code;
1147 u8 op_attr;
1148 #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1149 #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1150 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1151 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1152 u16 reserved0;
1153 #elif defined(__LITTLE_ENDIAN)
1154 u16 reserved0;
1155 u8 op_attr;
1156 #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0)
1157 #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0
1158 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7)
1159 #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7
1160 u8 op_code;
1161 #endif
1162 u32 data_length;
1163 u32 lun[2];
1164 #if defined(__BIG_ENDIAN)
1165 u16 reserved2;
1166 u16 itt;
1167 #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1168 #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1169 #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1170 #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1171 #elif defined(__LITTLE_ENDIAN)
1172 u16 itt;
1173 #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0)
1174 #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0
1175 #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14)
1176 #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14
1177 u16 reserved2;
1178 #endif
1179 u32 ttt;
1180 u32 cmd_sn;
1181 u32 reserved3[2];
1182 u32 resp_bd_list_addr_lo;
1183 u32 resp_bd_list_addr_hi;
1184 u32 resp_buffer;
1185 #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1186 #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1187 #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1188 #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS_SHIFT 24
1189 #if defined(__BIG_ENDIAN)
1190 u16 reserved7;
1191 u8 reserved6;
1192 u8 flags;
1193 #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1194 #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1195 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1196 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1197 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1198 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1199 #elif defined(__LITTLE_ENDIAN)
1200 u8 flags;
1201 #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0)
1202 #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0
1203 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1)
1204 #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1
1205 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2)
1206 #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2
1207 u8 reserved6;
1208 u16 reserved7;
1209 #endif
1210 u32 bd_list_addr_lo;
1211 u32 bd_list_addr_hi;
1212 #if defined(__BIG_ENDIAN)
1213 u8 cq_index;
1214 u8 reserved9;
1215 u8 reserved8;
1216 u8 num_bds;
1217 #elif defined(__LITTLE_ENDIAN)
1218 u8 num_bds;
1219 u8 reserved8;
1220 u8 reserved9;
1221 u8 cq_index;
1222 #endif
1226 * iSCSI Reject CQE
1228 struct bnx2i_reject_msg {
1229 #if defined(__BIG_ENDIAN)
1230 u8 op_code;
1231 u8 reserved1;
1232 u8 reason;
1233 u8 reserved0;
1234 #elif defined(__LITTLE_ENDIAN)
1235 u8 reserved0;
1236 u8 reason;
1237 u8 reserved1;
1238 u8 op_code;
1239 #endif
1240 u32 data_length;
1241 u32 exp_cmd_sn;
1242 u32 max_cmd_sn;
1243 u32 reserved2[2];
1244 #if defined(__BIG_ENDIAN)
1245 u16 reserved4;
1246 u8 err_code;
1247 u8 reserved3;
1248 #elif defined(__LITTLE_ENDIAN)
1249 u8 reserved3;
1250 u8 err_code;
1251 u16 reserved4;
1252 #endif
1253 u32 reserved5[8];
1254 u32 cq_req_sn;
1258 * bnx2i iSCSI TMF SQ WQE
1260 struct bnx2i_tmf_request {
1261 #if defined(__BIG_ENDIAN)
1262 u8 op_code;
1263 u8 op_attr;
1264 #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1265 #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1266 #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1267 #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1268 u16 reserved0;
1269 #elif defined(__LITTLE_ENDIAN)
1270 u16 reserved0;
1271 u8 op_attr;
1272 #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0)
1273 #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0
1274 #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7)
1275 #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7
1276 u8 op_code;
1277 #endif
1278 u32 data_length;
1279 u32 lun[2];
1280 #if defined(__BIG_ENDIAN)
1281 u16 reserved1;
1282 u16 itt;
1283 #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1284 #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1285 #define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1286 #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1287 #elif defined(__LITTLE_ENDIAN)
1288 u16 itt;
1289 #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0)
1290 #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0
1291 #define ISCSI_TMF_REQUEST_TYPE (0x3<<14)
1292 #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14
1293 u16 reserved1;
1294 #endif
1295 u32 ref_itt;
1296 u32 cmd_sn;
1297 u32 reserved2;
1298 u32 ref_cmd_sn;
1299 u32 reserved3[3];
1300 u32 zero_fill;
1301 u32 bd_list_addr_lo;
1302 u32 bd_list_addr_hi;
1303 #if defined(__BIG_ENDIAN)
1304 u8 cq_index;
1305 u8 reserved5;
1306 u8 reserved4;
1307 u8 num_bds;
1308 #elif defined(__LITTLE_ENDIAN)
1309 u8 num_bds;
1310 u8 reserved4;
1311 u8 reserved5;
1312 u8 cq_index;
1313 #endif
1317 * iSCSI Text SQ WQE
1319 struct bnx2i_text_request {
1320 #if defined(__BIG_ENDIAN)
1321 u8 op_code;
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 u16 reserved0;
1330 #elif defined(__LITTLE_ENDIAN)
1331 u16 reserved0;
1332 u8 op_attr;
1333 #define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0)
1334 #define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0
1335 #define ISCSI_TEXT_REQUEST_CONT (0x1<<6)
1336 #define ISCSI_TEXT_REQUEST_CONT_SHIFT 6
1337 #define ISCSI_TEXT_REQUEST_FINAL (0x1<<7)
1338 #define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7
1339 u8 op_code;
1340 #endif
1341 u32 data_length;
1342 u32 lun[2];
1343 #if defined(__BIG_ENDIAN)
1344 u16 reserved3;
1345 u16 itt;
1346 #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1347 #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1348 #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1349 #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1350 #elif defined(__LITTLE_ENDIAN)
1351 u16 itt;
1352 #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0)
1353 #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0
1354 #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14)
1355 #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
1356 u16 reserved3;
1357 #endif
1358 u32 ttt;
1359 u32 cmd_sn;
1360 u32 reserved4[2];
1361 u32 resp_bd_list_addr_lo;
1362 u32 resp_bd_list_addr_hi;
1363 u32 resp_buffer;
1364 #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0)
1365 #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
1366 #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS (0xFF<<24)
1367 #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS_SHIFT 24
1368 u32 zero_fill;
1369 u32 bd_list_addr_lo;
1370 u32 bd_list_addr_hi;
1371 #if defined(__BIG_ENDIAN)
1372 u8 cq_index;
1373 u8 reserved7;
1374 u8 reserved6;
1375 u8 num_bds;
1376 #elif defined(__LITTLE_ENDIAN)
1377 u8 num_bds;
1378 u8 reserved6;
1379 u8 reserved7;
1380 u8 cq_index;
1381 #endif
1385 * iSCSI SQ WQE
1387 union iscsi_request {
1388 struct bnx2i_cmd_request cmd;
1389 struct bnx2i_tmf_request tmf;
1390 struct bnx2i_nop_out_request nop_out;
1391 struct bnx2i_login_request login_req;
1392 struct bnx2i_text_request text;
1393 struct bnx2i_logout_request logout_req;
1394 struct bnx2i_cleanup_request cleanup;
1399 * iSCSI TMF CQE
1401 struct bnx2i_tmf_response {
1402 #if defined(__BIG_ENDIAN)
1403 u8 op_code;
1404 u8 reserved1;
1405 u8 response;
1406 u8 reserved0;
1407 #elif defined(__LITTLE_ENDIAN)
1408 u8 reserved0;
1409 u8 response;
1410 u8 reserved1;
1411 u8 op_code;
1412 #endif
1413 u32 reserved2;
1414 u32 exp_cmd_sn;
1415 u32 max_cmd_sn;
1416 u32 reserved3[2];
1417 #if defined(__BIG_ENDIAN)
1418 u16 reserved5;
1419 u8 err_code;
1420 u8 reserved4;
1421 #elif defined(__LITTLE_ENDIAN)
1422 u8 reserved4;
1423 u8 err_code;
1424 u16 reserved5;
1425 #endif
1426 u32 reserved6[7];
1427 #if defined(__BIG_ENDIAN)
1428 u16 reserved7;
1429 u16 itt;
1430 #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1431 #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1432 #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1433 #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1434 #elif defined(__LITTLE_ENDIAN)
1435 u16 itt;
1436 #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0)
1437 #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0
1438 #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14)
1439 #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14
1440 u16 reserved7;
1441 #endif
1442 u32 cq_req_sn;
1446 * iSCSI Text CQE
1448 struct bnx2i_text_response {
1449 #if defined(__BIG_ENDIAN)
1450 u8 op_code;
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 u16 reserved0;
1459 #elif defined(__LITTLE_ENDIAN)
1460 u16 reserved0;
1461 u8 response_flags;
1462 #define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0)
1463 #define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0
1464 #define ISCSI_TEXT_RESPONSE_CONT (0x1<<6)
1465 #define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6
1466 #define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7)
1467 #define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7
1468 u8 op_code;
1469 #endif
1470 u32 data_length;
1471 u32 exp_cmd_sn;
1472 u32 max_cmd_sn;
1473 u32 ttt;
1474 u32 reserved2;
1475 #if defined(__BIG_ENDIAN)
1476 u16 reserved4;
1477 u8 err_code;
1478 u8 reserved3;
1479 #elif defined(__LITTLE_ENDIAN)
1480 u8 reserved3;
1481 u8 err_code;
1482 u16 reserved4;
1483 #endif
1484 u32 reserved5;
1485 u32 lun[2];
1486 u32 reserved6[4];
1487 #if defined(__BIG_ENDIAN)
1488 u16 reserved7;
1489 u16 itt;
1490 #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1491 #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1492 #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1493 #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1494 #elif defined(__LITTLE_ENDIAN)
1495 u16 itt;
1496 #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0)
1497 #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0
1498 #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14)
1499 #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14
1500 u16 reserved7;
1501 #endif
1502 u32 cq_req_sn;
1506 * iSCSI CQE
1508 union iscsi_response {
1509 struct bnx2i_cmd_response cmd;
1510 struct bnx2i_tmf_response tmf;
1511 struct bnx2i_login_response login_resp;
1512 struct bnx2i_text_response text;
1513 struct bnx2i_logout_response logout_resp;
1514 struct bnx2i_cleanup_response cleanup;
1515 struct bnx2i_reject_msg reject;
1516 struct bnx2i_async_msg async;
1517 struct bnx2i_nop_in_msg nop_in;
1520 #endif /* __57XX_ISCSI_HSI_LINUX_LE__ */