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