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