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