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