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