Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
bnx2i
57xx_iscsi_hsi.h
Go to the documentation of this file.
1
/* 57xx_iscsi_hsi.h: Broadcom NetXtreme II iSCSI HSI.
2
*
3
* Copyright (c) 2006 - 2012 Broadcom Corporation
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 (
[email protected]
)
10
* Maintained by: Eddie Wai (
[email protected]
)
11
*/
12
#ifndef __57XX_ISCSI_HSI_LINUX_LE__
13
#define __57XX_ISCSI_HSI_LINUX_LE__
14
15
/*
16
* iSCSI Async CQE
17
*/
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
;
61
};
62
63
64
/*
65
* iSCSI Buffer Descriptor (BD)
66
*/
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
100
};
101
102
103
/*
104
* iSCSI Cleanup SQ WQE
105
*/
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
142
};
143
144
145
/*
146
* iSCSI Cleanup CQE
147
*/
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
;
186
};
187
188
189
/*
190
* SCSI read/write SQ WQE
191
*/
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
263
};
264
265
266
/*
267
* task statistics for write response
268
*/
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
277
};
278
279
/*
280
* task statistics for read response
281
*/
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
290
};
291
292
/*
293
* task statistics for iSCSI cmd response
294
*/
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
;
298
};
299
300
/*
301
* SCSI Command CQE
302
*/
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
;
372
};
373
374
375
376
/*
377
* firmware middle-path request SQ WQE
378
*/
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
452
};
453
454
455
/*
456
* firmware response - CQE: used only by firmware
457
*/
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
;
478
};
479
480
481
/*
482
* iSCSI KCQ CQE parameters
483
*/
484
union
iscsi_kcqe_params
{
485
u32
reserved0
[4];
486
};
487
488
/*
489
* iSCSI KCQ CQE
490
*/
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
517
};
518
519
520
521
/*
522
* iSCSI KWQE header
523
*/
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
544
};
545
546
/*
547
* iSCSI firmware init request 1
548
*/
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
614
};
615
616
/*
617
* iSCSI firmware init request 2
618
*/
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];
629
};
630
631
/*
632
* Initial iSCSI connection offload request 1
633
*/
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];
647
};
648
649
/*
650
* iSCSI Page Table Entry (PTE)
651
*/
652
struct
iscsi_pte
{
653
u32
hi
;
654
u32
lo
;
655
};
656
657
/*
658
* Initial iSCSI connection offload request 2
659
*/
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
;
673
};
674
675
676
/*
677
* Initial iSCSI connection offload request 3
678
*/
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];
689
};
690
691
692
/*
693
* iSCSI connection update request
694
*/
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
;
744
};
745
746
/*
747
* iSCSI destroy connection request
748
*/
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];
759
};
760
761
/*
762
* iSCSI KWQ WQE
763
*/
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
;
771
};
772
773
/*
774
* iSCSI Login SQ WQE
775
*/
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
883
};
884
885
886
/*
887
* iSCSI Login CQE
888
*/
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
;
969
};
970
971
972
/*
973
* iSCSI Logout SQ WQE
974
*/
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
1033
};
1034
1035
1036
/*
1037
* iSCSI Logout CQE
1038
*/
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
;
1089
};
1090
1091
1092
/*
1093
* iSCSI Nop-In CQE
1094
*/
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
;
1138
};
1139
1140
1141
/*
1142
* iSCSI NOP-OUT SQ WQE
1143
*/
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
1223
};
1224
1225
/*
1226
* iSCSI Reject CQE
1227
*/
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
;
1255
};
1256
1257
/*
1258
* bnx2i iSCSI TMF SQ WQE
1259
*/
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
1314
};
1315
1316
/*
1317
* iSCSI Text SQ WQE
1318
*/
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
1382
};
1383
1384
/*
1385
* iSCSI SQ WQE
1386
*/
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
;
1395
};
1396
1397
1398
/*
1399
* iSCSI TMF CQE
1400
*/
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
;
1443
};
1444
1445
/*
1446
* iSCSI Text CQE
1447
*/
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
;
1503
};
1504
1505
/*
1506
* iSCSI CQE
1507
*/
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
;
1518
};
1519
1520
#endif
/* __57XX_ISCSI_HSI_LINUX_LE__ */
Generated on Thu Jan 10 2013 14:20:00 for Linux Kernel by
1.8.2