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 #ifndef __QLA_NX_H 7*4882a593Smuzhiyun #define __QLA_NX_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun /* 10*4882a593Smuzhiyun * Following are the states of the Phantom. Phantom will set them and 11*4882a593Smuzhiyun * Host will read to check if the fields are correct. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun #define PHAN_INITIALIZE_FAILED 0xffff 14*4882a593Smuzhiyun #define PHAN_INITIALIZE_COMPLETE 0xff01 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* Host writes the following to notify that it has done the init-handshake */ 17*4882a593Smuzhiyun #define PHAN_INITIALIZE_ACK 0xf00f 18*4882a593Smuzhiyun #define PHAN_PEG_RCV_INITIALIZED 0xff01 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /*CRB_RELATED*/ 21*4882a593Smuzhiyun #define QLA82XX_CRB_BASE (QLA82XX_CAM_RAM(0x200)) 22*4882a593Smuzhiyun #define QLA82XX_REG(X) (QLA82XX_CRB_BASE+(X)) 23*4882a593Smuzhiyun #define CRB_CMDPEG_STATE QLA82XX_REG(0x50) 24*4882a593Smuzhiyun #define CRB_RCVPEG_STATE QLA82XX_REG(0x13c) 25*4882a593Smuzhiyun #define CRB_DMA_SHIFT QLA82XX_REG(0xcc) 26*4882a593Smuzhiyun #define CRB_TEMP_STATE QLA82XX_REG(0x1b4) 27*4882a593Smuzhiyun #define CRB_CMDPEG_CHECK_RETRY_COUNT 60 28*4882a593Smuzhiyun #define CRB_CMDPEG_CHECK_DELAY 500 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define qla82xx_get_temp_val(x) ((x) >> 16) 31*4882a593Smuzhiyun #define qla82xx_get_temp_state(x) ((x) & 0xffff) 32*4882a593Smuzhiyun #define qla82xx_encode_temp(val, state) (((val) << 16) | (state)) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* 35*4882a593Smuzhiyun * Temperature control. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun enum { 38*4882a593Smuzhiyun QLA82XX_TEMP_NORMAL = 0x1, /* Normal operating range */ 39*4882a593Smuzhiyun QLA82XX_TEMP_WARN, /* Sound alert, temperature getting high */ 40*4882a593Smuzhiyun QLA82XX_TEMP_PANIC /* Fatal error, hardware has shut down. */ 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define CRB_NIU_XG_PAUSE_CTL_P0 0x1 44*4882a593Smuzhiyun #define CRB_NIU_XG_PAUSE_CTL_P1 0x8 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define QLA82XX_HW_H0_CH_HUB_ADR 0x05 47*4882a593Smuzhiyun #define QLA82XX_HW_H1_CH_HUB_ADR 0x0E 48*4882a593Smuzhiyun #define QLA82XX_HW_H2_CH_HUB_ADR 0x03 49*4882a593Smuzhiyun #define QLA82XX_HW_H3_CH_HUB_ADR 0x01 50*4882a593Smuzhiyun #define QLA82XX_HW_H4_CH_HUB_ADR 0x06 51*4882a593Smuzhiyun #define QLA82XX_HW_H5_CH_HUB_ADR 0x07 52*4882a593Smuzhiyun #define QLA82XX_HW_H6_CH_HUB_ADR 0x08 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* Hub 0 */ 55*4882a593Smuzhiyun #define QLA82XX_HW_MN_CRB_AGT_ADR 0x15 56*4882a593Smuzhiyun #define QLA82XX_HW_MS_CRB_AGT_ADR 0x25 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* Hub 1 */ 59*4882a593Smuzhiyun #define QLA82XX_HW_PS_CRB_AGT_ADR 0x73 60*4882a593Smuzhiyun #define QLA82XX_HW_QMS_CRB_AGT_ADR 0x00 61*4882a593Smuzhiyun #define QLA82XX_HW_RPMX3_CRB_AGT_ADR 0x0b 62*4882a593Smuzhiyun #define QLA82XX_HW_SQGS0_CRB_AGT_ADR 0x01 63*4882a593Smuzhiyun #define QLA82XX_HW_SQGS1_CRB_AGT_ADR 0x02 64*4882a593Smuzhiyun #define QLA82XX_HW_SQGS2_CRB_AGT_ADR 0x03 65*4882a593Smuzhiyun #define QLA82XX_HW_SQGS3_CRB_AGT_ADR 0x04 66*4882a593Smuzhiyun #define QLA82XX_HW_C2C0_CRB_AGT_ADR 0x58 67*4882a593Smuzhiyun #define QLA82XX_HW_C2C1_CRB_AGT_ADR 0x59 68*4882a593Smuzhiyun #define QLA82XX_HW_C2C2_CRB_AGT_ADR 0x5a 69*4882a593Smuzhiyun #define QLA82XX_HW_RPMX2_CRB_AGT_ADR 0x0a 70*4882a593Smuzhiyun #define QLA82XX_HW_RPMX4_CRB_AGT_ADR 0x0c 71*4882a593Smuzhiyun #define QLA82XX_HW_RPMX7_CRB_AGT_ADR 0x0f 72*4882a593Smuzhiyun #define QLA82XX_HW_RPMX9_CRB_AGT_ADR 0x12 73*4882a593Smuzhiyun #define QLA82XX_HW_SMB_CRB_AGT_ADR 0x18 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* Hub 2 */ 76*4882a593Smuzhiyun #define QLA82XX_HW_NIU_CRB_AGT_ADR 0x31 77*4882a593Smuzhiyun #define QLA82XX_HW_I2C0_CRB_AGT_ADR 0x19 78*4882a593Smuzhiyun #define QLA82XX_HW_I2C1_CRB_AGT_ADR 0x29 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define QLA82XX_HW_SN_CRB_AGT_ADR 0x10 81*4882a593Smuzhiyun #define QLA82XX_HW_I2Q_CRB_AGT_ADR 0x20 82*4882a593Smuzhiyun #define QLA82XX_HW_LPC_CRB_AGT_ADR 0x22 83*4882a593Smuzhiyun #define QLA82XX_HW_ROMUSB_CRB_AGT_ADR 0x21 84*4882a593Smuzhiyun #define QLA82XX_HW_QM_CRB_AGT_ADR 0x66 85*4882a593Smuzhiyun #define QLA82XX_HW_SQG0_CRB_AGT_ADR 0x60 86*4882a593Smuzhiyun #define QLA82XX_HW_SQG1_CRB_AGT_ADR 0x61 87*4882a593Smuzhiyun #define QLA82XX_HW_SQG2_CRB_AGT_ADR 0x62 88*4882a593Smuzhiyun #define QLA82XX_HW_SQG3_CRB_AGT_ADR 0x63 89*4882a593Smuzhiyun #define QLA82XX_HW_RPMX1_CRB_AGT_ADR 0x09 90*4882a593Smuzhiyun #define QLA82XX_HW_RPMX5_CRB_AGT_ADR 0x0d 91*4882a593Smuzhiyun #define QLA82XX_HW_RPMX6_CRB_AGT_ADR 0x0e 92*4882a593Smuzhiyun #define QLA82XX_HW_RPMX8_CRB_AGT_ADR 0x11 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* Hub 3 */ 95*4882a593Smuzhiyun #define QLA82XX_HW_PH_CRB_AGT_ADR 0x1A 96*4882a593Smuzhiyun #define QLA82XX_HW_SRE_CRB_AGT_ADR 0x50 97*4882a593Smuzhiyun #define QLA82XX_HW_EG_CRB_AGT_ADR 0x51 98*4882a593Smuzhiyun #define QLA82XX_HW_RPMX0_CRB_AGT_ADR 0x08 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Hub 4 */ 101*4882a593Smuzhiyun #define QLA82XX_HW_PEGN0_CRB_AGT_ADR 0x40 102*4882a593Smuzhiyun #define QLA82XX_HW_PEGN1_CRB_AGT_ADR 0x41 103*4882a593Smuzhiyun #define QLA82XX_HW_PEGN2_CRB_AGT_ADR 0x42 104*4882a593Smuzhiyun #define QLA82XX_HW_PEGN3_CRB_AGT_ADR 0x43 105*4882a593Smuzhiyun #define QLA82XX_HW_PEGNI_CRB_AGT_ADR 0x44 106*4882a593Smuzhiyun #define QLA82XX_HW_PEGND_CRB_AGT_ADR 0x45 107*4882a593Smuzhiyun #define QLA82XX_HW_PEGNC_CRB_AGT_ADR 0x46 108*4882a593Smuzhiyun #define QLA82XX_HW_PEGR0_CRB_AGT_ADR 0x47 109*4882a593Smuzhiyun #define QLA82XX_HW_PEGR1_CRB_AGT_ADR 0x48 110*4882a593Smuzhiyun #define QLA82XX_HW_PEGR2_CRB_AGT_ADR 0x49 111*4882a593Smuzhiyun #define QLA82XX_HW_PEGR3_CRB_AGT_ADR 0x4a 112*4882a593Smuzhiyun #define QLA82XX_HW_PEGN4_CRB_AGT_ADR 0x4b 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /* Hub 5 */ 115*4882a593Smuzhiyun #define QLA82XX_HW_PEGS0_CRB_AGT_ADR 0x40 116*4882a593Smuzhiyun #define QLA82XX_HW_PEGS1_CRB_AGT_ADR 0x41 117*4882a593Smuzhiyun #define QLA82XX_HW_PEGS2_CRB_AGT_ADR 0x42 118*4882a593Smuzhiyun #define QLA82XX_HW_PEGS3_CRB_AGT_ADR 0x43 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define QLA82XX_HW_PEGSI_CRB_AGT_ADR 0x44 121*4882a593Smuzhiyun #define QLA82XX_HW_PEGSD_CRB_AGT_ADR 0x45 122*4882a593Smuzhiyun #define QLA82XX_HW_PEGSC_CRB_AGT_ADR 0x46 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* Hub 6 */ 125*4882a593Smuzhiyun #define QLA82XX_HW_CAS0_CRB_AGT_ADR 0x46 126*4882a593Smuzhiyun #define QLA82XX_HW_CAS1_CRB_AGT_ADR 0x47 127*4882a593Smuzhiyun #define QLA82XX_HW_CAS2_CRB_AGT_ADR 0x48 128*4882a593Smuzhiyun #define QLA82XX_HW_CAS3_CRB_AGT_ADR 0x49 129*4882a593Smuzhiyun #define QLA82XX_HW_NCM_CRB_AGT_ADR 0x16 130*4882a593Smuzhiyun #define QLA82XX_HW_TMR_CRB_AGT_ADR 0x17 131*4882a593Smuzhiyun #define QLA82XX_HW_XDMA_CRB_AGT_ADR 0x05 132*4882a593Smuzhiyun #define QLA82XX_HW_OCM0_CRB_AGT_ADR 0x06 133*4882a593Smuzhiyun #define QLA82XX_HW_OCM1_CRB_AGT_ADR 0x07 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* This field defines PCI/X adr [25:20] of agents on the CRB */ 136*4882a593Smuzhiyun /* */ 137*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PH 0 138*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PS 1 139*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_MN 2 140*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_MS 3 141*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SRE 5 142*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_NIU 6 143*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_QMN 7 144*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN0 8 145*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN1 9 146*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN2 10 147*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN3 11 148*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_QMS 12 149*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS0 13 150*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS1 14 151*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS2 15 152*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS3 16 153*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN0 17 154*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN1 18 155*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN2 19 156*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN3 20 157*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN4 QLA82XX_HW_PX_MAP_CRB_SQS2 158*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGND 21 159*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGNI 22 160*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS0 23 161*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS1 24 162*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS2 25 163*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS3 26 164*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGSD 27 165*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGSI 28 166*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SN 29 167*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_EG 31 168*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PH2 32 169*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PS2 33 170*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAM 34 171*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS0 35 172*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS1 36 173*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS2 37 174*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_C2C0 38 175*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_C2C1 39 176*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_TIMR 40 177*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX1 42 178*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX2 43 179*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX3 44 180*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX4 45 181*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX5 46 182*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX6 47 183*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX7 48 184*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_XDMA 49 185*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2Q 50 186*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_ROMUSB 51 187*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS3 52 188*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX0 53 189*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX8 54 190*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX9 55 191*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_OCM0 56 192*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_OCM1 57 193*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SMB 58 194*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2C0 59 195*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2C1 60 196*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_LPC 61 197*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGNC 62 198*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR0 63 199*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR1 4 200*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR2 30 201*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR3 41 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /* This field defines CRB adr [31:20] of the agents */ 204*4882a593Smuzhiyun /* */ 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_MN ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \ 207*4882a593Smuzhiyun QLA82XX_HW_MN_CRB_AGT_ADR) 208*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PH ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \ 209*4882a593Smuzhiyun QLA82XX_HW_PH_CRB_AGT_ADR) 210*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_MS ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \ 211*4882a593Smuzhiyun QLA82XX_HW_MS_CRB_AGT_ADR) 212*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PS ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 213*4882a593Smuzhiyun QLA82XX_HW_PS_CRB_AGT_ADR) 214*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SS ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 215*4882a593Smuzhiyun QLA82XX_HW_SS_CRB_AGT_ADR) 216*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX3 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 217*4882a593Smuzhiyun QLA82XX_HW_RPMX3_CRB_AGT_ADR) 218*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMS ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 219*4882a593Smuzhiyun QLA82XX_HW_QMS_CRB_AGT_ADR) 220*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS0 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 221*4882a593Smuzhiyun QLA82XX_HW_SQGS0_CRB_AGT_ADR) 222*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS1 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 223*4882a593Smuzhiyun QLA82XX_HW_SQGS1_CRB_AGT_ADR) 224*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS2 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 225*4882a593Smuzhiyun QLA82XX_HW_SQGS2_CRB_AGT_ADR) 226*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS3 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 227*4882a593Smuzhiyun QLA82XX_HW_SQGS3_CRB_AGT_ADR) 228*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C0 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 229*4882a593Smuzhiyun QLA82XX_HW_C2C0_CRB_AGT_ADR) 230*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C1 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 231*4882a593Smuzhiyun QLA82XX_HW_C2C1_CRB_AGT_ADR) 232*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX2 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 233*4882a593Smuzhiyun QLA82XX_HW_RPMX2_CRB_AGT_ADR) 234*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX4 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 235*4882a593Smuzhiyun QLA82XX_HW_RPMX4_CRB_AGT_ADR) 236*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX7 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 237*4882a593Smuzhiyun QLA82XX_HW_RPMX7_CRB_AGT_ADR) 238*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX9 ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 239*4882a593Smuzhiyun QLA82XX_HW_RPMX9_CRB_AGT_ADR) 240*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SMB ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \ 241*4882a593Smuzhiyun QLA82XX_HW_SMB_CRB_AGT_ADR) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_NIU ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \ 244*4882a593Smuzhiyun QLA82XX_HW_NIU_CRB_AGT_ADR) 245*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C0 ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \ 246*4882a593Smuzhiyun QLA82XX_HW_I2C0_CRB_AGT_ADR) 247*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C1 ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \ 248*4882a593Smuzhiyun QLA82XX_HW_I2C1_CRB_AGT_ADR) 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SRE ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 251*4882a593Smuzhiyun QLA82XX_HW_SRE_CRB_AGT_ADR) 252*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_EG ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 253*4882a593Smuzhiyun QLA82XX_HW_EG_CRB_AGT_ADR) 254*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX0 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 255*4882a593Smuzhiyun QLA82XX_HW_RPMX0_CRB_AGT_ADR) 256*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMN ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 257*4882a593Smuzhiyun QLA82XX_HW_QM_CRB_AGT_ADR) 258*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN0 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 259*4882a593Smuzhiyun QLA82XX_HW_SQG0_CRB_AGT_ADR) 260*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN1 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 261*4882a593Smuzhiyun QLA82XX_HW_SQG1_CRB_AGT_ADR) 262*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN2 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 263*4882a593Smuzhiyun QLA82XX_HW_SQG2_CRB_AGT_ADR) 264*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN3 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 265*4882a593Smuzhiyun QLA82XX_HW_SQG3_CRB_AGT_ADR) 266*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX1 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 267*4882a593Smuzhiyun QLA82XX_HW_RPMX1_CRB_AGT_ADR) 268*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX5 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 269*4882a593Smuzhiyun QLA82XX_HW_RPMX5_CRB_AGT_ADR) 270*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX6 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 271*4882a593Smuzhiyun QLA82XX_HW_RPMX6_CRB_AGT_ADR) 272*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX8 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 273*4882a593Smuzhiyun QLA82XX_HW_RPMX8_CRB_AGT_ADR) 274*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS0 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 275*4882a593Smuzhiyun QLA82XX_HW_CAS0_CRB_AGT_ADR) 276*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS1 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 277*4882a593Smuzhiyun QLA82XX_HW_CAS1_CRB_AGT_ADR) 278*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS2 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 279*4882a593Smuzhiyun QLA82XX_HW_CAS2_CRB_AGT_ADR) 280*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS3 ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \ 281*4882a593Smuzhiyun QLA82XX_HW_CAS3_CRB_AGT_ADR) 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNI ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 284*4882a593Smuzhiyun QLA82XX_HW_PEGNI_CRB_AGT_ADR) 285*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGND ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 286*4882a593Smuzhiyun QLA82XX_HW_PEGND_CRB_AGT_ADR) 287*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN0 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 288*4882a593Smuzhiyun QLA82XX_HW_PEGN0_CRB_AGT_ADR) 289*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN1 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 290*4882a593Smuzhiyun QLA82XX_HW_PEGN1_CRB_AGT_ADR) 291*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN2 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 292*4882a593Smuzhiyun QLA82XX_HW_PEGN2_CRB_AGT_ADR) 293*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN3 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 294*4882a593Smuzhiyun QLA82XX_HW_PEGN3_CRB_AGT_ADR) 295*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN4 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 296*4882a593Smuzhiyun QLA82XX_HW_PEGN4_CRB_AGT_ADR) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNC ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 299*4882a593Smuzhiyun QLA82XX_HW_PEGNC_CRB_AGT_ADR) 300*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR0 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 301*4882a593Smuzhiyun QLA82XX_HW_PEGR0_CRB_AGT_ADR) 302*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR1 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 303*4882a593Smuzhiyun QLA82XX_HW_PEGR1_CRB_AGT_ADR) 304*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR2 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 305*4882a593Smuzhiyun QLA82XX_HW_PEGR2_CRB_AGT_ADR) 306*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR3 ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \ 307*4882a593Smuzhiyun QLA82XX_HW_PEGR3_CRB_AGT_ADR) 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSI ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 310*4882a593Smuzhiyun QLA82XX_HW_PEGSI_CRB_AGT_ADR) 311*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSD ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 312*4882a593Smuzhiyun QLA82XX_HW_PEGSD_CRB_AGT_ADR) 313*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS0 ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 314*4882a593Smuzhiyun QLA82XX_HW_PEGS0_CRB_AGT_ADR) 315*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS1 ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 316*4882a593Smuzhiyun QLA82XX_HW_PEGS1_CRB_AGT_ADR) 317*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS2 ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 318*4882a593Smuzhiyun QLA82XX_HW_PEGS2_CRB_AGT_ADR) 319*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS3 ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 320*4882a593Smuzhiyun QLA82XX_HW_PEGS3_CRB_AGT_ADR) 321*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSC ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \ 322*4882a593Smuzhiyun QLA82XX_HW_PEGSC_CRB_AGT_ADR) 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAM ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 325*4882a593Smuzhiyun QLA82XX_HW_NCM_CRB_AGT_ADR) 326*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_TIMR ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 327*4882a593Smuzhiyun QLA82XX_HW_TMR_CRB_AGT_ADR) 328*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_XDMA ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 329*4882a593Smuzhiyun QLA82XX_HW_XDMA_CRB_AGT_ADR) 330*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SN ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 331*4882a593Smuzhiyun QLA82XX_HW_SN_CRB_AGT_ADR) 332*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2Q ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 333*4882a593Smuzhiyun QLA82XX_HW_I2Q_CRB_AGT_ADR) 334*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_ROMUSB ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 335*4882a593Smuzhiyun QLA82XX_HW_ROMUSB_CRB_AGT_ADR) 336*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM0 ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 337*4882a593Smuzhiyun QLA82XX_HW_OCM0_CRB_AGT_ADR) 338*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM1 ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 339*4882a593Smuzhiyun QLA82XX_HW_OCM1_CRB_AGT_ADR) 340*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_LPC ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \ 341*4882a593Smuzhiyun QLA82XX_HW_LPC_CRB_AGT_ADR) 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun #define ROMUSB_GLB (QLA82XX_CRB_ROMUSB + 0x00000) 344*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_PEGTUNE_DONE (ROMUSB_GLB + 0x005c) 345*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_STATUS (ROMUSB_GLB + 0x0004) 346*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_SW_RESET (ROMUSB_GLB + 0x0008) 347*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_ADDRESS (ROMUSB_ROM + 0x0008) 348*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_WDATA (ROMUSB_ROM + 0x000c) 349*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_ABYTE_CNT (ROMUSB_ROM + 0x0010) 350*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT (ROMUSB_ROM + 0x0014) 351*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_RDATA (ROMUSB_ROM + 0x0018) 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun #define ROMUSB_ROM (QLA82XX_CRB_ROMUSB + 0x10000) 354*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_INSTR_OPCODE (ROMUSB_ROM + 0x0004) 355*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_CAS_RST (ROMUSB_GLB + 0x0038) 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* Lock IDs for ROM lock */ 358*4882a593Smuzhiyun #define ROM_LOCK_DRIVER 0x0d417340 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun #define QLA82XX_PCI_CRB_WINDOWSIZE 0x00100000 /* all are 1MB windows */ 361*4882a593Smuzhiyun #define QLA82XX_PCI_CRB_WINDOW(A) (QLA82XX_PCI_CRBSPACE + \ 362*4882a593Smuzhiyun (A)*QLA82XX_PCI_CRB_WINDOWSIZE) 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_0 \ 365*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C0) 366*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_1 \ 367*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C1) 368*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_2 \ 369*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C2) 370*4882a593Smuzhiyun #define QLA82XX_CRB_CAM \ 371*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAM) 372*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER \ 373*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS) 374*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_0 \ 375*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS0) 376*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_1 \ 377*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS1) 378*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_2 \ 379*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS2) 380*4882a593Smuzhiyun #define QLA82XX_CRB_DDR_MD \ 381*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MS) 382*4882a593Smuzhiyun #define QLA82XX_CRB_DDR_NET \ 383*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MN) 384*4882a593Smuzhiyun #define QLA82XX_CRB_EPG \ 385*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_EG) 386*4882a593Smuzhiyun #define QLA82XX_CRB_I2Q \ 387*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2Q) 388*4882a593Smuzhiyun #define QLA82XX_CRB_NIU \ 389*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_NIU) 390*4882a593Smuzhiyun /* HACK upon HACK upon HACK (for PCIE builds) */ 391*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_HOST \ 392*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH) 393*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_HOST2 \ 394*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH2) 395*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_MD \ 396*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS) 397*4882a593Smuzhiyun #define QLA82XX_CRB_PCIE QLA82XX_CRB_PCIX_MD 398*4882a593Smuzhiyun /* window 1 pcie slot */ 399*4882a593Smuzhiyun #define QLA82XX_CRB_PCIE2 \ 400*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS2) 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_0 \ 403*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS0) 404*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_1 \ 405*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS1) 406*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_2 \ 407*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS2) 408*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_3 \ 409*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3) 410*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_3 \ 411*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3) 412*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_D \ 413*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSD) 414*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_I \ 415*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSI) 416*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_0 \ 417*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN0) 418*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_1 \ 419*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN1) 420*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_2 \ 421*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN2) 422*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_3 \ 423*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN3) 424*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_4 \ 425*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN4) 426*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_D \ 427*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGND) 428*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_I \ 429*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGNI) 430*4882a593Smuzhiyun #define QLA82XX_CRB_PQM_MD \ 431*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMS) 432*4882a593Smuzhiyun #define QLA82XX_CRB_PQM_NET \ 433*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMN) 434*4882a593Smuzhiyun #define QLA82XX_CRB_QDR_MD \ 435*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SS) 436*4882a593Smuzhiyun #define QLA82XX_CRB_QDR_NET \ 437*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SN) 438*4882a593Smuzhiyun #define QLA82XX_CRB_ROMUSB \ 439*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_ROMUSB) 440*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_0 \ 441*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX0) 442*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_1 \ 443*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX1) 444*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_2 \ 445*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX2) 446*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_3 \ 447*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX3) 448*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_4 \ 449*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX4) 450*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_5 \ 451*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX5) 452*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_6 \ 453*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX6) 454*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_7 \ 455*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX7) 456*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_0 \ 457*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS0) 458*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_1 \ 459*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS1) 460*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_2 \ 461*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS2) 462*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_3 \ 463*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS3) 464*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_0 \ 465*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN0) 466*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_1 \ 467*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN1) 468*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_2 \ 469*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN2) 470*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_3 \ 471*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN3) 472*4882a593Smuzhiyun #define QLA82XX_CRB_SRE \ 473*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SRE) 474*4882a593Smuzhiyun #define QLA82XX_CRB_TIMER \ 475*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_TIMR) 476*4882a593Smuzhiyun #define QLA82XX_CRB_XDMA \ 477*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_XDMA) 478*4882a593Smuzhiyun #define QLA82XX_CRB_I2C0 \ 479*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C0) 480*4882a593Smuzhiyun #define QLA82XX_CRB_I2C1 \ 481*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C1) 482*4882a593Smuzhiyun #define QLA82XX_CRB_OCM0 \ 483*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_OCM0) 484*4882a593Smuzhiyun #define QLA82XX_CRB_SMB \ 485*4882a593Smuzhiyun QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SMB) 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun #define QLA82XX_CRB_MAX QLA82XX_PCI_CRB_WINDOW(64) 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun /* 490*4882a593Smuzhiyun * ====================== BASE ADDRESSES ON-CHIP ====================== 491*4882a593Smuzhiyun * Base addresses of major components on-chip. 492*4882a593Smuzhiyun * ====================== BASE ADDRESSES ON-CHIP ====================== 493*4882a593Smuzhiyun */ 494*4882a593Smuzhiyun #define QLA8XXX_ADDR_DDR_NET (0x0000000000000000ULL) 495*4882a593Smuzhiyun #define QLA8XXX_ADDR_DDR_NET_MAX (0x000000000fffffffULL) 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun /* Imbus address bit used to indicate a host address. This bit is 498*4882a593Smuzhiyun * eliminated by the pcie bar and bar select before presentation 499*4882a593Smuzhiyun * over pcie. */ 500*4882a593Smuzhiyun /* host memory via IMBUS */ 501*4882a593Smuzhiyun #define QLA82XX_P2_ADDR_PCIE (0x0000000800000000ULL) 502*4882a593Smuzhiyun #define QLA82XX_P3_ADDR_PCIE (0x0000008000000000ULL) 503*4882a593Smuzhiyun #define QLA82XX_ADDR_PCIE_MAX (0x0000000FFFFFFFFFULL) 504*4882a593Smuzhiyun #define QLA8XXX_ADDR_OCM0 (0x0000000200000000ULL) 505*4882a593Smuzhiyun #define QLA8XXX_ADDR_OCM0_MAX (0x00000002000fffffULL) 506*4882a593Smuzhiyun #define QLA8XXX_ADDR_OCM1 (0x0000000200400000ULL) 507*4882a593Smuzhiyun #define QLA8XXX_ADDR_OCM1_MAX (0x00000002004fffffULL) 508*4882a593Smuzhiyun #define QLA8XXX_ADDR_QDR_NET (0x0000000300000000ULL) 509*4882a593Smuzhiyun 510*4882a593Smuzhiyun #define QLA82XX_P2_ADDR_QDR_NET_MAX (0x00000003001fffffULL) 511*4882a593Smuzhiyun #define QLA82XX_P3_ADDR_QDR_NET_MAX (0x0000000303ffffffULL) 512*4882a593Smuzhiyun #define QLA8XXX_ADDR_QDR_NET_MAX (0x0000000307ffffffULL) 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun #define QLA82XX_PCI_CRBSPACE (unsigned long)0x06000000 515*4882a593Smuzhiyun #define QLA82XX_PCI_DIRECT_CRB (unsigned long)0x04400000 516*4882a593Smuzhiyun #define QLA82XX_PCI_CAMQM (unsigned long)0x04800000 517*4882a593Smuzhiyun #define QLA82XX_PCI_CAMQM_MAX (unsigned long)0x04ffffff 518*4882a593Smuzhiyun #define QLA82XX_PCI_DDR_NET (unsigned long)0x00000000 519*4882a593Smuzhiyun #define QLA82XX_PCI_QDR_NET (unsigned long)0x04000000 520*4882a593Smuzhiyun #define QLA82XX_PCI_QDR_NET_MAX (unsigned long)0x043fffff 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun /* PCI Windowing for DDR regions. */ 523*4882a593Smuzhiyun #define QLA8XXX_ADDR_IN_RANGE(addr, low, high) \ 524*4882a593Smuzhiyun (((addr) <= (high)) && ((addr) >= (low))) 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun /* 527*4882a593Smuzhiyun * Register offsets for MN 528*4882a593Smuzhiyun */ 529*4882a593Smuzhiyun #define MIU_CONTROL (0x000) 530*4882a593Smuzhiyun #define MIU_TAG (0x004) 531*4882a593Smuzhiyun #define MIU_TEST_AGT_CTRL (0x090) 532*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_LO (0x094) 533*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_HI (0x098) 534*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_LO (0x0a0) 535*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_HI (0x0a4) 536*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA(i) (0x0a0+(4*(i))) 537*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA_LO (0x0a8) 538*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA_HI (0x0ac) 539*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA(i) (0x0a8+(4*(i))) 540*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_MASK 0xfffffff8 541*4882a593Smuzhiyun #define MIU_TEST_AGT_UPPER_ADDR(off) (0) 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun /* MIU_TEST_AGT_CTRL flags. work for SIU as well */ 544*4882a593Smuzhiyun #define MIU_TA_CTL_START 1 545*4882a593Smuzhiyun #define MIU_TA_CTL_ENABLE 2 546*4882a593Smuzhiyun #define MIU_TA_CTL_WRITE 4 547*4882a593Smuzhiyun #define MIU_TA_CTL_BUSY 8 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun #define MIU_TA_CTL_WRITE_ENABLE (MIU_TA_CTL_WRITE | MIU_TA_CTL_ENABLE) 550*4882a593Smuzhiyun #define MIU_TA_CTL_WRITE_START (MIU_TA_CTL_WRITE | MIU_TA_CTL_ENABLE |\ 551*4882a593Smuzhiyun MIU_TA_CTL_START) 552*4882a593Smuzhiyun #define MIU_TA_CTL_START_ENABLE (MIU_TA_CTL_START | MIU_TA_CTL_ENABLE) 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun /*CAM RAM */ 555*4882a593Smuzhiyun # define QLA82XX_CAM_RAM_BASE (QLA82XX_CRB_CAM + 0x02000) 556*4882a593Smuzhiyun # define QLA82XX_CAM_RAM(reg) (QLA82XX_CAM_RAM_BASE + (reg)) 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun #define QLA82XX_PORT_MODE_ADDR (QLA82XX_CAM_RAM(0x24)) 559*4882a593Smuzhiyun #define QLA82XX_PEG_HALT_STATUS1 (QLA82XX_CAM_RAM(0xa8)) 560*4882a593Smuzhiyun #define QLA82XX_PEG_HALT_STATUS2 (QLA82XX_CAM_RAM(0xac)) 561*4882a593Smuzhiyun #define QLA82XX_PEG_ALIVE_COUNTER (QLA82XX_CAM_RAM(0xb0)) 562*4882a593Smuzhiyun #define QLA82XX_CAM_RAM_DB1 (QLA82XX_CAM_RAM(0x1b0)) 563*4882a593Smuzhiyun #define QLA82XX_CAM_RAM_DB2 (QLA82XX_CAM_RAM(0x1b4)) 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun #define HALT_STATUS_UNRECOVERABLE 0x80000000 566*4882a593Smuzhiyun #define HALT_STATUS_RECOVERABLE 0x40000000 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun #define QLA82XX_ROM_LOCK_ID (QLA82XX_CAM_RAM(0x100)) 570*4882a593Smuzhiyun #define QLA82XX_CRB_WIN_LOCK_ID (QLA82XX_CAM_RAM(0x124)) 571*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_MAJOR (QLA82XX_CAM_RAM(0x150)) 572*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_MINOR (QLA82XX_CAM_RAM(0x154)) 573*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_SUB (QLA82XX_CAM_RAM(0x158)) 574*4882a593Smuzhiyun #define QLA82XX_PCIE_REG(reg) (QLA82XX_CRB_PCIE + (reg)) 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun /* Driver Coexistence Defines */ 577*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_ACTIVE (QLA82XX_CAM_RAM(0x138)) 578*4882a593Smuzhiyun #define QLA82XX_CRB_DEV_STATE (QLA82XX_CAM_RAM(0x140)) 579*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_STATE (QLA82XX_CAM_RAM(0x144)) 580*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_SCRATCH (QLA82XX_CAM_RAM(0x148)) 581*4882a593Smuzhiyun #define QLA82XX_CRB_DEV_PART_INFO (QLA82XX_CAM_RAM(0x14c)) 582*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_IDC_VERSION (QLA82XX_CAM_RAM(0x174)) 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun enum qla_regs { 585*4882a593Smuzhiyun QLA8XXX_PEG_HALT_STATUS1 = 0, 586*4882a593Smuzhiyun QLA8XXX_PEG_HALT_STATUS2, 587*4882a593Smuzhiyun QLA8XXX_PEG_ALIVE_COUNTER, 588*4882a593Smuzhiyun QLA8XXX_CRB_DRV_ACTIVE, 589*4882a593Smuzhiyun QLA8XXX_CRB_DEV_STATE, 590*4882a593Smuzhiyun QLA8XXX_CRB_DRV_STATE, 591*4882a593Smuzhiyun QLA8XXX_CRB_DRV_SCRATCH, 592*4882a593Smuzhiyun QLA8XXX_CRB_DEV_PART_INFO, 593*4882a593Smuzhiyun QLA8XXX_CRB_DRV_IDC_VERSION, 594*4882a593Smuzhiyun QLA8XXX_FW_VERSION_MAJOR, 595*4882a593Smuzhiyun QLA8XXX_FW_VERSION_MINOR, 596*4882a593Smuzhiyun QLA8XXX_FW_VERSION_SUB, 597*4882a593Smuzhiyun QLA8XXX_CRB_CMDPEG_STATE, 598*4882a593Smuzhiyun QLA8XXX_CRB_TEMP_STATE, 599*4882a593Smuzhiyun }; 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun /* Every driver should use these Device State */ 602*4882a593Smuzhiyun #define QLA8XXX_DEV_COLD 1 603*4882a593Smuzhiyun #define QLA8XXX_DEV_INITIALIZING 2 604*4882a593Smuzhiyun #define QLA8XXX_DEV_READY 3 605*4882a593Smuzhiyun #define QLA8XXX_DEV_NEED_RESET 4 606*4882a593Smuzhiyun #define QLA8XXX_DEV_NEED_QUIESCENT 5 607*4882a593Smuzhiyun #define QLA8XXX_DEV_FAILED 6 608*4882a593Smuzhiyun #define QLA8XXX_DEV_QUIESCENT 7 609*4882a593Smuzhiyun #define MAX_STATES 8 /* Increment if new state added */ 610*4882a593Smuzhiyun 611*4882a593Smuzhiyun #define QLA82XX_IDC_VERSION 0x1 612*4882a593Smuzhiyun #define ROM_DEV_INIT_TIMEOUT 30 613*4882a593Smuzhiyun #define ROM_DRV_RESET_ACK_TIMEOUT 10 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION (0x12040) 616*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION2 (0x12048) 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun #define QLA82XX_PCIX_PS_REG(reg) (QLA82XX_CRB_PCIX_MD + (reg)) 619*4882a593Smuzhiyun #define QLA82XX_PCIX_PS2_REG(reg) (QLA82XX_CRB_PCIE2 + (reg)) 620*4882a593Smuzhiyun 621*4882a593Smuzhiyun #define PCIE_SEM2_LOCK (0x1c010) /* Flash lock */ 622*4882a593Smuzhiyun #define PCIE_SEM2_UNLOCK (0x1c014) /* Flash unlock */ 623*4882a593Smuzhiyun #define PCIE_SEM5_LOCK (0x1c028) /* Coexistence lock */ 624*4882a593Smuzhiyun #define PCIE_SEM5_UNLOCK (0x1c02c) /* Coexistence unlock */ 625*4882a593Smuzhiyun #define PCIE_SEM7_LOCK (0x1c038) /* crb win lock */ 626*4882a593Smuzhiyun #define PCIE_SEM7_UNLOCK (0x1c03c) /* crbwin unlock*/ 627*4882a593Smuzhiyun 628*4882a593Smuzhiyun /* 629*4882a593Smuzhiyun * The PCI VendorID and DeviceID for our board. 630*4882a593Smuzhiyun */ 631*4882a593Smuzhiyun #define QLA82XX_MSIX_TBL_SPACE 8192 632*4882a593Smuzhiyun #define QLA82XX_PCI_REG_MSIX_TBL 0x44 633*4882a593Smuzhiyun #define QLA82XX_PCI_MSIX_CONTROL 0x40 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun struct crb_128M_2M_sub_block_map { 636*4882a593Smuzhiyun unsigned valid; 637*4882a593Smuzhiyun unsigned start_128M; 638*4882a593Smuzhiyun unsigned end_128M; 639*4882a593Smuzhiyun unsigned start_2M; 640*4882a593Smuzhiyun }; 641*4882a593Smuzhiyun 642*4882a593Smuzhiyun struct crb_128M_2M_block_map { 643*4882a593Smuzhiyun struct crb_128M_2M_sub_block_map sub_block[16]; 644*4882a593Smuzhiyun }; 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun struct crb_addr_pair { 647*4882a593Smuzhiyun long addr; 648*4882a593Smuzhiyun long data; 649*4882a593Smuzhiyun }; 650*4882a593Smuzhiyun 651*4882a593Smuzhiyun #define ADDR_ERROR ((unsigned long) 0xffffffff) 652*4882a593Smuzhiyun #define MAX_CTL_CHECK 1000 653*4882a593Smuzhiyun #define QLA82XX_FWERROR_CODE(code) ((code >> 8) & 0x1fffff) 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun /*************************************************************************** 656*4882a593Smuzhiyun * PCI related defines. 657*4882a593Smuzhiyun **************************************************************************/ 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun /* 660*4882a593Smuzhiyun * Interrupt related defines. 661*4882a593Smuzhiyun */ 662*4882a593Smuzhiyun #define PCIX_TARGET_STATUS (0x10118) 663*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F1 (0x10160) 664*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F2 (0x10164) 665*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F3 (0x10168) 666*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F4 (0x10360) 667*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F5 (0x10364) 668*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F6 (0x10368) 669*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F7 (0x1036c) 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun #define PCIX_TARGET_MASK (0x10128) 672*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F1 (0x10170) 673*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F2 (0x10174) 674*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F3 (0x10178) 675*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F4 (0x10370) 676*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F5 (0x10374) 677*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F6 (0x10378) 678*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F7 (0x1037c) 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun /* 681*4882a593Smuzhiyun * Message Signaled Interrupts 682*4882a593Smuzhiyun */ 683*4882a593Smuzhiyun #define PCIX_MSI_F0 (0x13000) 684*4882a593Smuzhiyun #define PCIX_MSI_F1 (0x13004) 685*4882a593Smuzhiyun #define PCIX_MSI_F2 (0x13008) 686*4882a593Smuzhiyun #define PCIX_MSI_F3 (0x1300c) 687*4882a593Smuzhiyun #define PCIX_MSI_F4 (0x13010) 688*4882a593Smuzhiyun #define PCIX_MSI_F5 (0x13014) 689*4882a593Smuzhiyun #define PCIX_MSI_F6 (0x13018) 690*4882a593Smuzhiyun #define PCIX_MSI_F7 (0x1301c) 691*4882a593Smuzhiyun #define PCIX_MSI_F(FUNC) (0x13000 + ((FUNC) * 4)) 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun /* 694*4882a593Smuzhiyun * 695*4882a593Smuzhiyun */ 696*4882a593Smuzhiyun #define PCIX_INT_VECTOR (0x10100) 697*4882a593Smuzhiyun #define PCIX_INT_MASK (0x10104) 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* 700*4882a593Smuzhiyun * Interrupt state machine and other bits. 701*4882a593Smuzhiyun */ 702*4882a593Smuzhiyun #define PCIE_MISCCFG_RC (0x1206c) 703*4882a593Smuzhiyun 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS \ 706*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS)) 707*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F1 \ 708*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F1)) 709*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F2 \ 710*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F2)) 711*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F3 \ 712*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F3)) 713*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F4 \ 714*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F4)) 715*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F5 \ 716*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F5)) 717*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F6 \ 718*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F6)) 719*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F7 \ 720*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F7)) 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK \ 723*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK)) 724*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F1 \ 725*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F1)) 726*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F2 \ 727*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F2)) 728*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F3 \ 729*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F3)) 730*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F4 \ 731*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F4)) 732*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F5 \ 733*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F5)) 734*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F6 \ 735*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F6)) 736*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F7 \ 737*4882a593Smuzhiyun (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F7)) 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun #define ISR_INT_VECTOR (QLA82XX_PCIX_PS_REG(PCIX_INT_VECTOR)) 740*4882a593Smuzhiyun #define ISR_INT_MASK (QLA82XX_PCIX_PS_REG(PCIX_INT_MASK)) 741*4882a593Smuzhiyun #define ISR_INT_STATE_REG (QLA82XX_PCIX_PS_REG(PCIE_MISCCFG_RC)) 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun #define ISR_MSI_INT_TRIGGER(FUNC) (QLA82XX_PCIX_PS_REG(PCIX_MSI_F(FUNC))) 744*4882a593Smuzhiyun 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun #define ISR_IS_LEGACY_INTR_IDLE(VAL) (((VAL) & 0x300) == 0) 747*4882a593Smuzhiyun #define ISR_IS_LEGACY_INTR_TRIGGERED(VAL) (((VAL) & 0x300) == 0x200) 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /* 750*4882a593Smuzhiyun * PCI Interrupt Vector Values. 751*4882a593Smuzhiyun */ 752*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F0 0x0080 753*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F1 0x0100 754*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F2 0x0200 755*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F3 0x0400 756*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F4 0x0800 757*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F5 0x1000 758*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F6 0x2000 759*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F7 0x4000 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun /* struct qla4_8xxx_legacy_intr_set defined in ql4_def.h */ 762*4882a593Smuzhiyun 763*4882a593Smuzhiyun #define QLA82XX_LEGACY_INTR_CONFIG \ 764*4882a593Smuzhiyun { \ 765*4882a593Smuzhiyun { \ 766*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F0, \ 767*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS, \ 768*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK, \ 769*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(0) }, \ 770*4882a593Smuzhiyun \ 771*4882a593Smuzhiyun { \ 772*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F1, \ 773*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F1, \ 774*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F1, \ 775*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(1) }, \ 776*4882a593Smuzhiyun \ 777*4882a593Smuzhiyun { \ 778*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F2, \ 779*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F2, \ 780*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F2, \ 781*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(2) }, \ 782*4882a593Smuzhiyun \ 783*4882a593Smuzhiyun { \ 784*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F3, \ 785*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F3, \ 786*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F3, \ 787*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(3) }, \ 788*4882a593Smuzhiyun \ 789*4882a593Smuzhiyun { \ 790*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F4, \ 791*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F4, \ 792*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F4, \ 793*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(4) }, \ 794*4882a593Smuzhiyun \ 795*4882a593Smuzhiyun { \ 796*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F5, \ 797*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F5, \ 798*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F5, \ 799*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(5) }, \ 800*4882a593Smuzhiyun \ 801*4882a593Smuzhiyun { \ 802*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F6, \ 803*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F6, \ 804*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F6, \ 805*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(6) }, \ 806*4882a593Smuzhiyun \ 807*4882a593Smuzhiyun { \ 808*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F7, \ 809*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F7, \ 810*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F7, \ 811*4882a593Smuzhiyun .pci_int_reg = ISR_MSI_INT_TRIGGER(7) }, \ 812*4882a593Smuzhiyun } 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun /* Magic number to let user know flash is programmed */ 815*4882a593Smuzhiyun #define QLA82XX_BDINFO_MAGIC 0x12345678 816*4882a593Smuzhiyun #define FW_SIZE_OFFSET (0x3e840c) 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun /* QLA82XX additions */ 819*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_UPPER_LO (0x0b0) 820*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_UPPER_HI (0x0b4) 821*4882a593Smuzhiyun 822*4882a593Smuzhiyun /* Minidump related */ 823*4882a593Smuzhiyun 824*4882a593Smuzhiyun /* Entry Type Defines */ 825*4882a593Smuzhiyun #define QLA8XXX_RDNOP 0 826*4882a593Smuzhiyun #define QLA8XXX_RDCRB 1 827*4882a593Smuzhiyun #define QLA8XXX_RDMUX 2 828*4882a593Smuzhiyun #define QLA8XXX_QUEUE 3 829*4882a593Smuzhiyun #define QLA8XXX_BOARD 4 830*4882a593Smuzhiyun #define QLA8XXX_RDOCM 6 831*4882a593Smuzhiyun #define QLA8XXX_PREGS 7 832*4882a593Smuzhiyun #define QLA8XXX_L1DTG 8 833*4882a593Smuzhiyun #define QLA8XXX_L1ITG 9 834*4882a593Smuzhiyun #define QLA8XXX_L1DAT 11 835*4882a593Smuzhiyun #define QLA8XXX_L1INS 12 836*4882a593Smuzhiyun #define QLA8XXX_L2DTG 21 837*4882a593Smuzhiyun #define QLA8XXX_L2ITG 22 838*4882a593Smuzhiyun #define QLA8XXX_L2DAT 23 839*4882a593Smuzhiyun #define QLA8XXX_L2INS 24 840*4882a593Smuzhiyun #define QLA83XX_POLLRD 35 841*4882a593Smuzhiyun #define QLA83XX_RDMUX2 36 842*4882a593Smuzhiyun #define QLA83XX_POLLRDMWR 37 843*4882a593Smuzhiyun #define QLA8044_RDDFE 38 844*4882a593Smuzhiyun #define QLA8044_RDMDIO 39 845*4882a593Smuzhiyun #define QLA8044_POLLWR 40 846*4882a593Smuzhiyun #define QLA8XXX_RDROM 71 847*4882a593Smuzhiyun #define QLA8XXX_RDMEM 72 848*4882a593Smuzhiyun #define QLA8XXX_CNTRL 98 849*4882a593Smuzhiyun #define QLA83XX_TLHDR 99 850*4882a593Smuzhiyun #define QLA8XXX_RDEND 255 851*4882a593Smuzhiyun 852*4882a593Smuzhiyun /* Opcodes for Control Entries. 853*4882a593Smuzhiyun * These Flags are bit fields. 854*4882a593Smuzhiyun */ 855*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_WR 0x01 856*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_RW 0x02 857*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_AND 0x04 858*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_OR 0x08 859*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_POLL 0x10 860*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_RDSTATE 0x20 861*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_WRSTATE 0x40 862*4882a593Smuzhiyun #define QLA8XXX_DBG_OPCODE_MDSTATE 0x80 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun /* Driver Flags */ 865*4882a593Smuzhiyun #define QLA8XXX_DBG_SKIPPED_FLAG 0x80 /* driver skipped this entry */ 866*4882a593Smuzhiyun #define QLA8XXX_DBG_SIZE_ERR_FLAG 0x40 /* Entry vs Capture size 867*4882a593Smuzhiyun * mismatch */ 868*4882a593Smuzhiyun 869*4882a593Smuzhiyun /* Driver_code is for driver to write some info about the entry 870*4882a593Smuzhiyun * currently not used. 871*4882a593Smuzhiyun */ 872*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr { 873*4882a593Smuzhiyun uint32_t entry_type; 874*4882a593Smuzhiyun uint32_t entry_size; 875*4882a593Smuzhiyun uint32_t entry_capture_size; 876*4882a593Smuzhiyun struct { 877*4882a593Smuzhiyun uint8_t entry_capture_mask; 878*4882a593Smuzhiyun uint8_t entry_code; 879*4882a593Smuzhiyun uint8_t driver_code; 880*4882a593Smuzhiyun uint8_t driver_flags; 881*4882a593Smuzhiyun } d_ctrl; 882*4882a593Smuzhiyun }; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun /* Read CRB entry header */ 885*4882a593Smuzhiyun struct qla8xxx_minidump_entry_crb { 886*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 887*4882a593Smuzhiyun uint32_t addr; 888*4882a593Smuzhiyun struct { 889*4882a593Smuzhiyun uint8_t addr_stride; 890*4882a593Smuzhiyun uint8_t state_index_a; 891*4882a593Smuzhiyun uint16_t poll_timeout; 892*4882a593Smuzhiyun } crb_strd; 893*4882a593Smuzhiyun uint32_t data_size; 894*4882a593Smuzhiyun uint32_t op_count; 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun struct { 897*4882a593Smuzhiyun uint8_t opcode; 898*4882a593Smuzhiyun uint8_t state_index_v; 899*4882a593Smuzhiyun uint8_t shl; 900*4882a593Smuzhiyun uint8_t shr; 901*4882a593Smuzhiyun } crb_ctrl; 902*4882a593Smuzhiyun 903*4882a593Smuzhiyun uint32_t value_1; 904*4882a593Smuzhiyun uint32_t value_2; 905*4882a593Smuzhiyun uint32_t value_3; 906*4882a593Smuzhiyun }; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun struct qla8xxx_minidump_entry_cache { 909*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 910*4882a593Smuzhiyun uint32_t tag_reg_addr; 911*4882a593Smuzhiyun struct { 912*4882a593Smuzhiyun uint16_t tag_value_stride; 913*4882a593Smuzhiyun uint16_t init_tag_value; 914*4882a593Smuzhiyun } addr_ctrl; 915*4882a593Smuzhiyun uint32_t data_size; 916*4882a593Smuzhiyun uint32_t op_count; 917*4882a593Smuzhiyun uint32_t control_addr; 918*4882a593Smuzhiyun struct { 919*4882a593Smuzhiyun uint16_t write_value; 920*4882a593Smuzhiyun uint8_t poll_mask; 921*4882a593Smuzhiyun uint8_t poll_wait; 922*4882a593Smuzhiyun } cache_ctrl; 923*4882a593Smuzhiyun uint32_t read_addr; 924*4882a593Smuzhiyun struct { 925*4882a593Smuzhiyun uint8_t read_addr_stride; 926*4882a593Smuzhiyun uint8_t read_addr_cnt; 927*4882a593Smuzhiyun uint16_t rsvd_1; 928*4882a593Smuzhiyun } read_ctrl; 929*4882a593Smuzhiyun }; 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun /* Read OCM */ 932*4882a593Smuzhiyun struct qla8xxx_minidump_entry_rdocm { 933*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 934*4882a593Smuzhiyun uint32_t rsvd_0; 935*4882a593Smuzhiyun uint32_t rsvd_1; 936*4882a593Smuzhiyun uint32_t data_size; 937*4882a593Smuzhiyun uint32_t op_count; 938*4882a593Smuzhiyun uint32_t rsvd_2; 939*4882a593Smuzhiyun uint32_t rsvd_3; 940*4882a593Smuzhiyun uint32_t read_addr; 941*4882a593Smuzhiyun uint32_t read_addr_stride; 942*4882a593Smuzhiyun }; 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun /* Read Memory */ 945*4882a593Smuzhiyun struct qla8xxx_minidump_entry_rdmem { 946*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 947*4882a593Smuzhiyun uint32_t rsvd[6]; 948*4882a593Smuzhiyun uint32_t read_addr; 949*4882a593Smuzhiyun uint32_t read_data_size; 950*4882a593Smuzhiyun }; 951*4882a593Smuzhiyun 952*4882a593Smuzhiyun /* Read ROM */ 953*4882a593Smuzhiyun struct qla8xxx_minidump_entry_rdrom { 954*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 955*4882a593Smuzhiyun uint32_t rsvd[6]; 956*4882a593Smuzhiyun uint32_t read_addr; 957*4882a593Smuzhiyun uint32_t read_data_size; 958*4882a593Smuzhiyun }; 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun /* Mux entry */ 961*4882a593Smuzhiyun struct qla8xxx_minidump_entry_mux { 962*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 963*4882a593Smuzhiyun uint32_t select_addr; 964*4882a593Smuzhiyun uint32_t rsvd_0; 965*4882a593Smuzhiyun uint32_t data_size; 966*4882a593Smuzhiyun uint32_t op_count; 967*4882a593Smuzhiyun uint32_t select_value; 968*4882a593Smuzhiyun uint32_t select_value_stride; 969*4882a593Smuzhiyun uint32_t read_addr; 970*4882a593Smuzhiyun uint32_t rsvd_1; 971*4882a593Smuzhiyun }; 972*4882a593Smuzhiyun 973*4882a593Smuzhiyun /* Queue entry */ 974*4882a593Smuzhiyun struct qla8xxx_minidump_entry_queue { 975*4882a593Smuzhiyun struct qla8xxx_minidump_entry_hdr h; 976*4882a593Smuzhiyun uint32_t select_addr; 977*4882a593Smuzhiyun struct { 978*4882a593Smuzhiyun uint16_t queue_id_stride; 979*4882a593Smuzhiyun uint16_t rsvd_0; 980*4882a593Smuzhiyun } q_strd; 981*4882a593Smuzhiyun uint32_t data_size; 982*4882a593Smuzhiyun uint32_t op_count; 983*4882a593Smuzhiyun uint32_t rsvd_1; 984*4882a593Smuzhiyun uint32_t rsvd_2; 985*4882a593Smuzhiyun uint32_t read_addr; 986*4882a593Smuzhiyun struct { 987*4882a593Smuzhiyun uint8_t read_addr_stride; 988*4882a593Smuzhiyun uint8_t read_addr_cnt; 989*4882a593Smuzhiyun uint16_t rsvd_3; 990*4882a593Smuzhiyun } rd_strd; 991*4882a593Smuzhiyun }; 992*4882a593Smuzhiyun 993*4882a593Smuzhiyun #define MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE 0x129 994*4882a593Smuzhiyun #define RQST_TMPLT_SIZE 0x0 995*4882a593Smuzhiyun #define RQST_TMPLT 0x1 996*4882a593Smuzhiyun #define MD_DIRECT_ROM_WINDOW 0x42110030 997*4882a593Smuzhiyun #define MD_DIRECT_ROM_READ_BASE 0x42150000 998*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_CTRL 0x41000090 999*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_ADDR_LO 0x41000094 1000*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_ADDR_HI 0x41000098 1001*4882a593Smuzhiyun 1002*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_WRDATA_LO 0x410000A0 1003*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_WRDATA_HI 0x410000A4 1004*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_WRDATA_ULO 0x410000B0 1005*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_WRDATA_UHI 0x410000B4 1006*4882a593Smuzhiyun 1007*4882a593Smuzhiyun #endif 1008