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