linux/drivers/scsi/bnx2i/57xx_iscsi_hsi.h
<<
>>
Prefs
   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 */
  20struct 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 */
  69struct 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 */
 108struct 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 */
 150struct 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 */
 194struct 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 */
 271struct 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 */
 284struct 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 */
 297union 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 */
 305struct 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 */
 381struct 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 */
 460struct 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 */
 486union iscsi_kcqe_params {
 487        u32 reserved0[4];
 488};
 489
 490/*
 491 * iSCSI KCQ CQE
 492 */
 493struct 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 */
 526struct 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 */
 551struct 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 */
 625struct 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 */
 640struct 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 */
 658struct iscsi_pte {
 659        u32 hi;
 660        u32 lo;
 661};
 662
 663/*
 664 * Initial iSCSI connection offload request 2
 665 */
 666struct 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 */
 685struct 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 */
 701struct 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 */
 755struct 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 */
 770union 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 */
 782struct 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 */
 895struct 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 */
 981struct 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 */
1045struct 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 */
1101struct 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 */
1150struct 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 */
1234struct 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 */
1266struct 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 */
1325struct 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 */
1393union 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 */
1407struct 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 */
1454struct 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 */
1514union 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