File Index
Files and directories
Sign in
FILE

57xx_iscsi_hsi.h

File preview with syntax highlighting.

linux-6.19.14/drivers/scsi/bnx2i/57xx_iscsi_hsi.h C
   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__ */
~/ Read-only file preview.