1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * QLogic iSCSI HBA Driver 4*4882a593Smuzhiyun * Copyright (c) 2003-2013 QLogic Corporation 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _QLA4X_FW_H 8*4882a593Smuzhiyun #define _QLA4X_FW_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define MAX_PRST_DEV_DB_ENTRIES 64 12*4882a593Smuzhiyun #define MIN_DISC_DEV_DB_ENTRY MAX_PRST_DEV_DB_ENTRIES 13*4882a593Smuzhiyun #define MAX_DEV_DB_ENTRIES 512 14*4882a593Smuzhiyun #define MAX_DEV_DB_ENTRIES_40XX 256 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /************************************************************************* 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * ISP 4010 I/O Register Set Structure and Definitions 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun *************************************************************************/ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct port_ctrl_stat_regs { 23*4882a593Smuzhiyun __le32 ext_hw_conf; /* 0x50 R/W */ 24*4882a593Smuzhiyun __le32 rsrvd0; /* 0x54 */ 25*4882a593Smuzhiyun __le32 port_ctrl; /* 0x58 */ 26*4882a593Smuzhiyun __le32 port_status; /* 0x5c */ 27*4882a593Smuzhiyun __le32 rsrvd1[32]; /* 0x60-0xdf */ 28*4882a593Smuzhiyun __le32 gp_out; /* 0xe0 */ 29*4882a593Smuzhiyun __le32 gp_in; /* 0xe4 */ 30*4882a593Smuzhiyun __le32 rsrvd2[5]; /* 0xe8-0xfb */ 31*4882a593Smuzhiyun __le32 port_err_status; /* 0xfc */ 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct host_mem_cfg_regs { 35*4882a593Smuzhiyun __le32 rsrvd0[12]; /* 0x50-0x79 */ 36*4882a593Smuzhiyun __le32 req_q_out; /* 0x80 */ 37*4882a593Smuzhiyun __le32 rsrvd1[31]; /* 0x84-0xFF */ 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* 41*4882a593Smuzhiyun * ISP 82xx I/O Register Set structure definitions. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun struct device_reg_82xx { 44*4882a593Smuzhiyun __le32 req_q_out; /* 0x0000 (R): Request Queue out-Pointer. */ 45*4882a593Smuzhiyun __le32 reserve1[63]; /* Request Queue out-Pointer. (64 * 4) */ 46*4882a593Smuzhiyun __le32 rsp_q_in; /* 0x0100 (R/W): Response Queue In-Pointer. */ 47*4882a593Smuzhiyun __le32 reserve2[63]; /* Response Queue In-Pointer. */ 48*4882a593Smuzhiyun __le32 rsp_q_out; /* 0x0200 (R/W): Response Queue Out-Pointer. */ 49*4882a593Smuzhiyun __le32 reserve3[63]; /* Response Queue Out-Pointer. */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun __le32 mailbox_in[8]; /* 0x0300 (R/W): Mail box In registers */ 52*4882a593Smuzhiyun __le32 reserve4[24]; 53*4882a593Smuzhiyun __le32 hint; /* 0x0380 (R/W): Host interrupt register */ 54*4882a593Smuzhiyun #define HINT_MBX_INT_PENDING BIT_0 55*4882a593Smuzhiyun __le32 reserve5[31]; 56*4882a593Smuzhiyun __le32 mailbox_out[8]; /* 0x0400 (R): Mail box Out registers */ 57*4882a593Smuzhiyun __le32 reserve6[56]; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun __le32 host_status; /* Offset 0x500 (R): host status */ 60*4882a593Smuzhiyun #define HSRX_RISC_MB_INT BIT_0 /* RISC to Host Mailbox interrupt */ 61*4882a593Smuzhiyun #define HSRX_RISC_IOCB_INT BIT_1 /* RISC to Host IOCB interrupt */ 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun __le32 host_int; /* Offset 0x0504 (R/W): Interrupt status. */ 64*4882a593Smuzhiyun #define ISRX_82XX_RISC_INT BIT_0 /* RISC interrupt. */ 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* ISP 83xx I/O Register Set structure */ 68*4882a593Smuzhiyun struct device_reg_83xx { 69*4882a593Smuzhiyun __le32 mailbox_in[16]; /* 0x0000 */ 70*4882a593Smuzhiyun __le32 reserve1[496]; /* 0x0040 */ 71*4882a593Smuzhiyun __le32 mailbox_out[16]; /* 0x0800 */ 72*4882a593Smuzhiyun __le32 reserve2[496]; 73*4882a593Smuzhiyun __le32 mbox_int; /* 0x1000 */ 74*4882a593Smuzhiyun __le32 reserve3[63]; 75*4882a593Smuzhiyun __le32 req_q_out; /* 0x1100 */ 76*4882a593Smuzhiyun __le32 reserve4[63]; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun __le32 rsp_q_in; /* 0x1200 */ 79*4882a593Smuzhiyun __le32 reserve5[1919]; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun __le32 req_q_in; /* 0x3000 */ 82*4882a593Smuzhiyun __le32 reserve6[3]; 83*4882a593Smuzhiyun __le32 iocb_int_mask; /* 0x3010 */ 84*4882a593Smuzhiyun __le32 reserve7[3]; 85*4882a593Smuzhiyun __le32 rsp_q_out; /* 0x3020 */ 86*4882a593Smuzhiyun __le32 reserve8[3]; 87*4882a593Smuzhiyun __le32 anonymousbuff; /* 0x3030 */ 88*4882a593Smuzhiyun __le32 mb_int_mask; /* 0x3034 */ 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun __le32 host_intr; /* 0x3038 - Host Interrupt Register */ 91*4882a593Smuzhiyun __le32 risc_intr; /* 0x303C - RISC Interrupt Register */ 92*4882a593Smuzhiyun __le32 reserve9[544]; 93*4882a593Smuzhiyun __le32 leg_int_ptr; /* 0x38C0 - Legacy Interrupt Pointer Register */ 94*4882a593Smuzhiyun __le32 leg_int_trig; /* 0x38C4 - Legacy Interrupt Trigger Control */ 95*4882a593Smuzhiyun __le32 leg_int_mask; /* 0x38C8 - Legacy Interrupt Mask Register */ 96*4882a593Smuzhiyun }; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #define INT_ENABLE_FW_MB (1 << 2) 99*4882a593Smuzhiyun #define INT_MASK_FW_MB (1 << 2) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* remote register set (access via PCI memory read/write) */ 102*4882a593Smuzhiyun struct isp_reg { 103*4882a593Smuzhiyun #define MBOX_REG_COUNT 8 104*4882a593Smuzhiyun __le32 mailbox[MBOX_REG_COUNT]; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun __le32 flash_address; /* 0x20 */ 107*4882a593Smuzhiyun __le32 flash_data; 108*4882a593Smuzhiyun __le32 ctrl_status; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun union { 111*4882a593Smuzhiyun struct { 112*4882a593Smuzhiyun __le32 nvram; 113*4882a593Smuzhiyun __le32 reserved1[2]; /* 0x30 */ 114*4882a593Smuzhiyun } __attribute__ ((packed)) isp4010; 115*4882a593Smuzhiyun struct { 116*4882a593Smuzhiyun __le32 intr_mask; 117*4882a593Smuzhiyun __le32 nvram; /* 0x30 */ 118*4882a593Smuzhiyun __le32 semaphore; 119*4882a593Smuzhiyun } __attribute__ ((packed)) isp4022; 120*4882a593Smuzhiyun } u1; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun __le32 req_q_in; /* SCSI Request Queue Producer Index */ 123*4882a593Smuzhiyun __le32 rsp_q_out; /* SCSI Completion Queue Consumer Index */ 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun __le32 reserved2[4]; /* 0x40 */ 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun union { 128*4882a593Smuzhiyun struct { 129*4882a593Smuzhiyun __le32 ext_hw_conf; /* 0x50 */ 130*4882a593Smuzhiyun __le32 flow_ctrl; 131*4882a593Smuzhiyun __le32 port_ctrl; 132*4882a593Smuzhiyun __le32 port_status; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun __le32 reserved3[8]; /* 0x60 */ 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun __le32 req_q_out; /* 0x80 */ 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun __le32 reserved4[23]; /* 0x84 */ 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun __le32 gp_out; /* 0xe0 */ 141*4882a593Smuzhiyun __le32 gp_in; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun __le32 reserved5[5]; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun __le32 port_err_status; /* 0xfc */ 146*4882a593Smuzhiyun } __attribute__ ((packed)) isp4010; 147*4882a593Smuzhiyun struct { 148*4882a593Smuzhiyun union { 149*4882a593Smuzhiyun struct port_ctrl_stat_regs p0; 150*4882a593Smuzhiyun struct host_mem_cfg_regs p1; 151*4882a593Smuzhiyun }; 152*4882a593Smuzhiyun } __attribute__ ((packed)) isp4022; 153*4882a593Smuzhiyun } u2; 154*4882a593Smuzhiyun }; /* 256 x100 */ 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun /* Semaphore Defines for 4010 */ 158*4882a593Smuzhiyun #define QL4010_DRVR_SEM_BITS 0x00000030 159*4882a593Smuzhiyun #define QL4010_GPIO_SEM_BITS 0x000000c0 160*4882a593Smuzhiyun #define QL4010_SDRAM_SEM_BITS 0x00000300 161*4882a593Smuzhiyun #define QL4010_PHY_SEM_BITS 0x00000c00 162*4882a593Smuzhiyun #define QL4010_NVRAM_SEM_BITS 0x00003000 163*4882a593Smuzhiyun #define QL4010_FLASH_SEM_BITS 0x0000c000 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun #define QL4010_DRVR_SEM_MASK 0x00300000 166*4882a593Smuzhiyun #define QL4010_GPIO_SEM_MASK 0x00c00000 167*4882a593Smuzhiyun #define QL4010_SDRAM_SEM_MASK 0x03000000 168*4882a593Smuzhiyun #define QL4010_PHY_SEM_MASK 0x0c000000 169*4882a593Smuzhiyun #define QL4010_NVRAM_SEM_MASK 0x30000000 170*4882a593Smuzhiyun #define QL4010_FLASH_SEM_MASK 0xc0000000 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun /* Semaphore Defines for 4022 */ 173*4882a593Smuzhiyun #define QL4022_RESOURCE_MASK_BASE_CODE 0x7 174*4882a593Smuzhiyun #define QL4022_RESOURCE_BITS_BASE_CODE 0x4 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun #define QL4022_DRVR_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (1+16)) 178*4882a593Smuzhiyun #define QL4022_DDR_RAM_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (4+16)) 179*4882a593Smuzhiyun #define QL4022_PHY_GIO_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (7+16)) 180*4882a593Smuzhiyun #define QL4022_NVRAM_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (10+16)) 181*4882a593Smuzhiyun #define QL4022_FLASH_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (13+16)) 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* nvram address for 4032 */ 184*4882a593Smuzhiyun #define NVRAM_PORT0_BOOT_MODE 0x03b1 185*4882a593Smuzhiyun #define NVRAM_PORT0_BOOT_PRI_TGT 0x03b2 186*4882a593Smuzhiyun #define NVRAM_PORT0_BOOT_SEC_TGT 0x03bb 187*4882a593Smuzhiyun #define NVRAM_PORT1_BOOT_MODE 0x07b1 188*4882a593Smuzhiyun #define NVRAM_PORT1_BOOT_PRI_TGT 0x07b2 189*4882a593Smuzhiyun #define NVRAM_PORT1_BOOT_SEC_TGT 0x07bb 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun /* Page # defines for 4022 */ 193*4882a593Smuzhiyun #define PORT_CTRL_STAT_PAGE 0 /* 4022 */ 194*4882a593Smuzhiyun #define HOST_MEM_CFG_PAGE 1 /* 4022 */ 195*4882a593Smuzhiyun #define LOCAL_RAM_CFG_PAGE 2 /* 4022 */ 196*4882a593Smuzhiyun #define PROT_STAT_PAGE 3 /* 4022 */ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* Register Mask - sets corresponding mask bits in the upper word */ set_rmask(uint32_t val)199*4882a593Smuzhiyunstatic inline uint32_t set_rmask(uint32_t val) 200*4882a593Smuzhiyun { 201*4882a593Smuzhiyun return (val & 0xffff) | (val << 16); 202*4882a593Smuzhiyun } 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun clr_rmask(uint32_t val)205*4882a593Smuzhiyunstatic inline uint32_t clr_rmask(uint32_t val) 206*4882a593Smuzhiyun { 207*4882a593Smuzhiyun return 0 | (val << 16); 208*4882a593Smuzhiyun } 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun /* ctrl_status definitions */ 211*4882a593Smuzhiyun #define CSR_SCSI_PAGE_SELECT 0x00000003 212*4882a593Smuzhiyun #define CSR_SCSI_INTR_ENABLE 0x00000004 /* 4010 */ 213*4882a593Smuzhiyun #define CSR_SCSI_RESET_INTR 0x00000008 214*4882a593Smuzhiyun #define CSR_SCSI_COMPLETION_INTR 0x00000010 215*4882a593Smuzhiyun #define CSR_SCSI_PROCESSOR_INTR 0x00000020 216*4882a593Smuzhiyun #define CSR_INTR_RISC 0x00000040 217*4882a593Smuzhiyun #define CSR_BOOT_ENABLE 0x00000080 218*4882a593Smuzhiyun #define CSR_NET_PAGE_SELECT 0x00000300 /* 4010 */ 219*4882a593Smuzhiyun #define CSR_FUNC_NUM 0x00000700 /* 4022 */ 220*4882a593Smuzhiyun #define CSR_NET_RESET_INTR 0x00000800 /* 4010 */ 221*4882a593Smuzhiyun #define CSR_FORCE_SOFT_RESET 0x00002000 /* 4022 */ 222*4882a593Smuzhiyun #define CSR_FATAL_ERROR 0x00004000 223*4882a593Smuzhiyun #define CSR_SOFT_RESET 0x00008000 224*4882a593Smuzhiyun #define ISP_CONTROL_FN_MASK CSR_FUNC_NUM 225*4882a593Smuzhiyun #define ISP_CONTROL_FN0_SCSI 0x0500 226*4882a593Smuzhiyun #define ISP_CONTROL_FN1_SCSI 0x0700 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun #define INTR_PENDING (CSR_SCSI_COMPLETION_INTR |\ 229*4882a593Smuzhiyun CSR_SCSI_PROCESSOR_INTR |\ 230*4882a593Smuzhiyun CSR_SCSI_RESET_INTR) 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /* ISP InterruptMask definitions */ 233*4882a593Smuzhiyun #define IMR_SCSI_INTR_ENABLE 0x00000004 /* 4022 */ 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun /* ISP 4022 nvram definitions */ 236*4882a593Smuzhiyun #define NVR_WRITE_ENABLE 0x00000010 /* 4022 */ 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun #define QL4010_NVRAM_SIZE 0x200 239*4882a593Smuzhiyun #define QL40X2_NVRAM_SIZE 0x800 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /* ISP port_status definitions */ 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun /* ISP Semaphore definitions */ 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* ISP General Purpose Output definitions */ 246*4882a593Smuzhiyun #define GPOR_TOPCAT_RESET 0x00000004 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun /* shadow registers (DMA'd from HA to system memory. read only) */ 249*4882a593Smuzhiyun struct shadow_regs { 250*4882a593Smuzhiyun /* SCSI Request Queue Consumer Index */ 251*4882a593Smuzhiyun __le32 req_q_out; /* 0 x0 R */ 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun /* SCSI Completion Queue Producer Index */ 254*4882a593Smuzhiyun __le32 rsp_q_in; /* 4 x4 R */ 255*4882a593Smuzhiyun }; /* 8 x8 */ 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun /* External hardware configuration register */ 259*4882a593Smuzhiyun union external_hw_config_reg { 260*4882a593Smuzhiyun struct { 261*4882a593Smuzhiyun /* FIXME: Do we even need this? All values are 262*4882a593Smuzhiyun * referred to by 16 bit quantities. Platform and 263*4882a593Smuzhiyun * endianess issues. */ 264*4882a593Smuzhiyun __le32 bReserved0:1; 265*4882a593Smuzhiyun __le32 bSDRAMProtectionMethod:2; 266*4882a593Smuzhiyun __le32 bSDRAMBanks:1; 267*4882a593Smuzhiyun __le32 bSDRAMChipWidth:1; 268*4882a593Smuzhiyun __le32 bSDRAMChipSize:2; 269*4882a593Smuzhiyun __le32 bParityDisable:1; 270*4882a593Smuzhiyun __le32 bExternalMemoryType:1; 271*4882a593Smuzhiyun __le32 bFlashBIOSWriteEnable:1; 272*4882a593Smuzhiyun __le32 bFlashUpperBankSelect:1; 273*4882a593Smuzhiyun __le32 bWriteBurst:2; 274*4882a593Smuzhiyun __le32 bReserved1:3; 275*4882a593Smuzhiyun __le32 bMask:16; 276*4882a593Smuzhiyun }; 277*4882a593Smuzhiyun uint32_t Asuint32_t; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun /* 82XX Support start */ 281*4882a593Smuzhiyun /* 82xx Default FLT Addresses */ 282*4882a593Smuzhiyun #define FA_FLASH_LAYOUT_ADDR_82 0xFC400 283*4882a593Smuzhiyun #define FA_FLASH_DESCR_ADDR_82 0xFC000 284*4882a593Smuzhiyun #define FA_BOOT_LOAD_ADDR_82 0x04000 285*4882a593Smuzhiyun #define FA_BOOT_CODE_ADDR_82 0x20000 286*4882a593Smuzhiyun #define FA_RISC_CODE_ADDR_82 0x40000 287*4882a593Smuzhiyun #define FA_GOLD_RISC_CODE_ADDR_82 0x80000 288*4882a593Smuzhiyun #define FA_FLASH_ISCSI_CHAP 0x540000 289*4882a593Smuzhiyun #define FA_FLASH_CHAP_SIZE 0xC0000 290*4882a593Smuzhiyun #define FA_FLASH_ISCSI_DDB 0x420000 291*4882a593Smuzhiyun #define FA_FLASH_DDB_SIZE 0x080000 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* Flash Description Table */ 294*4882a593Smuzhiyun struct qla_fdt_layout { 295*4882a593Smuzhiyun uint8_t sig[4]; 296*4882a593Smuzhiyun uint16_t version; 297*4882a593Smuzhiyun uint16_t len; 298*4882a593Smuzhiyun uint16_t checksum; 299*4882a593Smuzhiyun uint8_t unused1[2]; 300*4882a593Smuzhiyun uint8_t model[16]; 301*4882a593Smuzhiyun uint16_t man_id; 302*4882a593Smuzhiyun uint16_t id; 303*4882a593Smuzhiyun uint8_t flags; 304*4882a593Smuzhiyun uint8_t erase_cmd; 305*4882a593Smuzhiyun uint8_t alt_erase_cmd; 306*4882a593Smuzhiyun uint8_t wrt_enable_cmd; 307*4882a593Smuzhiyun uint8_t wrt_enable_bits; 308*4882a593Smuzhiyun uint8_t wrt_sts_reg_cmd; 309*4882a593Smuzhiyun uint8_t unprotect_sec_cmd; 310*4882a593Smuzhiyun uint8_t read_man_id_cmd; 311*4882a593Smuzhiyun uint32_t block_size; 312*4882a593Smuzhiyun uint32_t alt_block_size; 313*4882a593Smuzhiyun uint32_t flash_size; 314*4882a593Smuzhiyun uint32_t wrt_enable_data; 315*4882a593Smuzhiyun uint8_t read_id_addr_len; 316*4882a593Smuzhiyun uint8_t wrt_disable_bits; 317*4882a593Smuzhiyun uint8_t read_dev_id_len; 318*4882a593Smuzhiyun uint8_t chip_erase_cmd; 319*4882a593Smuzhiyun uint16_t read_timeout; 320*4882a593Smuzhiyun uint8_t protect_sec_cmd; 321*4882a593Smuzhiyun uint8_t unused2[65]; 322*4882a593Smuzhiyun }; 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun /* Flash Layout Table */ 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun struct qla_flt_location { 327*4882a593Smuzhiyun uint8_t sig[4]; 328*4882a593Smuzhiyun uint16_t start_lo; 329*4882a593Smuzhiyun uint16_t start_hi; 330*4882a593Smuzhiyun uint8_t version; 331*4882a593Smuzhiyun uint8_t unused[5]; 332*4882a593Smuzhiyun uint16_t checksum; 333*4882a593Smuzhiyun }; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun struct qla_flt_header { 336*4882a593Smuzhiyun uint16_t version; 337*4882a593Smuzhiyun uint16_t length; 338*4882a593Smuzhiyun uint16_t checksum; 339*4882a593Smuzhiyun uint16_t unused; 340*4882a593Smuzhiyun }; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* 82xx FLT Regions */ 343*4882a593Smuzhiyun #define FLT_REG_FDT 0x1a 344*4882a593Smuzhiyun #define FLT_REG_FLT 0x1c 345*4882a593Smuzhiyun #define FLT_REG_BOOTLOAD_82 0x72 346*4882a593Smuzhiyun #define FLT_REG_FW_82 0x74 347*4882a593Smuzhiyun #define FLT_REG_FW_82_1 0x97 348*4882a593Smuzhiyun #define FLT_REG_GOLD_FW_82 0x75 349*4882a593Smuzhiyun #define FLT_REG_BOOT_CODE_82 0x78 350*4882a593Smuzhiyun #define FLT_REG_ISCSI_PARAM 0x65 351*4882a593Smuzhiyun #define FLT_REG_ISCSI_CHAP 0x63 352*4882a593Smuzhiyun #define FLT_REG_ISCSI_DDB 0x6A 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun struct qla_flt_region { 355*4882a593Smuzhiyun uint32_t code; 356*4882a593Smuzhiyun uint32_t size; 357*4882a593Smuzhiyun uint32_t start; 358*4882a593Smuzhiyun uint32_t end; 359*4882a593Smuzhiyun }; 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun /************************************************************************* 362*4882a593Smuzhiyun * 363*4882a593Smuzhiyun * Mailbox Commands Structures and Definitions 364*4882a593Smuzhiyun * 365*4882a593Smuzhiyun *************************************************************************/ 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun /* Mailbox command definitions */ 368*4882a593Smuzhiyun #define MBOX_CMD_ABOUT_FW 0x0009 369*4882a593Smuzhiyun #define MBOX_CMD_PING 0x000B 370*4882a593Smuzhiyun #define PING_IPV6_PROTOCOL_ENABLE 0x1 371*4882a593Smuzhiyun #define PING_IPV6_LINKLOCAL_ADDR 0x4 372*4882a593Smuzhiyun #define PING_IPV6_ADDR0 0x8 373*4882a593Smuzhiyun #define PING_IPV6_ADDR1 0xC 374*4882a593Smuzhiyun #define MBOX_CMD_ENABLE_INTRS 0x0010 375*4882a593Smuzhiyun #define INTR_DISABLE 0 376*4882a593Smuzhiyun #define INTR_ENABLE 1 377*4882a593Smuzhiyun #define MBOX_CMD_STOP_FW 0x0014 378*4882a593Smuzhiyun #define MBOX_CMD_ABORT_TASK 0x0015 379*4882a593Smuzhiyun #define MBOX_CMD_LUN_RESET 0x0016 380*4882a593Smuzhiyun #define MBOX_CMD_TARGET_WARM_RESET 0x0017 381*4882a593Smuzhiyun #define MBOX_CMD_GET_MANAGEMENT_DATA 0x001E 382*4882a593Smuzhiyun #define MBOX_CMD_GET_FW_STATUS 0x001F 383*4882a593Smuzhiyun #define MBOX_CMD_SET_ISNS_SERVICE 0x0021 384*4882a593Smuzhiyun #define ISNS_DISABLE 0 385*4882a593Smuzhiyun #define ISNS_ENABLE 1 386*4882a593Smuzhiyun #define MBOX_CMD_COPY_FLASH 0x0024 387*4882a593Smuzhiyun #define MBOX_CMD_WRITE_FLASH 0x0025 388*4882a593Smuzhiyun #define MBOX_CMD_READ_FLASH 0x0026 389*4882a593Smuzhiyun #define MBOX_CMD_CLEAR_DATABASE_ENTRY 0x0031 390*4882a593Smuzhiyun #define MBOX_CMD_CONN_OPEN 0x0074 391*4882a593Smuzhiyun #define MBOX_CMD_CONN_CLOSE_SESS_LOGOUT 0x0056 392*4882a593Smuzhiyun #define DDB_NOT_LOGGED_IN 0x09 393*4882a593Smuzhiyun #define LOGOUT_OPTION_CLOSE_SESSION 0x0002 394*4882a593Smuzhiyun #define LOGOUT_OPTION_RELOGIN 0x0004 395*4882a593Smuzhiyun #define LOGOUT_OPTION_FREE_DDB 0x0008 396*4882a593Smuzhiyun #define MBOX_CMD_SET_PARAM 0x0059 397*4882a593Smuzhiyun #define SET_DRVR_VERSION 0x200 398*4882a593Smuzhiyun #define MAX_DRVR_VER_LEN 24 399*4882a593Smuzhiyun #define MBOX_CMD_EXECUTE_IOCB_A64 0x005A 400*4882a593Smuzhiyun #define MBOX_CMD_INITIALIZE_FIRMWARE 0x0060 401*4882a593Smuzhiyun #define MBOX_CMD_GET_INIT_FW_CTRL_BLOCK 0x0061 402*4882a593Smuzhiyun #define MBOX_CMD_REQUEST_DATABASE_ENTRY 0x0062 403*4882a593Smuzhiyun #define MBOX_CMD_SET_DATABASE_ENTRY 0x0063 404*4882a593Smuzhiyun #define MBOX_CMD_GET_DATABASE_ENTRY 0x0064 405*4882a593Smuzhiyun #define DDB_DS_UNASSIGNED 0x00 406*4882a593Smuzhiyun #define DDB_DS_NO_CONNECTION_ACTIVE 0x01 407*4882a593Smuzhiyun #define DDB_DS_DISCOVERY 0x02 408*4882a593Smuzhiyun #define DDB_DS_SESSION_ACTIVE 0x04 409*4882a593Smuzhiyun #define DDB_DS_SESSION_FAILED 0x06 410*4882a593Smuzhiyun #define DDB_DS_LOGIN_IN_PROCESS 0x07 411*4882a593Smuzhiyun #define MBOX_CMD_GET_FW_STATE 0x0069 412*4882a593Smuzhiyun #define MBOX_CMD_GET_INIT_FW_CTRL_BLOCK_DEFAULTS 0x006A 413*4882a593Smuzhiyun #define MBOX_CMD_DIAG_TEST 0x0075 414*4882a593Smuzhiyun #define MBOX_CMD_GET_SYS_INFO 0x0078 415*4882a593Smuzhiyun #define MBOX_CMD_GET_NVRAM 0x0078 /* For 40xx */ 416*4882a593Smuzhiyun #define MBOX_CMD_SET_NVRAM 0x0079 /* For 40xx */ 417*4882a593Smuzhiyun #define MBOX_CMD_RESTORE_FACTORY_DEFAULTS 0x0087 418*4882a593Smuzhiyun #define MBOX_CMD_SET_ACB 0x0088 419*4882a593Smuzhiyun #define MBOX_CMD_GET_ACB 0x0089 420*4882a593Smuzhiyun #define MBOX_CMD_DISABLE_ACB 0x008A 421*4882a593Smuzhiyun #define MBOX_CMD_GET_IPV6_NEIGHBOR_CACHE 0x008B 422*4882a593Smuzhiyun #define MBOX_CMD_GET_IPV6_DEST_CACHE 0x008C 423*4882a593Smuzhiyun #define MBOX_CMD_GET_IPV6_DEF_ROUTER_LIST 0x008D 424*4882a593Smuzhiyun #define MBOX_CMD_GET_IPV6_LCL_PREFIX_LIST 0x008E 425*4882a593Smuzhiyun #define MBOX_CMD_SET_IPV6_NEIGHBOR_CACHE 0x0090 426*4882a593Smuzhiyun #define MBOX_CMD_GET_IP_ADDR_STATE 0x0091 427*4882a593Smuzhiyun #define MBOX_CMD_SEND_IPV6_ROUTER_SOL 0x0092 428*4882a593Smuzhiyun #define MBOX_CMD_GET_DB_ENTRY_CURRENT_IP_ADDR 0x0093 429*4882a593Smuzhiyun #define MBOX_CMD_SET_PORT_CONFIG 0x0122 430*4882a593Smuzhiyun #define MBOX_CMD_GET_PORT_CONFIG 0x0123 431*4882a593Smuzhiyun #define MBOX_CMD_SET_LED_CONFIG 0x0125 432*4882a593Smuzhiyun #define MBOX_CMD_GET_LED_CONFIG 0x0126 433*4882a593Smuzhiyun #define MBOX_CMD_MINIDUMP 0x0129 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* Port Config */ 436*4882a593Smuzhiyun #define ENABLE_INTERNAL_LOOPBACK 0x04 437*4882a593Smuzhiyun #define ENABLE_EXTERNAL_LOOPBACK 0x08 438*4882a593Smuzhiyun #define ENABLE_DCBX 0x10 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun /* Minidump subcommand */ 441*4882a593Smuzhiyun #define MINIDUMP_GET_SIZE_SUBCOMMAND 0x00 442*4882a593Smuzhiyun #define MINIDUMP_GET_TMPLT_SUBCOMMAND 0x01 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun /* Mailbox 1 */ 445*4882a593Smuzhiyun #define FW_STATE_READY 0x0000 446*4882a593Smuzhiyun #define FW_STATE_CONFIG_WAIT 0x0001 447*4882a593Smuzhiyun #define FW_STATE_WAIT_AUTOCONNECT 0x0002 448*4882a593Smuzhiyun #define FW_STATE_ERROR 0x0004 449*4882a593Smuzhiyun #define FW_STATE_CONFIGURING_IP 0x0008 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* Mailbox 3 */ 452*4882a593Smuzhiyun #define FW_ADDSTATE_OPTICAL_MEDIA 0x0001 453*4882a593Smuzhiyun #define FW_ADDSTATE_DHCPv4_ENABLED 0x0002 454*4882a593Smuzhiyun #define FW_ADDSTATE_DHCPv4_LEASE_ACQUIRED 0x0004 455*4882a593Smuzhiyun #define FW_ADDSTATE_DHCPv4_LEASE_EXPIRED 0x0008 456*4882a593Smuzhiyun #define FW_ADDSTATE_LINK_UP 0x0010 457*4882a593Smuzhiyun #define FW_ADDSTATE_ISNS_SVC_ENABLED 0x0020 458*4882a593Smuzhiyun #define FW_ADDSTATE_LINK_SPEED_10MBPS 0x0100 459*4882a593Smuzhiyun #define FW_ADDSTATE_LINK_SPEED_100MBPS 0x0200 460*4882a593Smuzhiyun #define FW_ADDSTATE_LINK_SPEED_1GBPS 0x0400 461*4882a593Smuzhiyun #define FW_ADDSTATE_LINK_SPEED_10GBPS 0x0800 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun #define MBOX_CMD_GET_DATABASE_ENTRY_DEFAULTS 0x006B 464*4882a593Smuzhiyun #define IPV6_DEFAULT_DDB_ENTRY 0x0001 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun #define MBOX_CMD_CONN_OPEN_SESS_LOGIN 0x0074 467*4882a593Smuzhiyun #define MBOX_CMD_GET_CRASH_RECORD 0x0076 /* 4010 only */ 468*4882a593Smuzhiyun #define MBOX_CMD_GET_CONN_EVENT_LOG 0x0077 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun #define MBOX_CMD_IDC_ACK 0x0101 471*4882a593Smuzhiyun #define MBOX_CMD_IDC_TIME_EXTEND 0x0102 472*4882a593Smuzhiyun #define MBOX_CMD_PORT_RESET 0x0120 473*4882a593Smuzhiyun #define MBOX_CMD_SET_PORT_CONFIG 0x0122 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun /* Mailbox status definitions */ 476*4882a593Smuzhiyun #define MBOX_COMPLETION_STATUS 4 477*4882a593Smuzhiyun #define MBOX_STS_BUSY 0x0007 478*4882a593Smuzhiyun #define MBOX_STS_INTERMEDIATE_COMPLETION 0x1000 479*4882a593Smuzhiyun #define MBOX_STS_COMMAND_COMPLETE 0x4000 480*4882a593Smuzhiyun #define MBOX_STS_COMMAND_ERROR 0x4005 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun #define MBOX_ASYNC_EVENT_STATUS 8 483*4882a593Smuzhiyun #define MBOX_ASTS_SYSTEM_ERROR 0x8002 484*4882a593Smuzhiyun #define MBOX_ASTS_REQUEST_TRANSFER_ERROR 0x8003 485*4882a593Smuzhiyun #define MBOX_ASTS_RESPONSE_TRANSFER_ERROR 0x8004 486*4882a593Smuzhiyun #define MBOX_ASTS_PROTOCOL_STATISTIC_ALARM 0x8005 487*4882a593Smuzhiyun #define MBOX_ASTS_SCSI_COMMAND_PDU_REJECTED 0x8006 488*4882a593Smuzhiyun #define MBOX_ASTS_LINK_UP 0x8010 489*4882a593Smuzhiyun #define MBOX_ASTS_LINK_DOWN 0x8011 490*4882a593Smuzhiyun #define MBOX_ASTS_DATABASE_CHANGED 0x8014 491*4882a593Smuzhiyun #define MBOX_ASTS_UNSOLICITED_PDU_RECEIVED 0x8015 492*4882a593Smuzhiyun #define MBOX_ASTS_SELF_TEST_FAILED 0x8016 493*4882a593Smuzhiyun #define MBOX_ASTS_LOGIN_FAILED 0x8017 494*4882a593Smuzhiyun #define MBOX_ASTS_DNS 0x8018 495*4882a593Smuzhiyun #define MBOX_ASTS_HEARTBEAT 0x8019 496*4882a593Smuzhiyun #define MBOX_ASTS_NVRAM_INVALID 0x801A 497*4882a593Smuzhiyun #define MBOX_ASTS_MAC_ADDRESS_CHANGED 0x801B 498*4882a593Smuzhiyun #define MBOX_ASTS_IP_ADDRESS_CHANGED 0x801C 499*4882a593Smuzhiyun #define MBOX_ASTS_DHCP_LEASE_EXPIRED 0x801D 500*4882a593Smuzhiyun #define MBOX_ASTS_DHCP_LEASE_ACQUIRED 0x801F 501*4882a593Smuzhiyun #define MBOX_ASTS_ISNS_UNSOLICITED_PDU_RECEIVED 0x8021 502*4882a593Smuzhiyun #define MBOX_ASTS_DUPLICATE_IP 0x8025 503*4882a593Smuzhiyun #define MBOX_ASTS_ARP_COMPLETE 0x8026 504*4882a593Smuzhiyun #define MBOX_ASTS_SUBNET_STATE_CHANGE 0x8027 505*4882a593Smuzhiyun #define MBOX_ASTS_RESPONSE_QUEUE_FULL 0x8028 506*4882a593Smuzhiyun #define MBOX_ASTS_IP_ADDR_STATE_CHANGED 0x8029 507*4882a593Smuzhiyun #define MBOX_ASTS_IPV6_DEFAULT_ROUTER_CHANGED 0x802A 508*4882a593Smuzhiyun #define MBOX_ASTS_IPV6_LINK_MTU_CHANGE 0x802B 509*4882a593Smuzhiyun #define MBOX_ASTS_IPV6_AUTO_PREFIX_IGNORED 0x802C 510*4882a593Smuzhiyun #define MBOX_ASTS_IPV6_ND_LOCAL_PREFIX_IGNORED 0x802D 511*4882a593Smuzhiyun #define MBOX_ASTS_ICMPV6_ERROR_MSG_RCVD 0x802E 512*4882a593Smuzhiyun #define MBOX_ASTS_INITIALIZATION_FAILED 0x8031 513*4882a593Smuzhiyun #define MBOX_ASTS_SYSTEM_WARNING_EVENT 0x8036 514*4882a593Smuzhiyun #define MBOX_ASTS_IDC_COMPLETE 0x8100 515*4882a593Smuzhiyun #define MBOX_ASTS_IDC_REQUEST_NOTIFICATION 0x8101 516*4882a593Smuzhiyun #define MBOX_ASTS_IDC_TIME_EXTEND_NOTIFICATION 0x8102 517*4882a593Smuzhiyun #define MBOX_ASTS_DCBX_CONF_CHANGE 0x8110 518*4882a593Smuzhiyun #define MBOX_ASTS_TXSCVR_INSERTED 0x8130 519*4882a593Smuzhiyun #define MBOX_ASTS_TXSCVR_REMOVED 0x8131 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun #define ISNS_EVENT_DATA_RECEIVED 0x0000 522*4882a593Smuzhiyun #define ISNS_EVENT_CONNECTION_OPENED 0x0001 523*4882a593Smuzhiyun #define ISNS_EVENT_CONNECTION_FAILED 0x0002 524*4882a593Smuzhiyun #define MBOX_ASTS_IPSEC_SYSTEM_FATAL_ERROR 0x8022 525*4882a593Smuzhiyun #define MBOX_ASTS_SUBNET_STATE_CHANGE 0x8027 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* ACB Configuration Defines */ 528*4882a593Smuzhiyun #define ACB_CONFIG_DISABLE 0x00 529*4882a593Smuzhiyun #define ACB_CONFIG_SET 0x01 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun /* ACB/IP Address State Defines */ 532*4882a593Smuzhiyun #define IP_ADDRSTATE_UNCONFIGURED 0 533*4882a593Smuzhiyun #define IP_ADDRSTATE_INVALID 1 534*4882a593Smuzhiyun #define IP_ADDRSTATE_ACQUIRING 2 535*4882a593Smuzhiyun #define IP_ADDRSTATE_TENTATIVE 3 536*4882a593Smuzhiyun #define IP_ADDRSTATE_DEPRICATED 4 537*4882a593Smuzhiyun #define IP_ADDRSTATE_PREFERRED 5 538*4882a593Smuzhiyun #define IP_ADDRSTATE_DISABLING 6 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun /* FLASH offsets */ 541*4882a593Smuzhiyun #define FLASH_SEGMENT_IFCB 0x04000000 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun #define FLASH_OPT_RMW_HOLD 0 544*4882a593Smuzhiyun #define FLASH_OPT_RMW_INIT 1 545*4882a593Smuzhiyun #define FLASH_OPT_COMMIT 2 546*4882a593Smuzhiyun #define FLASH_OPT_RMW_COMMIT 3 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun /* generic defines to enable/disable params */ 549*4882a593Smuzhiyun #define QL4_PARAM_DISABLE 0 550*4882a593Smuzhiyun #define QL4_PARAM_ENABLE 1 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun /*************************************************************************/ 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun /* Host Adapter Initialization Control Block (from host) */ 555*4882a593Smuzhiyun struct addr_ctrl_blk { 556*4882a593Smuzhiyun uint8_t version; /* 00 */ 557*4882a593Smuzhiyun #define IFCB_VER_MIN 0x01 558*4882a593Smuzhiyun #define IFCB_VER_MAX 0x02 559*4882a593Smuzhiyun uint8_t control; /* 01 */ 560*4882a593Smuzhiyun #define CTRLOPT_NEW_CONN_DISABLE 0x0002 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun uint16_t fw_options; /* 02-03 */ 563*4882a593Smuzhiyun #define FWOPT_HEARTBEAT_ENABLE 0x1000 564*4882a593Smuzhiyun #define FWOPT_SESSION_MODE 0x0040 565*4882a593Smuzhiyun #define FWOPT_INITIATOR_MODE 0x0020 566*4882a593Smuzhiyun #define FWOPT_TARGET_MODE 0x0010 567*4882a593Smuzhiyun #define FWOPT_ENABLE_CRBDB 0x8000 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun uint16_t exec_throttle; /* 04-05 */ 570*4882a593Smuzhiyun uint8_t zio_count; /* 06 */ 571*4882a593Smuzhiyun uint8_t res0; /* 07 */ 572*4882a593Smuzhiyun uint16_t eth_mtu_size; /* 08-09 */ 573*4882a593Smuzhiyun uint16_t add_fw_options; /* 0A-0B */ 574*4882a593Smuzhiyun #define ADFWOPT_SERIALIZE_TASK_MGMT 0x0400 575*4882a593Smuzhiyun #define ADFWOPT_AUTOCONN_DISABLE 0x0002 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun uint8_t hb_interval; /* 0C */ 578*4882a593Smuzhiyun uint8_t inst_num; /* 0D */ 579*4882a593Smuzhiyun uint16_t res1; /* 0E-0F */ 580*4882a593Smuzhiyun uint16_t rqq_consumer_idx; /* 10-11 */ 581*4882a593Smuzhiyun uint16_t compq_producer_idx; /* 12-13 */ 582*4882a593Smuzhiyun uint16_t rqq_len; /* 14-15 */ 583*4882a593Smuzhiyun uint16_t compq_len; /* 16-17 */ 584*4882a593Smuzhiyun uint32_t rqq_addr_lo; /* 18-1B */ 585*4882a593Smuzhiyun uint32_t rqq_addr_hi; /* 1C-1F */ 586*4882a593Smuzhiyun uint32_t compq_addr_lo; /* 20-23 */ 587*4882a593Smuzhiyun uint32_t compq_addr_hi; /* 24-27 */ 588*4882a593Smuzhiyun uint32_t shdwreg_addr_lo; /* 28-2B */ 589*4882a593Smuzhiyun uint32_t shdwreg_addr_hi; /* 2C-2F */ 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun uint16_t iscsi_opts; /* 30-31 */ 592*4882a593Smuzhiyun #define ISCSIOPTS_HEADER_DIGEST_EN 0x2000 593*4882a593Smuzhiyun #define ISCSIOPTS_DATA_DIGEST_EN 0x1000 594*4882a593Smuzhiyun #define ISCSIOPTS_IMMEDIATE_DATA_EN 0x0800 595*4882a593Smuzhiyun #define ISCSIOPTS_INITIAL_R2T_EN 0x0400 596*4882a593Smuzhiyun #define ISCSIOPTS_DATA_SEQ_INORDER_EN 0x0200 597*4882a593Smuzhiyun #define ISCSIOPTS_DATA_PDU_INORDER_EN 0x0100 598*4882a593Smuzhiyun #define ISCSIOPTS_CHAP_AUTH_EN 0x0080 599*4882a593Smuzhiyun #define ISCSIOPTS_SNACK_EN 0x0040 600*4882a593Smuzhiyun #define ISCSIOPTS_DISCOVERY_LOGOUT_EN 0x0020 601*4882a593Smuzhiyun #define ISCSIOPTS_BIDI_CHAP_EN 0x0010 602*4882a593Smuzhiyun #define ISCSIOPTS_DISCOVERY_AUTH_EN 0x0008 603*4882a593Smuzhiyun #define ISCSIOPTS_STRICT_LOGIN_COMP_EN 0x0004 604*4882a593Smuzhiyun #define ISCSIOPTS_ERL 0x0003 605*4882a593Smuzhiyun uint16_t ipv4_tcp_opts; /* 32-33 */ 606*4882a593Smuzhiyun #define TCPOPT_DELAYED_ACK_DISABLE 0x8000 607*4882a593Smuzhiyun #define TCPOPT_DHCP_ENABLE 0x0200 608*4882a593Smuzhiyun #define TCPOPT_DNS_SERVER_IP_EN 0x0100 609*4882a593Smuzhiyun #define TCPOPT_SLP_DA_INFO_EN 0x0080 610*4882a593Smuzhiyun #define TCPOPT_NAGLE_ALGO_DISABLE 0x0020 611*4882a593Smuzhiyun #define TCPOPT_WINDOW_SCALE_DISABLE 0x0010 612*4882a593Smuzhiyun #define TCPOPT_TIMER_SCALE 0x000E 613*4882a593Smuzhiyun #define TCPOPT_TIMESTAMP_ENABLE 0x0001 614*4882a593Smuzhiyun uint16_t ipv4_ip_opts; /* 34-35 */ 615*4882a593Smuzhiyun #define IPOPT_IPV4_PROTOCOL_ENABLE 0x8000 616*4882a593Smuzhiyun #define IPOPT_IPV4_TOS_EN 0x4000 617*4882a593Smuzhiyun #define IPOPT_VLAN_TAGGING_ENABLE 0x2000 618*4882a593Smuzhiyun #define IPOPT_GRAT_ARP_EN 0x1000 619*4882a593Smuzhiyun #define IPOPT_ALT_CID_EN 0x0800 620*4882a593Smuzhiyun #define IPOPT_REQ_VID_EN 0x0400 621*4882a593Smuzhiyun #define IPOPT_USE_VID_EN 0x0200 622*4882a593Smuzhiyun #define IPOPT_LEARN_IQN_EN 0x0100 623*4882a593Smuzhiyun #define IPOPT_FRAGMENTATION_DISABLE 0x0010 624*4882a593Smuzhiyun #define IPOPT_IN_FORWARD_EN 0x0008 625*4882a593Smuzhiyun #define IPOPT_ARP_REDIRECT_EN 0x0004 626*4882a593Smuzhiyun 627*4882a593Smuzhiyun uint16_t iscsi_max_pdu_size; /* 36-37 */ 628*4882a593Smuzhiyun uint8_t ipv4_tos; /* 38 */ 629*4882a593Smuzhiyun uint8_t ipv4_ttl; /* 39 */ 630*4882a593Smuzhiyun uint8_t acb_version; /* 3A */ 631*4882a593Smuzhiyun #define ACB_NOT_SUPPORTED 0x00 632*4882a593Smuzhiyun #define ACB_SUPPORTED 0x02 /* Capable of ACB Version 2 633*4882a593Smuzhiyun Features */ 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun uint8_t res2; /* 3B */ 636*4882a593Smuzhiyun uint16_t def_timeout; /* 3C-3D */ 637*4882a593Smuzhiyun uint16_t iscsi_fburst_len; /* 3E-3F */ 638*4882a593Smuzhiyun uint16_t iscsi_def_time2wait; /* 40-41 */ 639*4882a593Smuzhiyun uint16_t iscsi_def_time2retain; /* 42-43 */ 640*4882a593Smuzhiyun uint16_t iscsi_max_outstnd_r2t; /* 44-45 */ 641*4882a593Smuzhiyun uint16_t conn_ka_timeout; /* 46-47 */ 642*4882a593Smuzhiyun uint16_t ipv4_port; /* 48-49 */ 643*4882a593Smuzhiyun uint16_t iscsi_max_burst_len; /* 4A-4B */ 644*4882a593Smuzhiyun uint32_t res5; /* 4C-4F */ 645*4882a593Smuzhiyun uint8_t ipv4_addr[4]; /* 50-53 */ 646*4882a593Smuzhiyun uint16_t ipv4_vlan_tag; /* 54-55 */ 647*4882a593Smuzhiyun uint8_t ipv4_addr_state; /* 56 */ 648*4882a593Smuzhiyun uint8_t ipv4_cacheid; /* 57 */ 649*4882a593Smuzhiyun uint8_t res6[8]; /* 58-5F */ 650*4882a593Smuzhiyun uint8_t ipv4_subnet[4]; /* 60-63 */ 651*4882a593Smuzhiyun uint8_t res7[12]; /* 64-6F */ 652*4882a593Smuzhiyun uint8_t ipv4_gw_addr[4]; /* 70-73 */ 653*4882a593Smuzhiyun uint8_t res8[0xc]; /* 74-7F */ 654*4882a593Smuzhiyun uint8_t pri_dns_srvr_ip[4];/* 80-83 */ 655*4882a593Smuzhiyun uint8_t sec_dns_srvr_ip[4];/* 84-87 */ 656*4882a593Smuzhiyun uint16_t min_eph_port; /* 88-89 */ 657*4882a593Smuzhiyun uint16_t max_eph_port; /* 8A-8B */ 658*4882a593Smuzhiyun uint8_t res9[4]; /* 8C-8F */ 659*4882a593Smuzhiyun uint8_t iscsi_alias[32];/* 90-AF */ 660*4882a593Smuzhiyun uint8_t res9_1[0x16]; /* B0-C5 */ 661*4882a593Smuzhiyun uint16_t tgt_portal_grp;/* C6-C7 */ 662*4882a593Smuzhiyun uint8_t abort_timer; /* C8 */ 663*4882a593Smuzhiyun uint8_t ipv4_tcp_wsf; /* C9 */ 664*4882a593Smuzhiyun uint8_t res10[6]; /* CA-CF */ 665*4882a593Smuzhiyun uint8_t ipv4_sec_ip_addr[4]; /* D0-D3 */ 666*4882a593Smuzhiyun uint8_t ipv4_dhcp_vid_len; /* D4 */ 667*4882a593Smuzhiyun uint8_t ipv4_dhcp_vid[11]; /* D5-DF */ 668*4882a593Smuzhiyun uint8_t res11[20]; /* E0-F3 */ 669*4882a593Smuzhiyun uint8_t ipv4_dhcp_alt_cid_len; /* F4 */ 670*4882a593Smuzhiyun uint8_t ipv4_dhcp_alt_cid[11]; /* F5-FF */ 671*4882a593Smuzhiyun uint8_t iscsi_name[224]; /* 100-1DF */ 672*4882a593Smuzhiyun uint8_t res12[32]; /* 1E0-1FF */ 673*4882a593Smuzhiyun uint32_t cookie; /* 200-203 */ 674*4882a593Smuzhiyun uint16_t ipv6_port; /* 204-205 */ 675*4882a593Smuzhiyun uint16_t ipv6_opts; /* 206-207 */ 676*4882a593Smuzhiyun #define IPV6_OPT_IPV6_PROTOCOL_ENABLE 0x8000 677*4882a593Smuzhiyun #define IPV6_OPT_VLAN_TAGGING_ENABLE 0x2000 678*4882a593Smuzhiyun #define IPV6_OPT_GRAT_NEIGHBOR_ADV_EN 0x1000 679*4882a593Smuzhiyun #define IPV6_OPT_REDIRECT_EN 0x0004 680*4882a593Smuzhiyun 681*4882a593Smuzhiyun uint16_t ipv6_addtl_opts; /* 208-209 */ 682*4882a593Smuzhiyun #define IPV6_ADDOPT_IGNORE_ICMP_ECHO_REQ 0x0040 683*4882a593Smuzhiyun #define IPV6_ADDOPT_MLD_EN 0x0004 684*4882a593Smuzhiyun #define IPV6_ADDOPT_NEIGHBOR_DISCOVERY_ADDR_ENABLE 0x0002 /* Pri ACB 685*4882a593Smuzhiyun Only */ 686*4882a593Smuzhiyun #define IPV6_ADDOPT_AUTOCONFIG_LINK_LOCAL_ADDR 0x0001 687*4882a593Smuzhiyun 688*4882a593Smuzhiyun uint16_t ipv6_tcp_opts; /* 20A-20B */ 689*4882a593Smuzhiyun #define IPV6_TCPOPT_DELAYED_ACK_DISABLE 0x8000 690*4882a593Smuzhiyun #define IPV6_TCPOPT_NAGLE_ALGO_DISABLE 0x0020 691*4882a593Smuzhiyun #define IPV6_TCPOPT_WINDOW_SCALE_DISABLE 0x0010 692*4882a593Smuzhiyun #define IPV6_TCPOPT_TIMER_SCALE 0x000E 693*4882a593Smuzhiyun #define IPV6_TCPOPT_TIMESTAMP_EN 0x0001 694*4882a593Smuzhiyun uint8_t ipv6_tcp_wsf; /* 20C */ 695*4882a593Smuzhiyun uint16_t ipv6_flow_lbl; /* 20D-20F */ 696*4882a593Smuzhiyun uint8_t ipv6_dflt_rtr_addr[16]; /* 210-21F */ 697*4882a593Smuzhiyun uint16_t ipv6_vlan_tag; /* 220-221 */ 698*4882a593Smuzhiyun uint8_t ipv6_lnk_lcl_addr_state;/* 222 */ 699*4882a593Smuzhiyun uint8_t ipv6_addr0_state; /* 223 */ 700*4882a593Smuzhiyun uint8_t ipv6_addr1_state; /* 224 */ 701*4882a593Smuzhiyun uint8_t ipv6_dflt_rtr_state; /* 225 */ 702*4882a593Smuzhiyun #define IPV6_RTRSTATE_UNKNOWN 0 703*4882a593Smuzhiyun #define IPV6_RTRSTATE_MANUAL 1 704*4882a593Smuzhiyun #define IPV6_RTRSTATE_ADVERTISED 3 705*4882a593Smuzhiyun #define IPV6_RTRSTATE_STALE 4 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun uint8_t ipv6_traffic_class; /* 226 */ 708*4882a593Smuzhiyun uint8_t ipv6_hop_limit; /* 227 */ 709*4882a593Smuzhiyun uint8_t ipv6_if_id[8]; /* 228-22F */ 710*4882a593Smuzhiyun uint8_t ipv6_addr0[16]; /* 230-23F */ 711*4882a593Smuzhiyun uint8_t ipv6_addr1[16]; /* 240-24F */ 712*4882a593Smuzhiyun uint32_t ipv6_nd_reach_time; /* 250-253 */ 713*4882a593Smuzhiyun uint32_t ipv6_nd_rexmit_timer; /* 254-257 */ 714*4882a593Smuzhiyun uint32_t ipv6_nd_stale_timeout; /* 258-25B */ 715*4882a593Smuzhiyun uint8_t ipv6_dup_addr_detect_count; /* 25C */ 716*4882a593Smuzhiyun uint8_t ipv6_cache_id; /* 25D */ 717*4882a593Smuzhiyun uint8_t res13[18]; /* 25E-26F */ 718*4882a593Smuzhiyun uint32_t ipv6_gw_advrt_mtu; /* 270-273 */ 719*4882a593Smuzhiyun uint8_t res14[140]; /* 274-2FF */ 720*4882a593Smuzhiyun }; 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun #define IP_ADDR_COUNT 4 /* Total 4 IP address supported in one interface 723*4882a593Smuzhiyun * One IPv4, one IPv6 link local and 2 IPv6 724*4882a593Smuzhiyun */ 725*4882a593Smuzhiyun 726*4882a593Smuzhiyun #define IP_STATE_MASK 0x0F000000 727*4882a593Smuzhiyun #define IP_STATE_SHIFT 24 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun struct init_fw_ctrl_blk { 730*4882a593Smuzhiyun struct addr_ctrl_blk pri; 731*4882a593Smuzhiyun /* struct addr_ctrl_blk sec;*/ 732*4882a593Smuzhiyun }; 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun #define PRIMARI_ACB 0 735*4882a593Smuzhiyun #define SECONDARY_ACB 1 736*4882a593Smuzhiyun 737*4882a593Smuzhiyun struct addr_ctrl_blk_def { 738*4882a593Smuzhiyun uint8_t reserved1[1]; /* 00 */ 739*4882a593Smuzhiyun uint8_t control; /* 01 */ 740*4882a593Smuzhiyun uint8_t reserved2[11]; /* 02-0C */ 741*4882a593Smuzhiyun uint8_t inst_num; /* 0D */ 742*4882a593Smuzhiyun uint8_t reserved3[34]; /* 0E-2F */ 743*4882a593Smuzhiyun uint16_t iscsi_opts; /* 30-31 */ 744*4882a593Smuzhiyun uint16_t ipv4_tcp_opts; /* 32-33 */ 745*4882a593Smuzhiyun uint16_t ipv4_ip_opts; /* 34-35 */ 746*4882a593Smuzhiyun uint16_t iscsi_max_pdu_size; /* 36-37 */ 747*4882a593Smuzhiyun uint8_t ipv4_tos; /* 38 */ 748*4882a593Smuzhiyun uint8_t ipv4_ttl; /* 39 */ 749*4882a593Smuzhiyun uint8_t reserved4[2]; /* 3A-3B */ 750*4882a593Smuzhiyun uint16_t def_timeout; /* 3C-3D */ 751*4882a593Smuzhiyun uint16_t iscsi_fburst_len; /* 3E-3F */ 752*4882a593Smuzhiyun uint8_t reserved5[4]; /* 40-43 */ 753*4882a593Smuzhiyun uint16_t iscsi_max_outstnd_r2t; /* 44-45 */ 754*4882a593Smuzhiyun uint8_t reserved6[2]; /* 46-47 */ 755*4882a593Smuzhiyun uint16_t ipv4_port; /* 48-49 */ 756*4882a593Smuzhiyun uint16_t iscsi_max_burst_len; /* 4A-4B */ 757*4882a593Smuzhiyun uint8_t reserved7[4]; /* 4C-4F */ 758*4882a593Smuzhiyun uint8_t ipv4_addr[4]; /* 50-53 */ 759*4882a593Smuzhiyun uint16_t ipv4_vlan_tag; /* 54-55 */ 760*4882a593Smuzhiyun uint8_t ipv4_addr_state; /* 56 */ 761*4882a593Smuzhiyun uint8_t ipv4_cacheid; /* 57 */ 762*4882a593Smuzhiyun uint8_t reserved8[8]; /* 58-5F */ 763*4882a593Smuzhiyun uint8_t ipv4_subnet[4]; /* 60-63 */ 764*4882a593Smuzhiyun uint8_t reserved9[12]; /* 64-6F */ 765*4882a593Smuzhiyun uint8_t ipv4_gw_addr[4]; /* 70-73 */ 766*4882a593Smuzhiyun uint8_t reserved10[84]; /* 74-C7 */ 767*4882a593Smuzhiyun uint8_t abort_timer; /* C8 */ 768*4882a593Smuzhiyun uint8_t ipv4_tcp_wsf; /* C9 */ 769*4882a593Smuzhiyun uint8_t reserved11[10]; /* CA-D3 */ 770*4882a593Smuzhiyun uint8_t ipv4_dhcp_vid_len; /* D4 */ 771*4882a593Smuzhiyun uint8_t ipv4_dhcp_vid[11]; /* D5-DF */ 772*4882a593Smuzhiyun uint8_t reserved12[20]; /* E0-F3 */ 773*4882a593Smuzhiyun uint8_t ipv4_dhcp_alt_cid_len; /* F4 */ 774*4882a593Smuzhiyun uint8_t ipv4_dhcp_alt_cid[11]; /* F5-FF */ 775*4882a593Smuzhiyun uint8_t iscsi_name[224]; /* 100-1DF */ 776*4882a593Smuzhiyun uint8_t reserved13[32]; /* 1E0-1FF */ 777*4882a593Smuzhiyun uint32_t cookie; /* 200-203 */ 778*4882a593Smuzhiyun uint16_t ipv6_port; /* 204-205 */ 779*4882a593Smuzhiyun uint16_t ipv6_opts; /* 206-207 */ 780*4882a593Smuzhiyun uint16_t ipv6_addtl_opts; /* 208-209 */ 781*4882a593Smuzhiyun uint16_t ipv6_tcp_opts; /* 20A-20B */ 782*4882a593Smuzhiyun uint8_t ipv6_tcp_wsf; /* 20C */ 783*4882a593Smuzhiyun uint16_t ipv6_flow_lbl; /* 20D-20F */ 784*4882a593Smuzhiyun uint8_t ipv6_dflt_rtr_addr[16]; /* 210-21F */ 785*4882a593Smuzhiyun uint16_t ipv6_vlan_tag; /* 220-221 */ 786*4882a593Smuzhiyun uint8_t ipv6_lnk_lcl_addr_state; /* 222 */ 787*4882a593Smuzhiyun uint8_t ipv6_addr0_state; /* 223 */ 788*4882a593Smuzhiyun uint8_t ipv6_addr1_state; /* 224 */ 789*4882a593Smuzhiyun uint8_t ipv6_dflt_rtr_state; /* 225 */ 790*4882a593Smuzhiyun uint8_t ipv6_traffic_class; /* 226 */ 791*4882a593Smuzhiyun uint8_t ipv6_hop_limit; /* 227 */ 792*4882a593Smuzhiyun uint8_t ipv6_if_id[8]; /* 228-22F */ 793*4882a593Smuzhiyun uint8_t ipv6_addr0[16]; /* 230-23F */ 794*4882a593Smuzhiyun uint8_t ipv6_addr1[16]; /* 240-24F */ 795*4882a593Smuzhiyun uint32_t ipv6_nd_reach_time; /* 250-253 */ 796*4882a593Smuzhiyun uint32_t ipv6_nd_rexmit_timer; /* 254-257 */ 797*4882a593Smuzhiyun uint32_t ipv6_nd_stale_timeout; /* 258-25B */ 798*4882a593Smuzhiyun uint8_t ipv6_dup_addr_detect_count; /* 25C */ 799*4882a593Smuzhiyun uint8_t ipv6_cache_id; /* 25D */ 800*4882a593Smuzhiyun uint8_t reserved14[18]; /* 25E-26F */ 801*4882a593Smuzhiyun uint32_t ipv6_gw_advrt_mtu; /* 270-273 */ 802*4882a593Smuzhiyun uint8_t reserved15[140]; /* 274-2FF */ 803*4882a593Smuzhiyun }; 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun /*************************************************************************/ 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun #define MAX_CHAP_ENTRIES_40XX 128 808*4882a593Smuzhiyun #define MAX_CHAP_ENTRIES_82XX 1024 809*4882a593Smuzhiyun #define MAX_RESRV_CHAP_IDX 3 810*4882a593Smuzhiyun #define FLASH_CHAP_OFFSET 0x06000000 811*4882a593Smuzhiyun 812*4882a593Smuzhiyun struct ql4_chap_table { 813*4882a593Smuzhiyun uint16_t link; 814*4882a593Smuzhiyun uint8_t flags; 815*4882a593Smuzhiyun uint8_t secret_len; 816*4882a593Smuzhiyun #define MIN_CHAP_SECRET_LEN 12 817*4882a593Smuzhiyun #define MAX_CHAP_SECRET_LEN 100 818*4882a593Smuzhiyun uint8_t secret[MAX_CHAP_SECRET_LEN]; 819*4882a593Smuzhiyun #define MAX_CHAP_NAME_LEN 256 820*4882a593Smuzhiyun uint8_t name[MAX_CHAP_NAME_LEN]; 821*4882a593Smuzhiyun uint16_t reserved; 822*4882a593Smuzhiyun #define CHAP_VALID_COOKIE 0x4092 823*4882a593Smuzhiyun #define CHAP_INVALID_COOKIE 0xFFEE 824*4882a593Smuzhiyun uint16_t cookie; 825*4882a593Smuzhiyun }; 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun struct dev_db_entry { 828*4882a593Smuzhiyun uint16_t options; /* 00-01 */ 829*4882a593Smuzhiyun #define DDB_OPT_DISC_SESSION 0x10 830*4882a593Smuzhiyun #define DDB_OPT_TARGET 0x02 /* device is a target */ 831*4882a593Smuzhiyun #define DDB_OPT_IPV6_DEVICE 0x100 832*4882a593Smuzhiyun #define DDB_OPT_AUTO_SENDTGTS_DISABLE 0x40 833*4882a593Smuzhiyun #define DDB_OPT_IPV6_NULL_LINK_LOCAL 0x800 /* post connection */ 834*4882a593Smuzhiyun #define DDB_OPT_IPV6_FW_DEFINED_LINK_LOCAL 0x800 /* pre connection */ 835*4882a593Smuzhiyun 836*4882a593Smuzhiyun #define OPT_IS_FW_ASSIGNED_IPV6 11 837*4882a593Smuzhiyun #define OPT_IPV6_DEVICE 8 838*4882a593Smuzhiyun #define OPT_AUTO_SENDTGTS_DISABLE 6 839*4882a593Smuzhiyun #define OPT_DISC_SESSION 4 840*4882a593Smuzhiyun #define OPT_ENTRY_STATE 3 841*4882a593Smuzhiyun uint16_t exec_throttle; /* 02-03 */ 842*4882a593Smuzhiyun uint16_t exec_count; /* 04-05 */ 843*4882a593Smuzhiyun uint16_t res0; /* 06-07 */ 844*4882a593Smuzhiyun uint16_t iscsi_options; /* 08-09 */ 845*4882a593Smuzhiyun #define ISCSIOPT_HEADER_DIGEST_EN 13 846*4882a593Smuzhiyun #define ISCSIOPT_DATA_DIGEST_EN 12 847*4882a593Smuzhiyun #define ISCSIOPT_IMMEDIATE_DATA_EN 11 848*4882a593Smuzhiyun #define ISCSIOPT_INITIAL_R2T_EN 10 849*4882a593Smuzhiyun #define ISCSIOPT_DATA_SEQ_IN_ORDER 9 850*4882a593Smuzhiyun #define ISCSIOPT_DATA_PDU_IN_ORDER 8 851*4882a593Smuzhiyun #define ISCSIOPT_CHAP_AUTH_EN 7 852*4882a593Smuzhiyun #define ISCSIOPT_SNACK_REQ_EN 6 853*4882a593Smuzhiyun #define ISCSIOPT_DISCOVERY_LOGOUT_EN 5 854*4882a593Smuzhiyun #define ISCSIOPT_BIDI_CHAP_EN 4 855*4882a593Smuzhiyun #define ISCSIOPT_DISCOVERY_AUTH_OPTIONAL 3 856*4882a593Smuzhiyun #define ISCSIOPT_ERL1 1 857*4882a593Smuzhiyun #define ISCSIOPT_ERL0 0 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun uint16_t tcp_options; /* 0A-0B */ 860*4882a593Smuzhiyun #define TCPOPT_TIMESTAMP_STAT 6 861*4882a593Smuzhiyun #define TCPOPT_NAGLE_DISABLE 5 862*4882a593Smuzhiyun #define TCPOPT_WSF_DISABLE 4 863*4882a593Smuzhiyun #define TCPOPT_TIMER_SCALE3 3 864*4882a593Smuzhiyun #define TCPOPT_TIMER_SCALE2 2 865*4882a593Smuzhiyun #define TCPOPT_TIMER_SCALE1 1 866*4882a593Smuzhiyun #define TCPOPT_TIMESTAMP_EN 0 867*4882a593Smuzhiyun 868*4882a593Smuzhiyun uint16_t ip_options; /* 0C-0D */ 869*4882a593Smuzhiyun #define IPOPT_FRAGMENT_DISABLE 4 870*4882a593Smuzhiyun 871*4882a593Smuzhiyun uint16_t iscsi_max_rcv_data_seg_len; /* 0E-0F */ 872*4882a593Smuzhiyun #define BYTE_UNITS 512 873*4882a593Smuzhiyun uint32_t res1; /* 10-13 */ 874*4882a593Smuzhiyun uint16_t iscsi_max_snd_data_seg_len; /* 14-15 */ 875*4882a593Smuzhiyun uint16_t iscsi_first_burst_len; /* 16-17 */ 876*4882a593Smuzhiyun uint16_t iscsi_def_time2wait; /* 18-19 */ 877*4882a593Smuzhiyun uint16_t iscsi_def_time2retain; /* 1A-1B */ 878*4882a593Smuzhiyun uint16_t iscsi_max_outsnd_r2t; /* 1C-1D */ 879*4882a593Smuzhiyun uint16_t ka_timeout; /* 1E-1F */ 880*4882a593Smuzhiyun uint8_t isid[6]; /* 20-25 big-endian, must be converted 881*4882a593Smuzhiyun * to little-endian */ 882*4882a593Smuzhiyun uint16_t tsid; /* 26-27 */ 883*4882a593Smuzhiyun uint16_t port; /* 28-29 */ 884*4882a593Smuzhiyun uint16_t iscsi_max_burst_len; /* 2A-2B */ 885*4882a593Smuzhiyun uint16_t def_timeout; /* 2C-2D */ 886*4882a593Smuzhiyun uint16_t res2; /* 2E-2F */ 887*4882a593Smuzhiyun uint8_t ip_addr[0x10]; /* 30-3F */ 888*4882a593Smuzhiyun uint8_t iscsi_alias[0x20]; /* 40-5F */ 889*4882a593Smuzhiyun uint8_t tgt_addr[0x20]; /* 60-7F */ 890*4882a593Smuzhiyun uint16_t mss; /* 80-81 */ 891*4882a593Smuzhiyun uint16_t res3; /* 82-83 */ 892*4882a593Smuzhiyun uint16_t lcl_port; /* 84-85 */ 893*4882a593Smuzhiyun uint8_t ipv4_tos; /* 86 */ 894*4882a593Smuzhiyun uint16_t ipv6_flow_lbl; /* 87-89 */ 895*4882a593Smuzhiyun uint8_t res4[0x36]; /* 8A-BF */ 896*4882a593Smuzhiyun uint8_t iscsi_name[0xE0]; /* C0-19F : xxzzy Make this a 897*4882a593Smuzhiyun * pointer to a string so we 898*4882a593Smuzhiyun * don't have to reserve so 899*4882a593Smuzhiyun * much RAM */ 900*4882a593Smuzhiyun uint8_t link_local_ipv6_addr[0x10]; /* 1A0-1AF */ 901*4882a593Smuzhiyun uint8_t res5[0x10]; /* 1B0-1BF */ 902*4882a593Smuzhiyun #define DDB_NO_LINK 0xFFFF 903*4882a593Smuzhiyun #define DDB_ISNS 0xFFFD 904*4882a593Smuzhiyun uint16_t ddb_link; /* 1C0-1C1 */ 905*4882a593Smuzhiyun uint16_t chap_tbl_idx; /* 1C2-1C3 */ 906*4882a593Smuzhiyun uint16_t tgt_portal_grp; /* 1C4-1C5 */ 907*4882a593Smuzhiyun uint8_t tcp_xmt_wsf; /* 1C6 */ 908*4882a593Smuzhiyun uint8_t tcp_rcv_wsf; /* 1C7 */ 909*4882a593Smuzhiyun uint32_t stat_sn; /* 1C8-1CB */ 910*4882a593Smuzhiyun uint32_t exp_stat_sn; /* 1CC-1CF */ 911*4882a593Smuzhiyun uint8_t res6[0x2b]; /* 1D0-1FB */ 912*4882a593Smuzhiyun #define DDB_VALID_COOKIE 0x9034 913*4882a593Smuzhiyun uint16_t cookie; /* 1FC-1FD */ 914*4882a593Smuzhiyun uint16_t len; /* 1FE-1FF */ 915*4882a593Smuzhiyun }; 916*4882a593Smuzhiyun 917*4882a593Smuzhiyun /*************************************************************************/ 918*4882a593Smuzhiyun 919*4882a593Smuzhiyun /* Flash definitions */ 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun #define FLASH_OFFSET_SYS_INFO 0x02000000 922*4882a593Smuzhiyun #define FLASH_DEFAULTBLOCKSIZE 0x20000 923*4882a593Smuzhiyun #define FLASH_EOF_OFFSET (FLASH_DEFAULTBLOCKSIZE-8) /* 4 bytes 924*4882a593Smuzhiyun * for EOF 925*4882a593Smuzhiyun * signature */ 926*4882a593Smuzhiyun #define FLASH_RAW_ACCESS_ADDR 0x8e000000 927*4882a593Smuzhiyun 928*4882a593Smuzhiyun #define BOOT_PARAM_OFFSET_PORT0 0x3b0 929*4882a593Smuzhiyun #define BOOT_PARAM_OFFSET_PORT1 0x7b0 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun #define FLASH_OFFSET_DB_INFO 0x05000000 932*4882a593Smuzhiyun #define FLASH_OFFSET_DB_END (FLASH_OFFSET_DB_INFO + 0x7fff) 933*4882a593Smuzhiyun 934*4882a593Smuzhiyun 935*4882a593Smuzhiyun struct sys_info_phys_addr { 936*4882a593Smuzhiyun uint8_t address[6]; /* 00-05 */ 937*4882a593Smuzhiyun uint8_t filler[2]; /* 06-07 */ 938*4882a593Smuzhiyun }; 939*4882a593Smuzhiyun 940*4882a593Smuzhiyun struct flash_sys_info { 941*4882a593Smuzhiyun uint32_t cookie; /* 00-03 */ 942*4882a593Smuzhiyun uint32_t physAddrCount; /* 04-07 */ 943*4882a593Smuzhiyun struct sys_info_phys_addr physAddr[4]; /* 08-27 */ 944*4882a593Smuzhiyun uint8_t vendorId[128]; /* 28-A7 */ 945*4882a593Smuzhiyun uint8_t productId[128]; /* A8-127 */ 946*4882a593Smuzhiyun uint32_t serialNumber; /* 128-12B */ 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun /* PCI Configuration values */ 949*4882a593Smuzhiyun uint32_t pciDeviceVendor; /* 12C-12F */ 950*4882a593Smuzhiyun uint32_t pciDeviceId; /* 130-133 */ 951*4882a593Smuzhiyun uint32_t pciSubsysVendor; /* 134-137 */ 952*4882a593Smuzhiyun uint32_t pciSubsysId; /* 138-13B */ 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun /* This validates version 1. */ 955*4882a593Smuzhiyun uint32_t crumbs; /* 13C-13F */ 956*4882a593Smuzhiyun 957*4882a593Smuzhiyun uint32_t enterpriseNumber; /* 140-143 */ 958*4882a593Smuzhiyun 959*4882a593Smuzhiyun uint32_t mtu; /* 144-147 */ 960*4882a593Smuzhiyun uint32_t reserved0; /* 148-14b */ 961*4882a593Smuzhiyun uint32_t crumbs2; /* 14c-14f */ 962*4882a593Smuzhiyun uint8_t acSerialNumber[16]; /* 150-15f */ 963*4882a593Smuzhiyun uint32_t crumbs3; /* 160-16f */ 964*4882a593Smuzhiyun 965*4882a593Smuzhiyun /* Leave this last in the struct so it is declared invalid if 966*4882a593Smuzhiyun * any new items are added. 967*4882a593Smuzhiyun */ 968*4882a593Smuzhiyun uint32_t reserved1[39]; /* 170-1ff */ 969*4882a593Smuzhiyun }; /* 200 */ 970*4882a593Smuzhiyun 971*4882a593Smuzhiyun struct mbx_sys_info { 972*4882a593Smuzhiyun uint8_t board_id_str[16]; /* 0-f Keep board ID string first */ 973*4882a593Smuzhiyun /* in this structure for GUI. */ 974*4882a593Smuzhiyun uint16_t board_id; /* 10-11 board ID code */ 975*4882a593Smuzhiyun uint16_t phys_port_cnt; /* 12-13 number of physical network ports */ 976*4882a593Smuzhiyun uint16_t port_num; /* 14-15 network port for this PCI function */ 977*4882a593Smuzhiyun /* (port 0 is first port) */ 978*4882a593Smuzhiyun uint8_t mac_addr[6]; /* 16-1b MAC address for this PCI function */ 979*4882a593Smuzhiyun uint32_t iscsi_pci_func_cnt; /* 1c-1f number of iSCSI PCI functions */ 980*4882a593Smuzhiyun uint32_t pci_func; /* 20-23 this PCI function */ 981*4882a593Smuzhiyun unsigned char serial_number[16]; /* 24-33 serial number string */ 982*4882a593Smuzhiyun uint8_t reserved[12]; /* 34-3f */ 983*4882a593Smuzhiyun }; 984*4882a593Smuzhiyun 985*4882a593Smuzhiyun struct about_fw_info { 986*4882a593Smuzhiyun uint16_t fw_major; /* 00 - 01 */ 987*4882a593Smuzhiyun uint16_t fw_minor; /* 02 - 03 */ 988*4882a593Smuzhiyun uint16_t fw_patch; /* 04 - 05 */ 989*4882a593Smuzhiyun uint16_t fw_build; /* 06 - 07 */ 990*4882a593Smuzhiyun uint8_t fw_build_date[16]; /* 08 - 17 ASCII String */ 991*4882a593Smuzhiyun uint8_t fw_build_time[16]; /* 18 - 27 ASCII String */ 992*4882a593Smuzhiyun uint8_t fw_build_user[16]; /* 28 - 37 ASCII String */ 993*4882a593Smuzhiyun uint16_t fw_load_source; /* 38 - 39 */ 994*4882a593Smuzhiyun /* 1 = Flash Primary, 995*4882a593Smuzhiyun 2 = Flash Secondary, 996*4882a593Smuzhiyun 3 = Host Download 997*4882a593Smuzhiyun */ 998*4882a593Smuzhiyun uint8_t reserved1[6]; /* 3A - 3F */ 999*4882a593Smuzhiyun uint16_t iscsi_major; /* 40 - 41 */ 1000*4882a593Smuzhiyun uint16_t iscsi_minor; /* 42 - 43 */ 1001*4882a593Smuzhiyun uint16_t bootload_major; /* 44 - 45 */ 1002*4882a593Smuzhiyun uint16_t bootload_minor; /* 46 - 47 */ 1003*4882a593Smuzhiyun uint16_t bootload_patch; /* 48 - 49 */ 1004*4882a593Smuzhiyun uint16_t bootload_build; /* 4A - 4B */ 1005*4882a593Smuzhiyun uint8_t extended_timestamp[180];/* 4C - FF */ 1006*4882a593Smuzhiyun }; 1007*4882a593Smuzhiyun 1008*4882a593Smuzhiyun struct crash_record { 1009*4882a593Smuzhiyun uint16_t fw_major_version; /* 00 - 01 */ 1010*4882a593Smuzhiyun uint16_t fw_minor_version; /* 02 - 03 */ 1011*4882a593Smuzhiyun uint16_t fw_patch_version; /* 04 - 05 */ 1012*4882a593Smuzhiyun uint16_t fw_build_version; /* 06 - 07 */ 1013*4882a593Smuzhiyun 1014*4882a593Smuzhiyun uint8_t build_date[16]; /* 08 - 17 */ 1015*4882a593Smuzhiyun uint8_t build_time[16]; /* 18 - 27 */ 1016*4882a593Smuzhiyun uint8_t build_user[16]; /* 28 - 37 */ 1017*4882a593Smuzhiyun uint8_t card_serial_num[16]; /* 38 - 47 */ 1018*4882a593Smuzhiyun 1019*4882a593Smuzhiyun uint32_t time_of_crash_in_secs; /* 48 - 4B */ 1020*4882a593Smuzhiyun uint32_t time_of_crash_in_ms; /* 4C - 4F */ 1021*4882a593Smuzhiyun 1022*4882a593Smuzhiyun uint16_t out_RISC_sd_num_frames; /* 50 - 51 */ 1023*4882a593Smuzhiyun uint16_t OAP_sd_num_words; /* 52 - 53 */ 1024*4882a593Smuzhiyun uint16_t IAP_sd_num_frames; /* 54 - 55 */ 1025*4882a593Smuzhiyun uint16_t in_RISC_sd_num_words; /* 56 - 57 */ 1026*4882a593Smuzhiyun 1027*4882a593Smuzhiyun uint8_t reserved1[28]; /* 58 - 7F */ 1028*4882a593Smuzhiyun 1029*4882a593Smuzhiyun uint8_t out_RISC_reg_dump[256]; /* 80 -17F */ 1030*4882a593Smuzhiyun uint8_t in_RISC_reg_dump[256]; /*180 -27F */ 1031*4882a593Smuzhiyun uint8_t in_out_RISC_stack_dump[0]; /*280 - ??? */ 1032*4882a593Smuzhiyun }; 1033*4882a593Smuzhiyun 1034*4882a593Smuzhiyun struct conn_event_log_entry { 1035*4882a593Smuzhiyun #define MAX_CONN_EVENT_LOG_ENTRIES 100 1036*4882a593Smuzhiyun uint32_t timestamp_sec; /* 00 - 03 seconds since boot */ 1037*4882a593Smuzhiyun uint32_t timestamp_ms; /* 04 - 07 milliseconds since boot */ 1038*4882a593Smuzhiyun uint16_t device_index; /* 08 - 09 */ 1039*4882a593Smuzhiyun uint16_t fw_conn_state; /* 0A - 0B */ 1040*4882a593Smuzhiyun uint8_t event_type; /* 0C - 0C */ 1041*4882a593Smuzhiyun uint8_t error_code; /* 0D - 0D */ 1042*4882a593Smuzhiyun uint16_t error_code_detail; /* 0E - 0F */ 1043*4882a593Smuzhiyun uint8_t num_consecutive_events; /* 10 - 10 */ 1044*4882a593Smuzhiyun uint8_t rsvd[3]; /* 11 - 13 */ 1045*4882a593Smuzhiyun }; 1046*4882a593Smuzhiyun 1047*4882a593Smuzhiyun /************************************************************************* 1048*4882a593Smuzhiyun * 1049*4882a593Smuzhiyun * IOCB Commands Structures and Definitions 1050*4882a593Smuzhiyun * 1051*4882a593Smuzhiyun *************************************************************************/ 1052*4882a593Smuzhiyun #define IOCB_MAX_CDB_LEN 16 /* Bytes in a CBD */ 1053*4882a593Smuzhiyun #define IOCB_MAX_SENSEDATA_LEN 32 /* Bytes of sense data */ 1054*4882a593Smuzhiyun #define IOCB_MAX_EXT_SENSEDATA_LEN 60 /* Bytes of extended sense data */ 1055*4882a593Smuzhiyun 1056*4882a593Smuzhiyun /* IOCB header structure */ 1057*4882a593Smuzhiyun struct qla4_header { 1058*4882a593Smuzhiyun uint8_t entryType; 1059*4882a593Smuzhiyun #define ET_STATUS 0x03 1060*4882a593Smuzhiyun #define ET_MARKER 0x04 1061*4882a593Smuzhiyun #define ET_CONT_T1 0x0A 1062*4882a593Smuzhiyun #define ET_STATUS_CONTINUATION 0x10 1063*4882a593Smuzhiyun #define ET_CMND_T3 0x19 1064*4882a593Smuzhiyun #define ET_PASSTHRU0 0x3A 1065*4882a593Smuzhiyun #define ET_PASSTHRU_STATUS 0x3C 1066*4882a593Smuzhiyun #define ET_MBOX_CMD 0x38 1067*4882a593Smuzhiyun #define ET_MBOX_STATUS 0x39 1068*4882a593Smuzhiyun 1069*4882a593Smuzhiyun uint8_t entryStatus; 1070*4882a593Smuzhiyun uint8_t systemDefined; 1071*4882a593Smuzhiyun #define SD_ISCSI_PDU 0x01 1072*4882a593Smuzhiyun uint8_t entryCount; 1073*4882a593Smuzhiyun 1074*4882a593Smuzhiyun /* SyetemDefined definition */ 1075*4882a593Smuzhiyun }; 1076*4882a593Smuzhiyun 1077*4882a593Smuzhiyun /* Generic queue entry structure*/ 1078*4882a593Smuzhiyun struct queue_entry { 1079*4882a593Smuzhiyun uint8_t data[60]; 1080*4882a593Smuzhiyun uint32_t signature; 1081*4882a593Smuzhiyun 1082*4882a593Smuzhiyun }; 1083*4882a593Smuzhiyun 1084*4882a593Smuzhiyun /* 64 bit addressing segment counts*/ 1085*4882a593Smuzhiyun 1086*4882a593Smuzhiyun #define COMMAND_SEG_A64 1 1087*4882a593Smuzhiyun #define CONTINUE_SEG_A64 5 1088*4882a593Smuzhiyun 1089*4882a593Smuzhiyun /* 64 bit addressing segment definition*/ 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun struct data_seg_a64 { 1092*4882a593Smuzhiyun struct { 1093*4882a593Smuzhiyun uint32_t addrLow; 1094*4882a593Smuzhiyun uint32_t addrHigh; 1095*4882a593Smuzhiyun 1096*4882a593Smuzhiyun } base; 1097*4882a593Smuzhiyun 1098*4882a593Smuzhiyun uint32_t count; 1099*4882a593Smuzhiyun 1100*4882a593Smuzhiyun }; 1101*4882a593Smuzhiyun 1102*4882a593Smuzhiyun /* Command Type 3 entry structure*/ 1103*4882a593Smuzhiyun 1104*4882a593Smuzhiyun struct command_t3_entry { 1105*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1106*4882a593Smuzhiyun 1107*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1108*4882a593Smuzhiyun uint16_t target; /* 08-09 */ 1109*4882a593Smuzhiyun uint16_t connection_id; /* 0A-0B */ 1110*4882a593Smuzhiyun 1111*4882a593Smuzhiyun uint8_t control_flags; /* 0C */ 1112*4882a593Smuzhiyun 1113*4882a593Smuzhiyun /* data direction (bits 5-6) */ 1114*4882a593Smuzhiyun #define CF_WRITE 0x20 1115*4882a593Smuzhiyun #define CF_READ 0x40 1116*4882a593Smuzhiyun #define CF_NO_DATA 0x00 1117*4882a593Smuzhiyun 1118*4882a593Smuzhiyun /* task attributes (bits 2-0) */ 1119*4882a593Smuzhiyun #define CF_HEAD_TAG 0x03 1120*4882a593Smuzhiyun #define CF_ORDERED_TAG 0x02 1121*4882a593Smuzhiyun #define CF_SIMPLE_TAG 0x01 1122*4882a593Smuzhiyun 1123*4882a593Smuzhiyun /* STATE FLAGS FIELD IS A PLACE HOLDER. THE FW WILL SET BITS 1124*4882a593Smuzhiyun * IN THIS FIELD AS THE COMMAND IS PROCESSED. WHEN THE IOCB IS 1125*4882a593Smuzhiyun * CHANGED TO AN IOSB THIS FIELD WILL HAVE THE STATE FLAGS SET 1126*4882a593Smuzhiyun * PROPERLY. 1127*4882a593Smuzhiyun */ 1128*4882a593Smuzhiyun uint8_t state_flags; /* 0D */ 1129*4882a593Smuzhiyun uint8_t cmdRefNum; /* 0E */ 1130*4882a593Smuzhiyun uint8_t reserved1; /* 0F */ 1131*4882a593Smuzhiyun uint8_t cdb[IOCB_MAX_CDB_LEN]; /* 10-1F */ 1132*4882a593Smuzhiyun struct scsi_lun lun; /* FCP LUN (BE). */ 1133*4882a593Smuzhiyun uint32_t cmdSeqNum; /* 28-2B */ 1134*4882a593Smuzhiyun uint16_t timeout; /* 2C-2D */ 1135*4882a593Smuzhiyun uint16_t dataSegCnt; /* 2E-2F */ 1136*4882a593Smuzhiyun uint32_t ttlByteCnt; /* 30-33 */ 1137*4882a593Smuzhiyun struct data_seg_a64 dataseg[COMMAND_SEG_A64]; /* 34-3F */ 1138*4882a593Smuzhiyun 1139*4882a593Smuzhiyun }; 1140*4882a593Smuzhiyun 1141*4882a593Smuzhiyun 1142*4882a593Smuzhiyun /* Continuation Type 1 entry structure*/ 1143*4882a593Smuzhiyun struct continuation_t1_entry { 1144*4882a593Smuzhiyun struct qla4_header hdr; 1145*4882a593Smuzhiyun 1146*4882a593Smuzhiyun struct data_seg_a64 dataseg[CONTINUE_SEG_A64]; 1147*4882a593Smuzhiyun 1148*4882a593Smuzhiyun }; 1149*4882a593Smuzhiyun 1150*4882a593Smuzhiyun /* Parameterize for 64 or 32 bits */ 1151*4882a593Smuzhiyun #define COMMAND_SEG COMMAND_SEG_A64 1152*4882a593Smuzhiyun #define CONTINUE_SEG CONTINUE_SEG_A64 1153*4882a593Smuzhiyun 1154*4882a593Smuzhiyun #define ET_COMMAND ET_CMND_T3 1155*4882a593Smuzhiyun #define ET_CONTINUE ET_CONT_T1 1156*4882a593Smuzhiyun 1157*4882a593Smuzhiyun /* Marker entry structure*/ 1158*4882a593Smuzhiyun struct qla4_marker_entry { 1159*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1160*4882a593Smuzhiyun 1161*4882a593Smuzhiyun uint32_t system_defined; /* 04-07 */ 1162*4882a593Smuzhiyun uint16_t target; /* 08-09 */ 1163*4882a593Smuzhiyun uint16_t modifier; /* 0A-0B */ 1164*4882a593Smuzhiyun #define MM_LUN_RESET 0 1165*4882a593Smuzhiyun #define MM_TGT_WARM_RESET 1 1166*4882a593Smuzhiyun 1167*4882a593Smuzhiyun uint16_t flags; /* 0C-0D */ 1168*4882a593Smuzhiyun uint16_t reserved1; /* 0E-0F */ 1169*4882a593Smuzhiyun struct scsi_lun lun; /* FCP LUN (BE). */ 1170*4882a593Smuzhiyun uint64_t reserved2; /* 18-1F */ 1171*4882a593Smuzhiyun uint64_t reserved3; /* 20-27 */ 1172*4882a593Smuzhiyun uint64_t reserved4; /* 28-2F */ 1173*4882a593Smuzhiyun uint64_t reserved5; /* 30-37 */ 1174*4882a593Smuzhiyun uint64_t reserved6; /* 38-3F */ 1175*4882a593Smuzhiyun }; 1176*4882a593Smuzhiyun 1177*4882a593Smuzhiyun /* Status entry structure*/ 1178*4882a593Smuzhiyun struct status_entry { 1179*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1180*4882a593Smuzhiyun 1181*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1182*4882a593Smuzhiyun 1183*4882a593Smuzhiyun uint8_t scsiStatus; /* 08 */ 1184*4882a593Smuzhiyun #define SCSI_CHECK_CONDITION 0x02 1185*4882a593Smuzhiyun 1186*4882a593Smuzhiyun uint8_t iscsiFlags; /* 09 */ 1187*4882a593Smuzhiyun #define ISCSI_FLAG_RESIDUAL_UNDER 0x02 1188*4882a593Smuzhiyun #define ISCSI_FLAG_RESIDUAL_OVER 0x04 1189*4882a593Smuzhiyun 1190*4882a593Smuzhiyun uint8_t iscsiResponse; /* 0A */ 1191*4882a593Smuzhiyun 1192*4882a593Smuzhiyun uint8_t completionStatus; /* 0B */ 1193*4882a593Smuzhiyun #define SCS_COMPLETE 0x00 1194*4882a593Smuzhiyun #define SCS_INCOMPLETE 0x01 1195*4882a593Smuzhiyun #define SCS_RESET_OCCURRED 0x04 1196*4882a593Smuzhiyun #define SCS_ABORTED 0x05 1197*4882a593Smuzhiyun #define SCS_TIMEOUT 0x06 1198*4882a593Smuzhiyun #define SCS_DATA_OVERRUN 0x07 1199*4882a593Smuzhiyun #define SCS_DATA_UNDERRUN 0x15 1200*4882a593Smuzhiyun #define SCS_QUEUE_FULL 0x1C 1201*4882a593Smuzhiyun #define SCS_DEVICE_UNAVAILABLE 0x28 1202*4882a593Smuzhiyun #define SCS_DEVICE_LOGGED_OUT 0x29 1203*4882a593Smuzhiyun 1204*4882a593Smuzhiyun uint8_t reserved1; /* 0C */ 1205*4882a593Smuzhiyun 1206*4882a593Smuzhiyun /* state_flags MUST be at the same location as state_flags in 1207*4882a593Smuzhiyun * the Command_T3/4_Entry */ 1208*4882a593Smuzhiyun uint8_t state_flags; /* 0D */ 1209*4882a593Smuzhiyun 1210*4882a593Smuzhiyun uint16_t senseDataByteCnt; /* 0E-0F */ 1211*4882a593Smuzhiyun uint32_t residualByteCnt; /* 10-13 */ 1212*4882a593Smuzhiyun uint32_t bidiResidualByteCnt; /* 14-17 */ 1213*4882a593Smuzhiyun uint32_t expSeqNum; /* 18-1B */ 1214*4882a593Smuzhiyun uint32_t maxCmdSeqNum; /* 1C-1F */ 1215*4882a593Smuzhiyun uint8_t senseData[IOCB_MAX_SENSEDATA_LEN]; /* 20-3F */ 1216*4882a593Smuzhiyun 1217*4882a593Smuzhiyun }; 1218*4882a593Smuzhiyun 1219*4882a593Smuzhiyun /* Status Continuation entry */ 1220*4882a593Smuzhiyun struct status_cont_entry { 1221*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1222*4882a593Smuzhiyun uint8_t ext_sense_data[IOCB_MAX_EXT_SENSEDATA_LEN]; /* 04-63 */ 1223*4882a593Smuzhiyun }; 1224*4882a593Smuzhiyun 1225*4882a593Smuzhiyun struct passthru0 { 1226*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1227*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1228*4882a593Smuzhiyun uint16_t target; /* 08-09 */ 1229*4882a593Smuzhiyun uint16_t connection_id; /* 0A-0B */ 1230*4882a593Smuzhiyun #define ISNS_DEFAULT_SERVER_CONN_ID ((uint16_t)0x8000) 1231*4882a593Smuzhiyun 1232*4882a593Smuzhiyun uint16_t control_flags; /* 0C-0D */ 1233*4882a593Smuzhiyun #define PT_FLAG_ETHERNET_FRAME 0x8000 1234*4882a593Smuzhiyun #define PT_FLAG_ISNS_PDU 0x8000 1235*4882a593Smuzhiyun #define PT_FLAG_SEND_BUFFER 0x0200 1236*4882a593Smuzhiyun #define PT_FLAG_WAIT_4_RESPONSE 0x0100 1237*4882a593Smuzhiyun #define PT_FLAG_ISCSI_PDU 0x1000 1238*4882a593Smuzhiyun 1239*4882a593Smuzhiyun uint16_t timeout; /* 0E-0F */ 1240*4882a593Smuzhiyun #define PT_DEFAULT_TIMEOUT 30 /* seconds */ 1241*4882a593Smuzhiyun 1242*4882a593Smuzhiyun struct data_seg_a64 out_dsd; /* 10-1B */ 1243*4882a593Smuzhiyun uint32_t res1; /* 1C-1F */ 1244*4882a593Smuzhiyun struct data_seg_a64 in_dsd; /* 20-2B */ 1245*4882a593Smuzhiyun uint8_t res2[20]; /* 2C-3F */ 1246*4882a593Smuzhiyun }; 1247*4882a593Smuzhiyun 1248*4882a593Smuzhiyun struct passthru_status { 1249*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1250*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1251*4882a593Smuzhiyun uint16_t target; /* 08-09 */ 1252*4882a593Smuzhiyun uint16_t connectionID; /* 0A-0B */ 1253*4882a593Smuzhiyun 1254*4882a593Smuzhiyun uint8_t completionStatus; /* 0C */ 1255*4882a593Smuzhiyun #define PASSTHRU_STATUS_COMPLETE 0x01 1256*4882a593Smuzhiyun 1257*4882a593Smuzhiyun uint8_t residualFlags; /* 0D */ 1258*4882a593Smuzhiyun 1259*4882a593Smuzhiyun uint16_t timeout; /* 0E-0F */ 1260*4882a593Smuzhiyun uint16_t portNumber; /* 10-11 */ 1261*4882a593Smuzhiyun uint8_t res1[10]; /* 12-1B */ 1262*4882a593Smuzhiyun uint32_t outResidual; /* 1C-1F */ 1263*4882a593Smuzhiyun uint8_t res2[12]; /* 20-2B */ 1264*4882a593Smuzhiyun uint32_t inResidual; /* 2C-2F */ 1265*4882a593Smuzhiyun uint8_t res4[16]; /* 30-3F */ 1266*4882a593Smuzhiyun }; 1267*4882a593Smuzhiyun 1268*4882a593Smuzhiyun struct mbox_cmd_iocb { 1269*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1270*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1271*4882a593Smuzhiyun uint32_t in_mbox[8]; /* 08-25 */ 1272*4882a593Smuzhiyun uint32_t res1[6]; /* 26-3F */ 1273*4882a593Smuzhiyun }; 1274*4882a593Smuzhiyun 1275*4882a593Smuzhiyun struct mbox_status_iocb { 1276*4882a593Smuzhiyun struct qla4_header hdr; /* 00-03 */ 1277*4882a593Smuzhiyun uint32_t handle; /* 04-07 */ 1278*4882a593Smuzhiyun uint32_t out_mbox[8]; /* 08-25 */ 1279*4882a593Smuzhiyun uint32_t res1[6]; /* 26-3F */ 1280*4882a593Smuzhiyun }; 1281*4882a593Smuzhiyun 1282*4882a593Smuzhiyun /* 1283*4882a593Smuzhiyun * ISP queue - response queue entry definition. 1284*4882a593Smuzhiyun */ 1285*4882a593Smuzhiyun struct response { 1286*4882a593Smuzhiyun uint8_t data[60]; 1287*4882a593Smuzhiyun uint32_t signature; 1288*4882a593Smuzhiyun #define RESPONSE_PROCESSED 0xDEADDEAD /* Signature */ 1289*4882a593Smuzhiyun }; 1290*4882a593Smuzhiyun 1291*4882a593Smuzhiyun struct ql_iscsi_stats { 1292*4882a593Smuzhiyun uint64_t mac_tx_frames; /* 0000–0007 */ 1293*4882a593Smuzhiyun uint64_t mac_tx_bytes; /* 0008–000F */ 1294*4882a593Smuzhiyun uint64_t mac_tx_multicast_frames; /* 0010–0017 */ 1295*4882a593Smuzhiyun uint64_t mac_tx_broadcast_frames; /* 0018–001F */ 1296*4882a593Smuzhiyun uint64_t mac_tx_pause_frames; /* 0020–0027 */ 1297*4882a593Smuzhiyun uint64_t mac_tx_control_frames; /* 0028–002F */ 1298*4882a593Smuzhiyun uint64_t mac_tx_deferral; /* 0030–0037 */ 1299*4882a593Smuzhiyun uint64_t mac_tx_excess_deferral; /* 0038–003F */ 1300*4882a593Smuzhiyun uint64_t mac_tx_late_collision; /* 0040–0047 */ 1301*4882a593Smuzhiyun uint64_t mac_tx_abort; /* 0048–004F */ 1302*4882a593Smuzhiyun uint64_t mac_tx_single_collision; /* 0050–0057 */ 1303*4882a593Smuzhiyun uint64_t mac_tx_multiple_collision; /* 0058–005F */ 1304*4882a593Smuzhiyun uint64_t mac_tx_collision; /* 0060–0067 */ 1305*4882a593Smuzhiyun uint64_t mac_tx_frames_dropped; /* 0068–006F */ 1306*4882a593Smuzhiyun uint64_t mac_tx_jumbo_frames; /* 0070–0077 */ 1307*4882a593Smuzhiyun uint64_t mac_rx_frames; /* 0078–007F */ 1308*4882a593Smuzhiyun uint64_t mac_rx_bytes; /* 0080–0087 */ 1309*4882a593Smuzhiyun uint64_t mac_rx_unknown_control_frames; /* 0088–008F */ 1310*4882a593Smuzhiyun uint64_t mac_rx_pause_frames; /* 0090–0097 */ 1311*4882a593Smuzhiyun uint64_t mac_rx_control_frames; /* 0098–009F */ 1312*4882a593Smuzhiyun uint64_t mac_rx_dribble; /* 00A0–00A7 */ 1313*4882a593Smuzhiyun uint64_t mac_rx_frame_length_error; /* 00A8–00AF */ 1314*4882a593Smuzhiyun uint64_t mac_rx_jabber; /* 00B0–00B7 */ 1315*4882a593Smuzhiyun uint64_t mac_rx_carrier_sense_error; /* 00B8–00BF */ 1316*4882a593Smuzhiyun uint64_t mac_rx_frame_discarded; /* 00C0–00C7 */ 1317*4882a593Smuzhiyun uint64_t mac_rx_frames_dropped; /* 00C8–00CF */ 1318*4882a593Smuzhiyun uint64_t mac_crc_error; /* 00D0–00D7 */ 1319*4882a593Smuzhiyun uint64_t mac_encoding_error; /* 00D8–00DF */ 1320*4882a593Smuzhiyun uint64_t mac_rx_length_error_large; /* 00E0–00E7 */ 1321*4882a593Smuzhiyun uint64_t mac_rx_length_error_small; /* 00E8–00EF */ 1322*4882a593Smuzhiyun uint64_t mac_rx_multicast_frames; /* 00F0–00F7 */ 1323*4882a593Smuzhiyun uint64_t mac_rx_broadcast_frames; /* 00F8–00FF */ 1324*4882a593Smuzhiyun uint64_t ip_tx_packets; /* 0100–0107 */ 1325*4882a593Smuzhiyun uint64_t ip_tx_bytes; /* 0108–010F */ 1326*4882a593Smuzhiyun uint64_t ip_tx_fragments; /* 0110–0117 */ 1327*4882a593Smuzhiyun uint64_t ip_rx_packets; /* 0118–011F */ 1328*4882a593Smuzhiyun uint64_t ip_rx_bytes; /* 0120–0127 */ 1329*4882a593Smuzhiyun uint64_t ip_rx_fragments; /* 0128–012F */ 1330*4882a593Smuzhiyun uint64_t ip_datagram_reassembly; /* 0130–0137 */ 1331*4882a593Smuzhiyun uint64_t ip_invalid_address_error; /* 0138–013F */ 1332*4882a593Smuzhiyun uint64_t ip_error_packets; /* 0140–0147 */ 1333*4882a593Smuzhiyun uint64_t ip_fragrx_overlap; /* 0148–014F */ 1334*4882a593Smuzhiyun uint64_t ip_fragrx_outoforder; /* 0150–0157 */ 1335*4882a593Smuzhiyun uint64_t ip_datagram_reassembly_timeout; /* 0158–015F */ 1336*4882a593Smuzhiyun uint64_t ipv6_tx_packets; /* 0160–0167 */ 1337*4882a593Smuzhiyun uint64_t ipv6_tx_bytes; /* 0168–016F */ 1338*4882a593Smuzhiyun uint64_t ipv6_tx_fragments; /* 0170–0177 */ 1339*4882a593Smuzhiyun uint64_t ipv6_rx_packets; /* 0178–017F */ 1340*4882a593Smuzhiyun uint64_t ipv6_rx_bytes; /* 0180–0187 */ 1341*4882a593Smuzhiyun uint64_t ipv6_rx_fragments; /* 0188–018F */ 1342*4882a593Smuzhiyun uint64_t ipv6_datagram_reassembly; /* 0190–0197 */ 1343*4882a593Smuzhiyun uint64_t ipv6_invalid_address_error; /* 0198–019F */ 1344*4882a593Smuzhiyun uint64_t ipv6_error_packets; /* 01A0–01A7 */ 1345*4882a593Smuzhiyun uint64_t ipv6_fragrx_overlap; /* 01A8–01AF */ 1346*4882a593Smuzhiyun uint64_t ipv6_fragrx_outoforder; /* 01B0–01B7 */ 1347*4882a593Smuzhiyun uint64_t ipv6_datagram_reassembly_timeout; /* 01B8–01BF */ 1348*4882a593Smuzhiyun uint64_t tcp_tx_segments; /* 01C0–01C7 */ 1349*4882a593Smuzhiyun uint64_t tcp_tx_bytes; /* 01C8–01CF */ 1350*4882a593Smuzhiyun uint64_t tcp_rx_segments; /* 01D0–01D7 */ 1351*4882a593Smuzhiyun uint64_t tcp_rx_byte; /* 01D8–01DF */ 1352*4882a593Smuzhiyun uint64_t tcp_duplicate_ack_retx; /* 01E0–01E7 */ 1353*4882a593Smuzhiyun uint64_t tcp_retx_timer_expired; /* 01E8–01EF */ 1354*4882a593Smuzhiyun uint64_t tcp_rx_duplicate_ack; /* 01F0–01F7 */ 1355*4882a593Smuzhiyun uint64_t tcp_rx_pure_ackr; /* 01F8–01FF */ 1356*4882a593Smuzhiyun uint64_t tcp_tx_delayed_ack; /* 0200–0207 */ 1357*4882a593Smuzhiyun uint64_t tcp_tx_pure_ack; /* 0208–020F */ 1358*4882a593Smuzhiyun uint64_t tcp_rx_segment_error; /* 0210–0217 */ 1359*4882a593Smuzhiyun uint64_t tcp_rx_segment_outoforder; /* 0218–021F */ 1360*4882a593Smuzhiyun uint64_t tcp_rx_window_probe; /* 0220–0227 */ 1361*4882a593Smuzhiyun uint64_t tcp_rx_window_update; /* 0228–022F */ 1362*4882a593Smuzhiyun uint64_t tcp_tx_window_probe_persist; /* 0230–0237 */ 1363*4882a593Smuzhiyun uint64_t ecc_error_correction; /* 0238–023F */ 1364*4882a593Smuzhiyun uint64_t iscsi_pdu_tx; /* 0240-0247 */ 1365*4882a593Smuzhiyun uint64_t iscsi_data_bytes_tx; /* 0248-024F */ 1366*4882a593Smuzhiyun uint64_t iscsi_pdu_rx; /* 0250-0257 */ 1367*4882a593Smuzhiyun uint64_t iscsi_data_bytes_rx; /* 0258-025F */ 1368*4882a593Smuzhiyun uint64_t iscsi_io_completed; /* 0260-0267 */ 1369*4882a593Smuzhiyun uint64_t iscsi_unexpected_io_rx; /* 0268-026F */ 1370*4882a593Smuzhiyun uint64_t iscsi_format_error; /* 0270-0277 */ 1371*4882a593Smuzhiyun uint64_t iscsi_hdr_digest_error; /* 0278-027F */ 1372*4882a593Smuzhiyun uint64_t iscsi_data_digest_error; /* 0280-0287 */ 1373*4882a593Smuzhiyun uint64_t iscsi_sequence_error; /* 0288-028F */ 1374*4882a593Smuzhiyun uint32_t tx_cmd_pdu; /* 0290-0293 */ 1375*4882a593Smuzhiyun uint32_t tx_resp_pdu; /* 0294-0297 */ 1376*4882a593Smuzhiyun uint32_t rx_cmd_pdu; /* 0298-029B */ 1377*4882a593Smuzhiyun uint32_t rx_resp_pdu; /* 029C-029F */ 1378*4882a593Smuzhiyun 1379*4882a593Smuzhiyun uint64_t tx_data_octets; /* 02A0-02A7 */ 1380*4882a593Smuzhiyun uint64_t rx_data_octets; /* 02A8-02AF */ 1381*4882a593Smuzhiyun 1382*4882a593Smuzhiyun uint32_t hdr_digest_err; /* 02B0–02B3 */ 1383*4882a593Smuzhiyun uint32_t data_digest_err; /* 02B4–02B7 */ 1384*4882a593Smuzhiyun uint32_t conn_timeout_err; /* 02B8–02BB */ 1385*4882a593Smuzhiyun uint32_t framing_err; /* 02BC–02BF */ 1386*4882a593Smuzhiyun 1387*4882a593Smuzhiyun uint32_t tx_nopout_pdus; /* 02C0–02C3 */ 1388*4882a593Smuzhiyun uint32_t tx_scsi_cmd_pdus; /* 02C4–02C7 */ 1389*4882a593Smuzhiyun uint32_t tx_tmf_cmd_pdus; /* 02C8–02CB */ 1390*4882a593Smuzhiyun uint32_t tx_login_cmd_pdus; /* 02CC–02CF */ 1391*4882a593Smuzhiyun uint32_t tx_text_cmd_pdus; /* 02D0–02D3 */ 1392*4882a593Smuzhiyun uint32_t tx_scsi_write_pdus; /* 02D4–02D7 */ 1393*4882a593Smuzhiyun uint32_t tx_logout_cmd_pdus; /* 02D8–02DB */ 1394*4882a593Smuzhiyun uint32_t tx_snack_req_pdus; /* 02DC–02DF */ 1395*4882a593Smuzhiyun 1396*4882a593Smuzhiyun uint32_t rx_nopin_pdus; /* 02E0–02E3 */ 1397*4882a593Smuzhiyun uint32_t rx_scsi_resp_pdus; /* 02E4–02E7 */ 1398*4882a593Smuzhiyun uint32_t rx_tmf_resp_pdus; /* 02E8–02EB */ 1399*4882a593Smuzhiyun uint32_t rx_login_resp_pdus; /* 02EC–02EF */ 1400*4882a593Smuzhiyun uint32_t rx_text_resp_pdus; /* 02F0–02F3 */ 1401*4882a593Smuzhiyun uint32_t rx_scsi_read_pdus; /* 02F4–02F7 */ 1402*4882a593Smuzhiyun uint32_t rx_logout_resp_pdus; /* 02F8–02FB */ 1403*4882a593Smuzhiyun 1404*4882a593Smuzhiyun uint32_t rx_r2t_pdus; /* 02FC–02FF */ 1405*4882a593Smuzhiyun uint32_t rx_async_pdus; /* 0300–0303 */ 1406*4882a593Smuzhiyun uint32_t rx_reject_pdus; /* 0304–0307 */ 1407*4882a593Smuzhiyun 1408*4882a593Smuzhiyun uint8_t reserved2[264]; /* 0x0308 - 0x040F */ 1409*4882a593Smuzhiyun }; 1410*4882a593Smuzhiyun 1411*4882a593Smuzhiyun #define QLA8XXX_DBG_STATE_ARRAY_LEN 16 1412*4882a593Smuzhiyun #define QLA8XXX_DBG_CAP_SIZE_ARRAY_LEN 8 1413*4882a593Smuzhiyun #define QLA8XXX_DBG_RSVD_ARRAY_LEN 8 1414*4882a593Smuzhiyun #define QLA83XX_DBG_OCM_WNDREG_ARRAY_LEN 16 1415*4882a593Smuzhiyun #define QLA83XX_SS_OCM_WNDREG_INDEX 3 1416*4882a593Smuzhiyun #define QLA83XX_SS_PCI_INDEX 0 1417*4882a593Smuzhiyun #define QLA8022_TEMPLATE_CAP_OFFSET 172 1418*4882a593Smuzhiyun #define QLA83XX_TEMPLATE_CAP_OFFSET 268 1419*4882a593Smuzhiyun #define QLA80XX_TEMPLATE_RESERVED_BITS 16 1420*4882a593Smuzhiyun 1421*4882a593Smuzhiyun struct qla4_8xxx_minidump_template_hdr { 1422*4882a593Smuzhiyun uint32_t entry_type; 1423*4882a593Smuzhiyun uint32_t first_entry_offset; 1424*4882a593Smuzhiyun uint32_t size_of_template; 1425*4882a593Smuzhiyun uint32_t capture_debug_level; 1426*4882a593Smuzhiyun uint32_t num_of_entries; 1427*4882a593Smuzhiyun uint32_t version; 1428*4882a593Smuzhiyun uint32_t driver_timestamp; 1429*4882a593Smuzhiyun uint32_t checksum; 1430*4882a593Smuzhiyun 1431*4882a593Smuzhiyun uint32_t driver_capture_mask; 1432*4882a593Smuzhiyun uint32_t driver_info_word2; 1433*4882a593Smuzhiyun uint32_t driver_info_word3; 1434*4882a593Smuzhiyun uint32_t driver_info_word4; 1435*4882a593Smuzhiyun 1436*4882a593Smuzhiyun uint32_t saved_state_array[QLA8XXX_DBG_STATE_ARRAY_LEN]; 1437*4882a593Smuzhiyun uint32_t capture_size_array[QLA8XXX_DBG_CAP_SIZE_ARRAY_LEN]; 1438*4882a593Smuzhiyun uint32_t ocm_window_reg[QLA83XX_DBG_OCM_WNDREG_ARRAY_LEN]; 1439*4882a593Smuzhiyun uint32_t capabilities[QLA80XX_TEMPLATE_RESERVED_BITS]; 1440*4882a593Smuzhiyun }; 1441*4882a593Smuzhiyun 1442*4882a593Smuzhiyun #endif /* _QLA4X_FW_H */ 1443