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 710cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0xF<<4) 711cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 4 712cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 713cf4e6363SMichael Chan u8 conn_flags; 714cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST (0x1<<0) 715cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_HEADER_DIGEST_SHIFT 0 716cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST (0x1<<1) 717cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_DATA_DIGEST_SHIFT 1 718cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T (0x1<<2) 719cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_INITIAL_R2T_SHIFT 2 720cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA (0x1<<3) 721cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_IMMEDIATE_DATA_SHIFT 3 722cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_RESERVED1 (0xF<<4) 723cf4e6363SMichael Chan #define ISCSI_KWQE_CONN_UPDATE_RESERVED1_SHIFT 4 724cf4e6363SMichael Chan u8 reserved2; 725cf4e6363SMichael Chan u8 max_outstanding_r2ts; 726cf4e6363SMichael Chan u8 session_error_recovery_level; 727cf4e6363SMichael Chan #endif 728cf4e6363SMichael Chan u32 context_id; 729cf4e6363SMichael Chan u32 max_send_pdu_length; 730cf4e6363SMichael Chan u32 max_recv_pdu_length; 731cf4e6363SMichael Chan u32 first_burst_length; 732cf4e6363SMichael Chan u32 max_burst_length; 733cf4e6363SMichael Chan u32 exp_stat_sn; 734cf4e6363SMichael Chan }; 735cf4e6363SMichael Chan 736cf4e6363SMichael Chan /* 737cf4e6363SMichael Chan * iSCSI destroy connection request 738cf4e6363SMichael Chan */ 739cf4e6363SMichael Chan struct iscsi_kwqe_conn_destroy { 740cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 741cf4e6363SMichael Chan struct iscsi_kwqe_header hdr; 742cf4e6363SMichael Chan u16 reserved0; 743cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 744cf4e6363SMichael Chan u16 reserved0; 745cf4e6363SMichael Chan struct iscsi_kwqe_header hdr; 746cf4e6363SMichael Chan #endif 747cf4e6363SMichael Chan u32 context_id; 748cf4e6363SMichael Chan u32 reserved1[6]; 749cf4e6363SMichael Chan }; 750cf4e6363SMichael Chan 751cf4e6363SMichael Chan /* 752cf4e6363SMichael Chan * iSCSI KWQ WQE 753cf4e6363SMichael Chan */ 754cf4e6363SMichael Chan union iscsi_kwqe { 755cf4e6363SMichael Chan struct iscsi_kwqe_init1 init1; 756cf4e6363SMichael Chan struct iscsi_kwqe_init2 init2; 757cf4e6363SMichael Chan struct iscsi_kwqe_conn_offload1 conn_offload1; 758cf4e6363SMichael Chan struct iscsi_kwqe_conn_offload2 conn_offload2; 759cf4e6363SMichael Chan struct iscsi_kwqe_conn_update conn_update; 760cf4e6363SMichael Chan struct iscsi_kwqe_conn_destroy conn_destroy; 761cf4e6363SMichael Chan }; 762cf4e6363SMichael Chan 763cf4e6363SMichael Chan /* 764cf4e6363SMichael Chan * iSCSI Login SQ WQE 765cf4e6363SMichael Chan */ 766cf4e6363SMichael Chan struct bnx2i_login_request { 767cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 768cf4e6363SMichael Chan u8 op_code; 769cf4e6363SMichael Chan u8 op_attr; 770cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0) 771cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0 772cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2) 773cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2 774cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4) 775cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4 776cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6) 777cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6 778cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7) 779cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7 780cf4e6363SMichael Chan u8 version_max; 781cf4e6363SMichael Chan u8 version_min; 782cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 783cf4e6363SMichael Chan u8 version_min; 784cf4e6363SMichael Chan u8 version_max; 785cf4e6363SMichael Chan u8 op_attr; 786cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NEXT_STAGE (0x3<<0) 787cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NEXT_STAGE_SHIFT 0 788cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE (0x3<<2) 789cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CURRENT_STAGE_SHIFT 2 790cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED0 (0x3<<4) 791cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED0_SHIFT 4 792cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CONT (0x1<<6) 793cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_CONT_SHIFT 6 794cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TRANSIT (0x1<<7) 795cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TRANSIT_SHIFT 7 796cf4e6363SMichael Chan u8 op_code; 797cf4e6363SMichael Chan #endif 798cf4e6363SMichael Chan u32 data_length; 799cf4e6363SMichael Chan u32 isid_lo; 800cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 801cf4e6363SMichael Chan u16 isid_hi; 802cf4e6363SMichael Chan u16 tsih; 803cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 804cf4e6363SMichael Chan u16 tsih; 805cf4e6363SMichael Chan u16 isid_hi; 806cf4e6363SMichael Chan #endif 807cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 808cf4e6363SMichael Chan u16 reserved2; 809cf4e6363SMichael Chan u16 itt; 810cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0) 811cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0 812cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14) 813cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14 814cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 815cf4e6363SMichael Chan u16 itt; 816cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_INDEX (0x3FFF<<0) 817cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_INDEX_SHIFT 0 818cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TYPE (0x3<<14) 819cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14 820cf4e6363SMichael Chan u16 reserved2; 821cf4e6363SMichael Chan #endif 822cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 823cf4e6363SMichael Chan u16 cid; 824cf4e6363SMichael Chan u16 reserved3; 825cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 826cf4e6363SMichael Chan u16 reserved3; 827cf4e6363SMichael Chan u16 cid; 828cf4e6363SMichael Chan #endif 829cf4e6363SMichael Chan u32 cmd_sn; 830cf4e6363SMichael Chan u32 exp_stat_sn; 831cf4e6363SMichael Chan u32 reserved4; 832cf4e6363SMichael Chan u32 resp_bd_list_addr_lo; 833cf4e6363SMichael Chan u32 resp_bd_list_addr_hi; 834cf4e6363SMichael Chan u32 resp_buffer; 835cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0) 836cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0 837cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS (0xFF<<24) 838cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_NUM_RESP_BDS_SHIFT 24 839cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 840cf4e6363SMichael Chan u16 reserved8; 841cf4e6363SMichael Chan u8 reserved7; 842cf4e6363SMichael Chan u8 flags; 843cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0) 844cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0 845cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2) 846cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2 847cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3) 848cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3 849cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 850cf4e6363SMichael Chan u8 flags; 851cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED5 (0x3<<0) 852cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED5_SHIFT 0 853cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN (0x1<<2) 854cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_UPDATE_EXP_STAT_SN_SHIFT 2 855cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED6 (0x1F<<3) 856cf4e6363SMichael Chan #define ISCSI_LOGIN_REQUEST_RESERVED6_SHIFT 3 857cf4e6363SMichael Chan u8 reserved7; 858cf4e6363SMichael Chan u16 reserved8; 859cf4e6363SMichael Chan #endif 860cf4e6363SMichael Chan u32 bd_list_addr_lo; 861cf4e6363SMichael Chan u32 bd_list_addr_hi; 862cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 863cf4e6363SMichael Chan u8 cq_index; 864cf4e6363SMichael Chan u8 reserved10; 865cf4e6363SMichael Chan u8 reserved9; 866cf4e6363SMichael Chan u8 num_bds; 867cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 868cf4e6363SMichael Chan u8 num_bds; 869cf4e6363SMichael Chan u8 reserved9; 870cf4e6363SMichael Chan u8 reserved10; 871cf4e6363SMichael Chan u8 cq_index; 872cf4e6363SMichael Chan #endif 873cf4e6363SMichael Chan }; 874cf4e6363SMichael Chan 875cf4e6363SMichael Chan 876cf4e6363SMichael Chan /* 877cf4e6363SMichael Chan * iSCSI Login CQE 878cf4e6363SMichael Chan */ 879cf4e6363SMichael Chan struct bnx2i_login_response { 880cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 881cf4e6363SMichael Chan u8 op_code; 882cf4e6363SMichael Chan u8 response_flags; 883cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0) 884cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0 885cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2) 886cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2 887cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4) 888cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4 889cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6) 890cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6 891cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7) 892cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7 893cf4e6363SMichael Chan u8 version_max; 894cf4e6363SMichael Chan u8 version_active; 895cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 896cf4e6363SMichael Chan u8 version_active; 897cf4e6363SMichael Chan u8 version_max; 898cf4e6363SMichael Chan u8 response_flags; 899cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE (0x3<<0) 900cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_NEXT_STAGE_SHIFT 0 901cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE (0x3<<2) 902cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CURRENT_STAGE_SHIFT 2 903cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_RESERVED0 (0x3<<4) 904cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_RESERVED0_SHIFT 4 905cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CONT (0x1<<6) 906cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_CONT_SHIFT 6 907cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TRANSIT (0x1<<7) 908cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TRANSIT_SHIFT 7 909cf4e6363SMichael Chan u8 op_code; 910cf4e6363SMichael Chan #endif 911cf4e6363SMichael Chan u32 data_length; 912cf4e6363SMichael Chan u32 exp_cmd_sn; 913cf4e6363SMichael Chan u32 max_cmd_sn; 914cf4e6363SMichael Chan u32 reserved1[2]; 915cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 916cf4e6363SMichael Chan u16 reserved3; 917cf4e6363SMichael Chan u8 err_code; 918cf4e6363SMichael Chan u8 reserved2; 919cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 920cf4e6363SMichael Chan u8 reserved2; 921cf4e6363SMichael Chan u8 err_code; 922cf4e6363SMichael Chan u16 reserved3; 923cf4e6363SMichael Chan #endif 924cf4e6363SMichael Chan u32 stat_sn; 925cf4e6363SMichael Chan u32 isid_lo; 926cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 927cf4e6363SMichael Chan u16 isid_hi; 928cf4e6363SMichael Chan u16 tsih; 929cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 930cf4e6363SMichael Chan u16 tsih; 931cf4e6363SMichael Chan u16 isid_hi; 932cf4e6363SMichael Chan #endif 933cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 934cf4e6363SMichael Chan u8 status_class; 935cf4e6363SMichael Chan u8 status_detail; 936cf4e6363SMichael Chan u16 reserved4; 937cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 938cf4e6363SMichael Chan u16 reserved4; 939cf4e6363SMichael Chan u8 status_detail; 940cf4e6363SMichael Chan u8 status_class; 941cf4e6363SMichael Chan #endif 942cf4e6363SMichael Chan u32 reserved5[3]; 943cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 944cf4e6363SMichael Chan u16 reserved6; 945cf4e6363SMichael Chan u16 itt; 946cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0) 947cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0 948cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14) 949cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14 950cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 951cf4e6363SMichael Chan u16 itt; 952cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_INDEX (0x3FFF<<0) 953cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_INDEX_SHIFT 0 954cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TYPE (0x3<<14) 955cf4e6363SMichael Chan #define ISCSI_LOGIN_RESPONSE_TYPE_SHIFT 14 956cf4e6363SMichael Chan u16 reserved6; 957cf4e6363SMichael Chan #endif 958cf4e6363SMichael Chan u32 cq_req_sn; 959cf4e6363SMichael Chan }; 960cf4e6363SMichael Chan 961cf4e6363SMichael Chan 962cf4e6363SMichael Chan /* 963cf4e6363SMichael Chan * iSCSI Logout SQ WQE 964cf4e6363SMichael Chan */ 965cf4e6363SMichael Chan struct bnx2i_logout_request { 966cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 967cf4e6363SMichael Chan u8 op_code; 968cf4e6363SMichael Chan u8 op_attr; 969cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0) 970cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0 971cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7) 972cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7 973cf4e6363SMichael Chan u16 reserved0; 974cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 975cf4e6363SMichael Chan u16 reserved0; 976cf4e6363SMichael Chan u8 op_attr; 977cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_REASON (0x7F<<0) 978cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_REASON_SHIFT 0 979cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE (0x1<<7) 980cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_ALWAYS_ONE_SHIFT 7 981cf4e6363SMichael Chan u8 op_code; 982cf4e6363SMichael Chan #endif 983cf4e6363SMichael Chan u32 data_length; 984cf4e6363SMichael Chan u32 reserved1[2]; 985cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 986cf4e6363SMichael Chan u16 reserved2; 987cf4e6363SMichael Chan u16 itt; 988cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0) 989cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0 990cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14) 991cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14 992cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 993cf4e6363SMichael Chan u16 itt; 994cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_INDEX (0x3FFF<<0) 995cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_INDEX_SHIFT 0 996cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_TYPE (0x3<<14) 997cf4e6363SMichael Chan #define ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14 998cf4e6363SMichael Chan u16 reserved2; 999cf4e6363SMichael Chan #endif 1000cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1001cf4e6363SMichael Chan u16 cid; 1002cf4e6363SMichael Chan u16 reserved3; 1003cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1004cf4e6363SMichael Chan u16 reserved3; 1005cf4e6363SMichael Chan u16 cid; 1006cf4e6363SMichael Chan #endif 1007cf4e6363SMichael Chan u32 cmd_sn; 1008cf4e6363SMichael Chan u32 reserved4[5]; 1009cf4e6363SMichael Chan u32 zero_fill; 1010cf4e6363SMichael Chan u32 bd_list_addr_lo; 1011cf4e6363SMichael Chan u32 bd_list_addr_hi; 1012cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1013cf4e6363SMichael Chan u8 cq_index; 1014cf4e6363SMichael Chan u8 reserved6; 1015cf4e6363SMichael Chan u8 reserved5; 1016cf4e6363SMichael Chan u8 num_bds; 1017cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1018cf4e6363SMichael Chan u8 num_bds; 1019cf4e6363SMichael Chan u8 reserved5; 1020cf4e6363SMichael Chan u8 reserved6; 1021cf4e6363SMichael Chan u8 cq_index; 1022cf4e6363SMichael Chan #endif 1023cf4e6363SMichael Chan }; 1024cf4e6363SMichael Chan 1025cf4e6363SMichael Chan 1026cf4e6363SMichael Chan /* 1027cf4e6363SMichael Chan * iSCSI Logout CQE 1028cf4e6363SMichael Chan */ 1029cf4e6363SMichael Chan struct bnx2i_logout_response { 1030cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1031cf4e6363SMichael Chan u8 op_code; 1032cf4e6363SMichael Chan u8 reserved1; 1033cf4e6363SMichael Chan u8 response; 1034cf4e6363SMichael Chan u8 reserved0; 1035cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1036cf4e6363SMichael Chan u8 reserved0; 1037cf4e6363SMichael Chan u8 response; 1038cf4e6363SMichael Chan u8 reserved1; 1039cf4e6363SMichael Chan u8 op_code; 1040cf4e6363SMichael Chan #endif 1041cf4e6363SMichael Chan u32 reserved2; 1042cf4e6363SMichael Chan u32 exp_cmd_sn; 1043cf4e6363SMichael Chan u32 max_cmd_sn; 1044cf4e6363SMichael Chan u32 reserved3[2]; 1045cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1046cf4e6363SMichael Chan u16 reserved5; 1047cf4e6363SMichael Chan u8 err_code; 1048cf4e6363SMichael Chan u8 reserved4; 1049cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1050cf4e6363SMichael Chan u8 reserved4; 1051cf4e6363SMichael Chan u8 err_code; 1052cf4e6363SMichael Chan u16 reserved5; 1053cf4e6363SMichael Chan #endif 1054cf4e6363SMichael Chan u32 reserved6[3]; 1055cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1056cf4e6363SMichael Chan u16 time_to_wait; 1057cf4e6363SMichael Chan u16 time_to_retain; 1058cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1059cf4e6363SMichael Chan u16 time_to_retain; 1060cf4e6363SMichael Chan u16 time_to_wait; 1061cf4e6363SMichael Chan #endif 1062cf4e6363SMichael Chan u32 reserved7[3]; 1063cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1064cf4e6363SMichael Chan u16 reserved8; 1065cf4e6363SMichael Chan u16 itt; 1066cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0) 1067cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0 1068cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14) 1069cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14 1070cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1071cf4e6363SMichael Chan u16 itt; 1072cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_INDEX (0x3FFF<<0) 1073cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_INDEX_SHIFT 0 1074cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_TYPE (0x3<<14) 1075cf4e6363SMichael Chan #define ISCSI_LOGOUT_RESPONSE_TYPE_SHIFT 14 1076cf4e6363SMichael Chan u16 reserved8; 1077cf4e6363SMichael Chan #endif 1078cf4e6363SMichael Chan u32 cq_req_sn; 1079cf4e6363SMichael Chan }; 1080cf4e6363SMichael Chan 1081cf4e6363SMichael Chan 1082cf4e6363SMichael Chan /* 1083cf4e6363SMichael Chan * iSCSI Nop-In CQE 1084cf4e6363SMichael Chan */ 1085cf4e6363SMichael Chan struct bnx2i_nop_in_msg { 1086cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1087cf4e6363SMichael Chan u8 op_code; 1088cf4e6363SMichael Chan u8 reserved1; 1089cf4e6363SMichael Chan u16 reserved0; 1090cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1091cf4e6363SMichael Chan u16 reserved0; 1092cf4e6363SMichael Chan u8 reserved1; 1093cf4e6363SMichael Chan u8 op_code; 1094cf4e6363SMichael Chan #endif 1095cf4e6363SMichael Chan u32 data_length; 1096cf4e6363SMichael Chan u32 exp_cmd_sn; 1097cf4e6363SMichael Chan u32 max_cmd_sn; 1098cf4e6363SMichael Chan u32 ttt; 1099cf4e6363SMichael Chan u32 reserved2; 1100cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1101cf4e6363SMichael Chan u16 reserved4; 1102cf4e6363SMichael Chan u8 err_code; 1103cf4e6363SMichael Chan u8 reserved3; 1104cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1105cf4e6363SMichael Chan u8 reserved3; 1106cf4e6363SMichael Chan u8 err_code; 1107cf4e6363SMichael Chan u16 reserved4; 1108cf4e6363SMichael Chan #endif 1109cf4e6363SMichael Chan u32 reserved5; 1110cf4e6363SMichael Chan u32 lun[2]; 1111cf4e6363SMichael Chan u32 reserved6[4]; 1112cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1113cf4e6363SMichael Chan u16 reserved7; 1114cf4e6363SMichael Chan u16 itt; 1115cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0) 1116cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0 1117cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14) 1118cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14 1119cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1120cf4e6363SMichael Chan u16 itt; 1121cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_INDEX (0x3FFF<<0) 1122cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_INDEX_SHIFT 0 1123cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_TYPE (0x3<<14) 1124cf4e6363SMichael Chan #define ISCSI_NOP_IN_MSG_TYPE_SHIFT 14 1125cf4e6363SMichael Chan u16 reserved7; 1126cf4e6363SMichael Chan #endif 1127cf4e6363SMichael Chan u32 cq_req_sn; 1128cf4e6363SMichael Chan }; 1129cf4e6363SMichael Chan 1130cf4e6363SMichael Chan 1131cf4e6363SMichael Chan /* 1132cf4e6363SMichael Chan * iSCSI NOP-OUT SQ WQE 1133cf4e6363SMichael Chan */ 1134cf4e6363SMichael Chan struct bnx2i_nop_out_request { 1135cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1136cf4e6363SMichael Chan u8 op_code; 1137cf4e6363SMichael Chan u8 op_attr; 1138cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0) 1139cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0 1140cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7) 1141cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7 1142cf4e6363SMichael Chan u16 reserved0; 1143cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1144cf4e6363SMichael Chan u16 reserved0; 1145cf4e6363SMichael Chan u8 op_attr; 1146cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED1 (0x7F<<0) 1147cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED1_SHIFT 0 1148cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE (0x1<<7) 1149cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ALWAYS_ONE_SHIFT 7 1150cf4e6363SMichael Chan u8 op_code; 1151cf4e6363SMichael Chan #endif 1152cf4e6363SMichael Chan u32 data_length; 1153cf4e6363SMichael Chan u32 lun[2]; 1154cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1155cf4e6363SMichael Chan u16 reserved2; 1156cf4e6363SMichael Chan u16 itt; 1157cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0) 1158cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0 1159cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14) 1160cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14 1161cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1162cf4e6363SMichael Chan u16 itt; 1163cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_INDEX (0x3FFF<<0) 1164cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_INDEX_SHIFT 0 1165cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_TYPE (0x3<<14) 1166cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_TYPE_SHIFT 14 1167cf4e6363SMichael Chan u16 reserved2; 1168cf4e6363SMichael Chan #endif 1169cf4e6363SMichael Chan u32 ttt; 1170cf4e6363SMichael Chan u32 cmd_sn; 1171cf4e6363SMichael Chan u32 reserved3[2]; 1172cf4e6363SMichael Chan u32 resp_bd_list_addr_lo; 1173cf4e6363SMichael Chan u32 resp_bd_list_addr_hi; 1174cf4e6363SMichael Chan u32 resp_buffer; 1175cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0) 1176cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0 1177cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS (0xFF<<24) 1178cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_NUM_RESP_BDS_SHIFT 24 1179cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1180cf4e6363SMichael Chan u16 reserved7; 1181cf4e6363SMichael Chan u8 reserved6; 1182cf4e6363SMichael Chan u8 flags; 1183cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0) 1184cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0 1185cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1) 1186cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1 1187cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2) 1188cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2 1189cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1190cf4e6363SMichael Chan u8 flags; 1191cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED4 (0x1<<0) 1192cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_RESERVED4_SHIFT 0 1193cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION (0x1<<1) 1194cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION_SHIFT 1 1195cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL (0x3F<<2) 1196cf4e6363SMichael Chan #define ISCSI_NOP_OUT_REQUEST_ZERO_FILL_SHIFT 2 1197cf4e6363SMichael Chan u8 reserved6; 1198cf4e6363SMichael Chan u16 reserved7; 1199cf4e6363SMichael Chan #endif 1200cf4e6363SMichael Chan u32 bd_list_addr_lo; 1201cf4e6363SMichael Chan u32 bd_list_addr_hi; 1202cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1203cf4e6363SMichael Chan u8 cq_index; 1204cf4e6363SMichael Chan u8 reserved9; 1205cf4e6363SMichael Chan u8 reserved8; 1206cf4e6363SMichael Chan u8 num_bds; 1207cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1208cf4e6363SMichael Chan u8 num_bds; 1209cf4e6363SMichael Chan u8 reserved8; 1210cf4e6363SMichael Chan u8 reserved9; 1211cf4e6363SMichael Chan u8 cq_index; 1212cf4e6363SMichael Chan #endif 1213cf4e6363SMichael Chan }; 1214cf4e6363SMichael Chan 1215cf4e6363SMichael Chan /* 1216cf4e6363SMichael Chan * iSCSI Reject CQE 1217cf4e6363SMichael Chan */ 1218cf4e6363SMichael Chan struct bnx2i_reject_msg { 1219cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1220cf4e6363SMichael Chan u8 op_code; 1221cf4e6363SMichael Chan u8 reserved1; 1222cf4e6363SMichael Chan u8 reason; 1223cf4e6363SMichael Chan u8 reserved0; 1224cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1225cf4e6363SMichael Chan u8 reserved0; 1226cf4e6363SMichael Chan u8 reason; 1227cf4e6363SMichael Chan u8 reserved1; 1228cf4e6363SMichael Chan u8 op_code; 1229cf4e6363SMichael Chan #endif 1230cf4e6363SMichael Chan u32 data_length; 1231cf4e6363SMichael Chan u32 exp_cmd_sn; 1232cf4e6363SMichael Chan u32 max_cmd_sn; 1233cf4e6363SMichael Chan u32 reserved2[2]; 1234cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1235cf4e6363SMichael Chan u16 reserved4; 1236cf4e6363SMichael Chan u8 err_code; 1237cf4e6363SMichael Chan u8 reserved3; 1238cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1239cf4e6363SMichael Chan u8 reserved3; 1240cf4e6363SMichael Chan u8 err_code; 1241cf4e6363SMichael Chan u16 reserved4; 1242cf4e6363SMichael Chan #endif 1243cf4e6363SMichael Chan u32 reserved5[8]; 1244cf4e6363SMichael Chan u32 cq_req_sn; 1245cf4e6363SMichael Chan }; 1246cf4e6363SMichael Chan 1247cf4e6363SMichael Chan /* 1248cf4e6363SMichael Chan * bnx2i iSCSI TMF SQ WQE 1249cf4e6363SMichael Chan */ 1250cf4e6363SMichael Chan struct bnx2i_tmf_request { 1251cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1252cf4e6363SMichael Chan u8 op_code; 1253cf4e6363SMichael Chan u8 op_attr; 1254cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0) 1255cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0 1256cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7) 1257cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7 1258cf4e6363SMichael Chan u16 reserved0; 1259cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1260cf4e6363SMichael Chan u16 reserved0; 1261cf4e6363SMichael Chan u8 op_attr; 1262cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_FUNCTION (0x7F<<0) 1263cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_FUNCTION_SHIFT 0 1264cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_ALWAYS_ONE (0x1<<7) 1265cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_ALWAYS_ONE_SHIFT 7 1266cf4e6363SMichael Chan u8 op_code; 1267cf4e6363SMichael Chan #endif 1268cf4e6363SMichael Chan u32 data_length; 1269cf4e6363SMichael Chan u32 lun[2]; 1270cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1271cf4e6363SMichael Chan u16 reserved1; 1272cf4e6363SMichael Chan u16 itt; 1273cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0) 1274cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0 1275cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_TYPE (0x3<<14) 1276cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14 1277cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1278cf4e6363SMichael Chan u16 itt; 1279cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_INDEX (0x3FFF<<0) 1280cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_INDEX_SHIFT 0 1281cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_TYPE (0x3<<14) 1282cf4e6363SMichael Chan #define ISCSI_TMF_REQUEST_TYPE_SHIFT 14 1283cf4e6363SMichael Chan u16 reserved1; 1284cf4e6363SMichael Chan #endif 1285cf4e6363SMichael Chan u32 ref_itt; 1286cf4e6363SMichael Chan u32 cmd_sn; 1287cf4e6363SMichael Chan u32 reserved2; 1288cf4e6363SMichael Chan u32 ref_cmd_sn; 1289cf4e6363SMichael Chan u32 reserved3[3]; 1290cf4e6363SMichael Chan u32 zero_fill; 1291cf4e6363SMichael Chan u32 bd_list_addr_lo; 1292cf4e6363SMichael Chan u32 bd_list_addr_hi; 1293cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1294cf4e6363SMichael Chan u8 cq_index; 1295cf4e6363SMichael Chan u8 reserved5; 1296cf4e6363SMichael Chan u8 reserved4; 1297cf4e6363SMichael Chan u8 num_bds; 1298cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1299cf4e6363SMichael Chan u8 num_bds; 1300cf4e6363SMichael Chan u8 reserved4; 1301cf4e6363SMichael Chan u8 reserved5; 1302cf4e6363SMichael Chan u8 cq_index; 1303cf4e6363SMichael Chan #endif 1304cf4e6363SMichael Chan }; 1305cf4e6363SMichael Chan 1306cf4e6363SMichael Chan /* 1307cf4e6363SMichael Chan * iSCSI Text SQ WQE 1308cf4e6363SMichael Chan */ 1309cf4e6363SMichael Chan struct bnx2i_text_request { 1310cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1311cf4e6363SMichael Chan u8 op_code; 1312cf4e6363SMichael Chan u8 op_attr; 1313cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0) 1314cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0 1315cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_CONT (0x1<<6) 1316cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_CONT_SHIFT 6 1317cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_FINAL (0x1<<7) 1318cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7 1319cf4e6363SMichael Chan u16 reserved0; 1320cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1321cf4e6363SMichael Chan u16 reserved0; 1322cf4e6363SMichael Chan u8 op_attr; 1323cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESERVED1 (0x3F<<0) 1324cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESERVED1_SHIFT 0 1325cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_CONT (0x1<<6) 1326cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_CONT_SHIFT 6 1327cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_FINAL (0x1<<7) 1328cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_FINAL_SHIFT 7 1329cf4e6363SMichael Chan u8 op_code; 1330cf4e6363SMichael Chan #endif 1331cf4e6363SMichael Chan u32 data_length; 1332cf4e6363SMichael Chan u32 lun[2]; 1333cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1334cf4e6363SMichael Chan u16 reserved3; 1335cf4e6363SMichael Chan u16 itt; 1336cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0) 1337cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0 1338cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14) 1339cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14 1340cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1341cf4e6363SMichael Chan u16 itt; 1342cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_INDEX (0x3FFF<<0) 1343cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_INDEX_SHIFT 0 1344cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_TYPE (0x3<<14) 1345cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_TYPE_SHIFT 14 1346cf4e6363SMichael Chan u16 reserved3; 1347cf4e6363SMichael Chan #endif 1348cf4e6363SMichael Chan u32 ttt; 1349cf4e6363SMichael Chan u32 cmd_sn; 1350cf4e6363SMichael Chan u32 reserved4[2]; 1351cf4e6363SMichael Chan u32 resp_bd_list_addr_lo; 1352cf4e6363SMichael Chan u32 resp_bd_list_addr_hi; 1353cf4e6363SMichael Chan u32 resp_buffer; 1354cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH (0xFFFFFF<<0) 1355cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0 1356cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS (0xFF<<24) 1357cf4e6363SMichael Chan #define ISCSI_TEXT_REQUEST_NUM_RESP_BDS_SHIFT 24 1358cf4e6363SMichael Chan u32 zero_fill; 1359cf4e6363SMichael Chan u32 bd_list_addr_lo; 1360cf4e6363SMichael Chan u32 bd_list_addr_hi; 1361cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1362cf4e6363SMichael Chan u8 cq_index; 1363cf4e6363SMichael Chan u8 reserved7; 1364cf4e6363SMichael Chan u8 reserved6; 1365cf4e6363SMichael Chan u8 num_bds; 1366cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1367cf4e6363SMichael Chan u8 num_bds; 1368cf4e6363SMichael Chan u8 reserved6; 1369cf4e6363SMichael Chan u8 reserved7; 1370cf4e6363SMichael Chan u8 cq_index; 1371cf4e6363SMichael Chan #endif 1372cf4e6363SMichael Chan }; 1373cf4e6363SMichael Chan 1374cf4e6363SMichael Chan /* 1375cf4e6363SMichael Chan * iSCSI SQ WQE 1376cf4e6363SMichael Chan */ 1377cf4e6363SMichael Chan union iscsi_request { 1378cf4e6363SMichael Chan struct bnx2i_cmd_request cmd; 1379cf4e6363SMichael Chan struct bnx2i_tmf_request tmf; 1380cf4e6363SMichael Chan struct bnx2i_nop_out_request nop_out; 1381cf4e6363SMichael Chan struct bnx2i_login_request login_req; 1382cf4e6363SMichael Chan struct bnx2i_text_request text; 1383cf4e6363SMichael Chan struct bnx2i_logout_request logout_req; 1384cf4e6363SMichael Chan struct bnx2i_cleanup_request cleanup; 1385cf4e6363SMichael Chan }; 1386cf4e6363SMichael Chan 1387cf4e6363SMichael Chan 1388cf4e6363SMichael Chan /* 1389cf4e6363SMichael Chan * iSCSI TMF CQE 1390cf4e6363SMichael Chan */ 1391cf4e6363SMichael Chan struct bnx2i_tmf_response { 1392cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1393cf4e6363SMichael Chan u8 op_code; 1394cf4e6363SMichael Chan u8 reserved1; 1395cf4e6363SMichael Chan u8 response; 1396cf4e6363SMichael Chan u8 reserved0; 1397cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1398cf4e6363SMichael Chan u8 reserved0; 1399cf4e6363SMichael Chan u8 response; 1400cf4e6363SMichael Chan u8 reserved1; 1401cf4e6363SMichael Chan u8 op_code; 1402cf4e6363SMichael Chan #endif 1403cf4e6363SMichael Chan u32 reserved2; 1404cf4e6363SMichael Chan u32 exp_cmd_sn; 1405cf4e6363SMichael Chan u32 max_cmd_sn; 1406cf4e6363SMichael Chan u32 reserved3[2]; 1407cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1408cf4e6363SMichael Chan u16 reserved5; 1409cf4e6363SMichael Chan u8 err_code; 1410cf4e6363SMichael Chan u8 reserved4; 1411cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1412cf4e6363SMichael Chan u8 reserved4; 1413cf4e6363SMichael Chan u8 err_code; 1414cf4e6363SMichael Chan u16 reserved5; 1415cf4e6363SMichael Chan #endif 1416cf4e6363SMichael Chan u32 reserved6[7]; 1417cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1418cf4e6363SMichael Chan u16 reserved7; 1419cf4e6363SMichael Chan u16 itt; 1420cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0) 1421cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0 1422cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14) 1423cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14 1424cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1425cf4e6363SMichael Chan u16 itt; 1426cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_INDEX (0x3FFF<<0) 1427cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_INDEX_SHIFT 0 1428cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_TYPE (0x3<<14) 1429cf4e6363SMichael Chan #define ISCSI_TMF_RESPONSE_TYPE_SHIFT 14 1430cf4e6363SMichael Chan u16 reserved7; 1431cf4e6363SMichael Chan #endif 1432cf4e6363SMichael Chan u32 cq_req_sn; 1433cf4e6363SMichael Chan }; 1434cf4e6363SMichael Chan 1435cf4e6363SMichael Chan /* 1436cf4e6363SMichael Chan * iSCSI Text CQE 1437cf4e6363SMichael Chan */ 1438cf4e6363SMichael Chan struct bnx2i_text_response { 1439cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1440cf4e6363SMichael Chan u8 op_code; 1441cf4e6363SMichael Chan u8 response_flags; 1442cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0) 1443cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0 1444cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_CONT (0x1<<6) 1445cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6 1446cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7) 1447cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7 1448cf4e6363SMichael Chan u16 reserved0; 1449cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1450cf4e6363SMichael Chan u16 reserved0; 1451cf4e6363SMichael Chan u8 response_flags; 1452cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_RESERVED1 (0x3F<<0) 1453cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_RESERVED1_SHIFT 0 1454cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_CONT (0x1<<6) 1455cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_CONT_SHIFT 6 1456cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_FINAL (0x1<<7) 1457cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_FINAL_SHIFT 7 1458cf4e6363SMichael Chan u8 op_code; 1459cf4e6363SMichael Chan #endif 1460cf4e6363SMichael Chan u32 data_length; 1461cf4e6363SMichael Chan u32 exp_cmd_sn; 1462cf4e6363SMichael Chan u32 max_cmd_sn; 1463cf4e6363SMichael Chan u32 ttt; 1464cf4e6363SMichael Chan u32 reserved2; 1465cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1466cf4e6363SMichael Chan u16 reserved4; 1467cf4e6363SMichael Chan u8 err_code; 1468cf4e6363SMichael Chan u8 reserved3; 1469cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1470cf4e6363SMichael Chan u8 reserved3; 1471cf4e6363SMichael Chan u8 err_code; 1472cf4e6363SMichael Chan u16 reserved4; 1473cf4e6363SMichael Chan #endif 1474cf4e6363SMichael Chan u32 reserved5; 1475cf4e6363SMichael Chan u32 lun[2]; 1476cf4e6363SMichael Chan u32 reserved6[4]; 1477cf4e6363SMichael Chan #if defined(__BIG_ENDIAN) 1478cf4e6363SMichael Chan u16 reserved7; 1479cf4e6363SMichael Chan u16 itt; 1480cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0) 1481cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0 1482cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14) 1483cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14 1484cf4e6363SMichael Chan #elif defined(__LITTLE_ENDIAN) 1485cf4e6363SMichael Chan u16 itt; 1486cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_INDEX (0x3FFF<<0) 1487cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_INDEX_SHIFT 0 1488cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_TYPE (0x3<<14) 1489cf4e6363SMichael Chan #define ISCSI_TEXT_RESPONSE_TYPE_SHIFT 14 1490cf4e6363SMichael Chan u16 reserved7; 1491cf4e6363SMichael Chan #endif 1492cf4e6363SMichael Chan u32 cq_req_sn; 1493cf4e6363SMichael Chan }; 1494cf4e6363SMichael Chan 1495cf4e6363SMichael Chan /* 1496cf4e6363SMichael Chan * iSCSI CQE 1497cf4e6363SMichael Chan */ 1498cf4e6363SMichael Chan union iscsi_response { 1499cf4e6363SMichael Chan struct bnx2i_cmd_response cmd; 1500cf4e6363SMichael Chan struct bnx2i_tmf_response tmf; 1501cf4e6363SMichael Chan struct bnx2i_login_response login_resp; 1502cf4e6363SMichael Chan struct bnx2i_text_response text; 1503cf4e6363SMichael Chan struct bnx2i_logout_response logout_resp; 1504cf4e6363SMichael Chan struct bnx2i_cleanup_response cleanup; 1505cf4e6363SMichael Chan struct bnx2i_reject_msg reject; 1506cf4e6363SMichael Chan struct bnx2i_async_msg async; 1507cf4e6363SMichael Chan struct bnx2i_nop_in_msg nop_in; 1508cf4e6363SMichael Chan }; 1509cf4e6363SMichael Chan 1510cf4e6363SMichael Chan #endif /* __57XX_ISCSI_HSI_LINUX_LE__ */ 1511