1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * QLogic qlcnic NIC Driver 4*4882a593Smuzhiyun * Copyright (c) 2009-2013 QLogic Corporation 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __QLCNIC_HDR_H_ 8*4882a593Smuzhiyun #define __QLCNIC_HDR_H_ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/kernel.h> 11*4882a593Smuzhiyun #include <linux/types.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include "qlcnic_hw.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * The basic unit of access when reading/writing control registers. 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun enum { 20*4882a593Smuzhiyun QLCNIC_HW_H0_CH_HUB_ADR = 0x05, 21*4882a593Smuzhiyun QLCNIC_HW_H1_CH_HUB_ADR = 0x0E, 22*4882a593Smuzhiyun QLCNIC_HW_H2_CH_HUB_ADR = 0x03, 23*4882a593Smuzhiyun QLCNIC_HW_H3_CH_HUB_ADR = 0x01, 24*4882a593Smuzhiyun QLCNIC_HW_H4_CH_HUB_ADR = 0x06, 25*4882a593Smuzhiyun QLCNIC_HW_H5_CH_HUB_ADR = 0x07, 26*4882a593Smuzhiyun QLCNIC_HW_H6_CH_HUB_ADR = 0x08 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* Hub 0 */ 30*4882a593Smuzhiyun enum { 31*4882a593Smuzhiyun QLCNIC_HW_MN_CRB_AGT_ADR = 0x15, 32*4882a593Smuzhiyun QLCNIC_HW_MS_CRB_AGT_ADR = 0x25 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* Hub 1 */ 36*4882a593Smuzhiyun enum { 37*4882a593Smuzhiyun QLCNIC_HW_PS_CRB_AGT_ADR = 0x73, 38*4882a593Smuzhiyun QLCNIC_HW_SS_CRB_AGT_ADR = 0x20, 39*4882a593Smuzhiyun QLCNIC_HW_RPMX3_CRB_AGT_ADR = 0x0b, 40*4882a593Smuzhiyun QLCNIC_HW_QMS_CRB_AGT_ADR = 0x00, 41*4882a593Smuzhiyun QLCNIC_HW_SQGS0_CRB_AGT_ADR = 0x01, 42*4882a593Smuzhiyun QLCNIC_HW_SQGS1_CRB_AGT_ADR = 0x02, 43*4882a593Smuzhiyun QLCNIC_HW_SQGS2_CRB_AGT_ADR = 0x03, 44*4882a593Smuzhiyun QLCNIC_HW_SQGS3_CRB_AGT_ADR = 0x04, 45*4882a593Smuzhiyun QLCNIC_HW_C2C0_CRB_AGT_ADR = 0x58, 46*4882a593Smuzhiyun QLCNIC_HW_C2C1_CRB_AGT_ADR = 0x59, 47*4882a593Smuzhiyun QLCNIC_HW_C2C2_CRB_AGT_ADR = 0x5a, 48*4882a593Smuzhiyun QLCNIC_HW_RPMX2_CRB_AGT_ADR = 0x0a, 49*4882a593Smuzhiyun QLCNIC_HW_RPMX4_CRB_AGT_ADR = 0x0c, 50*4882a593Smuzhiyun QLCNIC_HW_RPMX7_CRB_AGT_ADR = 0x0f, 51*4882a593Smuzhiyun QLCNIC_HW_RPMX9_CRB_AGT_ADR = 0x12, 52*4882a593Smuzhiyun QLCNIC_HW_SMB_CRB_AGT_ADR = 0x18 53*4882a593Smuzhiyun }; 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* Hub 2 */ 56*4882a593Smuzhiyun enum { 57*4882a593Smuzhiyun QLCNIC_HW_NIU_CRB_AGT_ADR = 0x31, 58*4882a593Smuzhiyun QLCNIC_HW_I2C0_CRB_AGT_ADR = 0x19, 59*4882a593Smuzhiyun QLCNIC_HW_I2C1_CRB_AGT_ADR = 0x29, 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun QLCNIC_HW_SN_CRB_AGT_ADR = 0x10, 62*4882a593Smuzhiyun QLCNIC_HW_I2Q_CRB_AGT_ADR = 0x20, 63*4882a593Smuzhiyun QLCNIC_HW_LPC_CRB_AGT_ADR = 0x22, 64*4882a593Smuzhiyun QLCNIC_HW_ROMUSB_CRB_AGT_ADR = 0x21, 65*4882a593Smuzhiyun QLCNIC_HW_QM_CRB_AGT_ADR = 0x66, 66*4882a593Smuzhiyun QLCNIC_HW_SQG0_CRB_AGT_ADR = 0x60, 67*4882a593Smuzhiyun QLCNIC_HW_SQG1_CRB_AGT_ADR = 0x61, 68*4882a593Smuzhiyun QLCNIC_HW_SQG2_CRB_AGT_ADR = 0x62, 69*4882a593Smuzhiyun QLCNIC_HW_SQG3_CRB_AGT_ADR = 0x63, 70*4882a593Smuzhiyun QLCNIC_HW_RPMX1_CRB_AGT_ADR = 0x09, 71*4882a593Smuzhiyun QLCNIC_HW_RPMX5_CRB_AGT_ADR = 0x0d, 72*4882a593Smuzhiyun QLCNIC_HW_RPMX6_CRB_AGT_ADR = 0x0e, 73*4882a593Smuzhiyun QLCNIC_HW_RPMX8_CRB_AGT_ADR = 0x11 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* Hub 3 */ 77*4882a593Smuzhiyun enum { 78*4882a593Smuzhiyun QLCNIC_HW_PH_CRB_AGT_ADR = 0x1A, 79*4882a593Smuzhiyun QLCNIC_HW_SRE_CRB_AGT_ADR = 0x50, 80*4882a593Smuzhiyun QLCNIC_HW_EG_CRB_AGT_ADR = 0x51, 81*4882a593Smuzhiyun QLCNIC_HW_RPMX0_CRB_AGT_ADR = 0x08 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* Hub 4 */ 85*4882a593Smuzhiyun enum { 86*4882a593Smuzhiyun QLCNIC_HW_PEGN0_CRB_AGT_ADR = 0x40, 87*4882a593Smuzhiyun QLCNIC_HW_PEGN1_CRB_AGT_ADR, 88*4882a593Smuzhiyun QLCNIC_HW_PEGN2_CRB_AGT_ADR, 89*4882a593Smuzhiyun QLCNIC_HW_PEGN3_CRB_AGT_ADR, 90*4882a593Smuzhiyun QLCNIC_HW_PEGNI_CRB_AGT_ADR, 91*4882a593Smuzhiyun QLCNIC_HW_PEGND_CRB_AGT_ADR, 92*4882a593Smuzhiyun QLCNIC_HW_PEGNC_CRB_AGT_ADR, 93*4882a593Smuzhiyun QLCNIC_HW_PEGR0_CRB_AGT_ADR, 94*4882a593Smuzhiyun QLCNIC_HW_PEGR1_CRB_AGT_ADR, 95*4882a593Smuzhiyun QLCNIC_HW_PEGR2_CRB_AGT_ADR, 96*4882a593Smuzhiyun QLCNIC_HW_PEGR3_CRB_AGT_ADR, 97*4882a593Smuzhiyun QLCNIC_HW_PEGN4_CRB_AGT_ADR 98*4882a593Smuzhiyun }; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Hub 5 */ 101*4882a593Smuzhiyun enum { 102*4882a593Smuzhiyun QLCNIC_HW_PEGS0_CRB_AGT_ADR = 0x40, 103*4882a593Smuzhiyun QLCNIC_HW_PEGS1_CRB_AGT_ADR, 104*4882a593Smuzhiyun QLCNIC_HW_PEGS2_CRB_AGT_ADR, 105*4882a593Smuzhiyun QLCNIC_HW_PEGS3_CRB_AGT_ADR, 106*4882a593Smuzhiyun QLCNIC_HW_PEGSI_CRB_AGT_ADR, 107*4882a593Smuzhiyun QLCNIC_HW_PEGSD_CRB_AGT_ADR, 108*4882a593Smuzhiyun QLCNIC_HW_PEGSC_CRB_AGT_ADR 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* Hub 6 */ 112*4882a593Smuzhiyun enum { 113*4882a593Smuzhiyun QLCNIC_HW_CAS0_CRB_AGT_ADR = 0x46, 114*4882a593Smuzhiyun QLCNIC_HW_CAS1_CRB_AGT_ADR = 0x47, 115*4882a593Smuzhiyun QLCNIC_HW_CAS2_CRB_AGT_ADR = 0x48, 116*4882a593Smuzhiyun QLCNIC_HW_CAS3_CRB_AGT_ADR = 0x49, 117*4882a593Smuzhiyun QLCNIC_HW_NCM_CRB_AGT_ADR = 0x16, 118*4882a593Smuzhiyun QLCNIC_HW_TMR_CRB_AGT_ADR = 0x17, 119*4882a593Smuzhiyun QLCNIC_HW_XDMA_CRB_AGT_ADR = 0x05, 120*4882a593Smuzhiyun QLCNIC_HW_OCM0_CRB_AGT_ADR = 0x06, 121*4882a593Smuzhiyun QLCNIC_HW_OCM1_CRB_AGT_ADR = 0x07 122*4882a593Smuzhiyun }; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* Floaters - non existent modules */ 125*4882a593Smuzhiyun #define QLCNIC_HW_EFC_RPMX0_CRB_AGT_ADR 0x67 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* This field defines PCI/X adr [25:20] of agents on the CRB */ 128*4882a593Smuzhiyun enum { 129*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PH = 0, 130*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PS, 131*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_MN, 132*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_MS, 133*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGR1, 134*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SRE, 135*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_NIU, 136*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_QMN, 137*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQN0, 138*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQN1, 139*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQN2, 140*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQN3, 141*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_QMS, 142*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQS0, 143*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQS1, 144*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQS2, 145*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SQS3, 146*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGN0, 147*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGN1, 148*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGN2, 149*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGN3, 150*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGND, 151*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGNI, 152*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGS0, 153*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGS1, 154*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGS2, 155*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGS3, 156*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGSD, 157*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGSI, 158*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SN, 159*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGR2, 160*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_EG, 161*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PH2, 162*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PS2, 163*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_CAM, 164*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_CAS0, 165*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_CAS1, 166*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_CAS2, 167*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_C2C0, 168*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_C2C1, 169*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_TIMR, 170*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGR3, 171*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX1, 172*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX2, 173*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX3, 174*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX4, 175*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX5, 176*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX6, 177*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX7, 178*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_XDMA, 179*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_I2Q, 180*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_ROMUSB, 181*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_CAS3, 182*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX0, 183*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX8, 184*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_RPMX9, 185*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_OCM0, 186*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_OCM1, 187*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_SMB, 188*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_I2C0, 189*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_I2C1, 190*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_LPC, 191*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGNC, 192*4882a593Smuzhiyun QLCNIC_HW_PX_MAP_CRB_PGR0 193*4882a593Smuzhiyun }; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun #define BIT_0 0x1 196*4882a593Smuzhiyun #define BIT_1 0x2 197*4882a593Smuzhiyun #define BIT_2 0x4 198*4882a593Smuzhiyun #define BIT_3 0x8 199*4882a593Smuzhiyun #define BIT_4 0x10 200*4882a593Smuzhiyun #define BIT_5 0x20 201*4882a593Smuzhiyun #define BIT_6 0x40 202*4882a593Smuzhiyun #define BIT_7 0x80 203*4882a593Smuzhiyun #define BIT_8 0x100 204*4882a593Smuzhiyun #define BIT_9 0x200 205*4882a593Smuzhiyun #define BIT_10 0x400 206*4882a593Smuzhiyun #define BIT_11 0x800 207*4882a593Smuzhiyun #define BIT_12 0x1000 208*4882a593Smuzhiyun #define BIT_13 0x2000 209*4882a593Smuzhiyun #define BIT_14 0x4000 210*4882a593Smuzhiyun #define BIT_15 0x8000 211*4882a593Smuzhiyun #define BIT_16 0x10000 212*4882a593Smuzhiyun #define BIT_17 0x20000 213*4882a593Smuzhiyun #define BIT_18 0x40000 214*4882a593Smuzhiyun #define BIT_19 0x80000 215*4882a593Smuzhiyun #define BIT_20 0x100000 216*4882a593Smuzhiyun #define BIT_21 0x200000 217*4882a593Smuzhiyun #define BIT_22 0x400000 218*4882a593Smuzhiyun #define BIT_23 0x800000 219*4882a593Smuzhiyun #define BIT_24 0x1000000 220*4882a593Smuzhiyun #define BIT_25 0x2000000 221*4882a593Smuzhiyun #define BIT_26 0x4000000 222*4882a593Smuzhiyun #define BIT_27 0x8000000 223*4882a593Smuzhiyun #define BIT_28 0x10000000 224*4882a593Smuzhiyun #define BIT_29 0x20000000 225*4882a593Smuzhiyun #define BIT_30 0x40000000 226*4882a593Smuzhiyun #define BIT_31 0x80000000 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* This field defines CRB adr [31:20] of the agents */ 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_MN \ 231*4882a593Smuzhiyun ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_MN_CRB_AGT_ADR) 232*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PH \ 233*4882a593Smuzhiyun ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_PH_CRB_AGT_ADR) 234*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_MS \ 235*4882a593Smuzhiyun ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_MS_CRB_AGT_ADR) 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PS \ 238*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_PS_CRB_AGT_ADR) 239*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SS \ 240*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SS_CRB_AGT_ADR) 241*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX3 \ 242*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX3_CRB_AGT_ADR) 243*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_QMS \ 244*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_QMS_CRB_AGT_ADR) 245*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS0 \ 246*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS0_CRB_AGT_ADR) 247*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS1 \ 248*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS1_CRB_AGT_ADR) 249*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS2 \ 250*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS2_CRB_AGT_ADR) 251*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS3 \ 252*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS3_CRB_AGT_ADR) 253*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_C2C0 \ 254*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_C2C0_CRB_AGT_ADR) 255*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_C2C1 \ 256*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_C2C1_CRB_AGT_ADR) 257*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX2 \ 258*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX2_CRB_AGT_ADR) 259*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX4 \ 260*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX4_CRB_AGT_ADR) 261*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX7 \ 262*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX7_CRB_AGT_ADR) 263*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX9 \ 264*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX9_CRB_AGT_ADR) 265*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SMB \ 266*4882a593Smuzhiyun ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SMB_CRB_AGT_ADR) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_NIU \ 269*4882a593Smuzhiyun ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_NIU_CRB_AGT_ADR) 270*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2C0 \ 271*4882a593Smuzhiyun ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_I2C0_CRB_AGT_ADR) 272*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2C1 \ 273*4882a593Smuzhiyun ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_I2C1_CRB_AGT_ADR) 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SRE \ 276*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SRE_CRB_AGT_ADR) 277*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_EG \ 278*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_EG_CRB_AGT_ADR) 279*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX0 \ 280*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX0_CRB_AGT_ADR) 281*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_QMN \ 282*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_QM_CRB_AGT_ADR) 283*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN0 \ 284*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG0_CRB_AGT_ADR) 285*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN1 \ 286*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG1_CRB_AGT_ADR) 287*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN2 \ 288*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG2_CRB_AGT_ADR) 289*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN3 \ 290*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG3_CRB_AGT_ADR) 291*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX1 \ 292*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX1_CRB_AGT_ADR) 293*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX5 \ 294*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX5_CRB_AGT_ADR) 295*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX6 \ 296*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX6_CRB_AGT_ADR) 297*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX8 \ 298*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX8_CRB_AGT_ADR) 299*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS0 \ 300*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS0_CRB_AGT_ADR) 301*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS1 \ 302*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS1_CRB_AGT_ADR) 303*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS2 \ 304*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS2_CRB_AGT_ADR) 305*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS3 \ 306*4882a593Smuzhiyun ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS3_CRB_AGT_ADR) 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGNI \ 309*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGNI_CRB_AGT_ADR) 310*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGND \ 311*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGND_CRB_AGT_ADR) 312*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN0 \ 313*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN0_CRB_AGT_ADR) 314*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN1 \ 315*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN1_CRB_AGT_ADR) 316*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN2 \ 317*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN2_CRB_AGT_ADR) 318*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN3 \ 319*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN3_CRB_AGT_ADR) 320*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN4 \ 321*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN4_CRB_AGT_ADR) 322*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGNC \ 323*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGNC_CRB_AGT_ADR) 324*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR0 \ 325*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR0_CRB_AGT_ADR) 326*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR1 \ 327*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR1_CRB_AGT_ADR) 328*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR2 \ 329*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR2_CRB_AGT_ADR) 330*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR3 \ 331*4882a593Smuzhiyun ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR3_CRB_AGT_ADR) 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSI \ 334*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSI_CRB_AGT_ADR) 335*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSD \ 336*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSD_CRB_AGT_ADR) 337*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS0 \ 338*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS0_CRB_AGT_ADR) 339*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS1 \ 340*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS1_CRB_AGT_ADR) 341*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS2 \ 342*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS2_CRB_AGT_ADR) 343*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS3 \ 344*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS3_CRB_AGT_ADR) 345*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSC \ 346*4882a593Smuzhiyun ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSC_CRB_AGT_ADR) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAM \ 349*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_NCM_CRB_AGT_ADR) 350*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_TIMR \ 351*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_TMR_CRB_AGT_ADR) 352*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_XDMA \ 353*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_XDMA_CRB_AGT_ADR) 354*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_SN \ 355*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_SN_CRB_AGT_ADR) 356*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2Q \ 357*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_I2Q_CRB_AGT_ADR) 358*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_ROMUSB \ 359*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_ROMUSB_CRB_AGT_ADR) 360*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_OCM0 \ 361*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_OCM0_CRB_AGT_ADR) 362*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_OCM1 \ 363*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_OCM1_CRB_AGT_ADR) 364*4882a593Smuzhiyun #define QLCNIC_HW_CRB_HUB_AGT_ADR_LPC \ 365*4882a593Smuzhiyun ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_LPC_CRB_AGT_ADR) 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun #define QLCNIC_SRE_MISC (QLCNIC_CRB_SRE + 0x0002c) 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun #define QLCNIC_I2Q_CLR_PCI_HI (QLCNIC_CRB_I2Q + 0x00034) 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun #define ROMUSB_GLB (QLCNIC_CRB_ROMUSB + 0x00000) 372*4882a593Smuzhiyun #define ROMUSB_ROM (QLCNIC_CRB_ROMUSB + 0x10000) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_STATUS (ROMUSB_GLB + 0x0004) 375*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_SW_RESET (ROMUSB_GLB + 0x0008) 376*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_PAD_GPIO_I (ROMUSB_GLB + 0x000c) 377*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_CAS_RST (ROMUSB_GLB + 0x0038) 378*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_TEST_MUX_SEL (ROMUSB_GLB + 0x0044) 379*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_PEGTUNE_DONE (ROMUSB_GLB + 0x005c) 380*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GLB_CHIP_CLK_CTRL (ROMUSB_GLB + 0x00A8) 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun #define QLCNIC_ROMUSB_GPIO(n) (ROMUSB_GLB + 0x60 + (4 * (n))) 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_INSTR_OPCODE (ROMUSB_ROM + 0x0004) 385*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_ADDRESS (ROMUSB_ROM + 0x0008) 386*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_WDATA (ROMUSB_ROM + 0x000c) 387*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_ABYTE_CNT (ROMUSB_ROM + 0x0010) 388*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT (ROMUSB_ROM + 0x0014) 389*4882a593Smuzhiyun #define QLCNIC_ROMUSB_ROM_RDATA (ROMUSB_ROM + 0x0018) 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /****************************************************************************** 392*4882a593Smuzhiyun * 393*4882a593Smuzhiyun * Definitions specific to M25P flash 394*4882a593Smuzhiyun * 395*4882a593Smuzhiyun ******************************************************************************* 396*4882a593Smuzhiyun */ 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* all are 1MB windows */ 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun #define QLCNIC_PCI_CRB_WINDOWSIZE 0x00100000 401*4882a593Smuzhiyun #define QLCNIC_PCI_CRB_WINDOW(A) \ 402*4882a593Smuzhiyun (QLCNIC_PCI_CRBSPACE + (A)*QLCNIC_PCI_CRB_WINDOWSIZE) 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun #define QLCNIC_CRB_NIU QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_NIU) 405*4882a593Smuzhiyun #define QLCNIC_CRB_SRE QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SRE) 406*4882a593Smuzhiyun #define QLCNIC_CRB_ROMUSB \ 407*4882a593Smuzhiyun QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_ROMUSB) 408*4882a593Smuzhiyun #define QLCNIC_CRB_EPG QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_EG) 409*4882a593Smuzhiyun #define QLCNIC_CRB_I2Q QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_I2Q) 410*4882a593Smuzhiyun #define QLCNIC_CRB_TIMER QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_TIMR) 411*4882a593Smuzhiyun #define QLCNIC_CRB_I2C0 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_I2C0) 412*4882a593Smuzhiyun #define QLCNIC_CRB_SMB QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SMB) 413*4882a593Smuzhiyun #define QLCNIC_CRB_MAX QLCNIC_PCI_CRB_WINDOW(64) 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun #define QLCNIC_CRB_PCIX_HOST QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PH) 416*4882a593Smuzhiyun #define QLCNIC_CRB_PCIX_HOST2 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PH2) 417*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_0 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN0) 418*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_1 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN1) 419*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_2 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN2) 420*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_3 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN3) 421*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_4 QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SQS2) 422*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_D QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGND) 423*4882a593Smuzhiyun #define QLCNIC_CRB_PEG_NET_I QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGNI) 424*4882a593Smuzhiyun #define QLCNIC_CRB_DDR_NET QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_MN) 425*4882a593Smuzhiyun #define QLCNIC_CRB_QDR_NET QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SN) 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun #define QLCNIC_CRB_PCIX_MD QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PS) 428*4882a593Smuzhiyun #define QLCNIC_CRB_PCIE QLCNIC_CRB_PCIX_MD 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun #define ISR_INT_VECTOR (QLCNIC_PCIX_PS_REG(PCIX_INT_VECTOR)) 431*4882a593Smuzhiyun #define ISR_INT_MASK (QLCNIC_PCIX_PS_REG(PCIX_INT_MASK)) 432*4882a593Smuzhiyun #define ISR_INT_MASK_SLOW (QLCNIC_PCIX_PS_REG(PCIX_INT_MASK)) 433*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS)) 434*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK)) 435*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F1 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F1)) 436*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F1 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F1)) 437*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F2 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F2)) 438*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F2 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F2)) 439*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F3 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F3)) 440*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F3 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F3)) 441*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F4 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F4)) 442*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F4 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F4)) 443*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F5 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F5)) 444*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F5 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F5)) 445*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F6 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F6)) 446*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F6 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F6)) 447*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F7 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F7)) 448*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F7 (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F7)) 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun #define QLCNIC_PCI_OCM0_2M (0x000c0000UL) 451*4882a593Smuzhiyun #define QLCNIC_PCI_CRBSPACE (0x06000000UL) 452*4882a593Smuzhiyun #define QLCNIC_PCI_CAMQM (0x04800000UL) 453*4882a593Smuzhiyun #define QLCNIC_PCI_CAMQM_END (0x04800800UL) 454*4882a593Smuzhiyun #define QLCNIC_PCI_CAMQM_2M_BASE (0x000ff800UL) 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun #define QLCNIC_CRB_CAM QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_CAM) 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun #define QLCNIC_ADDR_DDR_NET (0x0000000000000000ULL) 459*4882a593Smuzhiyun #define QLCNIC_ADDR_DDR_NET_MAX (0x000000000fffffffULL) 460*4882a593Smuzhiyun #define QLCNIC_ADDR_OCM0 (0x0000000200000000ULL) 461*4882a593Smuzhiyun #define QLCNIC_ADDR_OCM0_MAX (0x00000002000fffffULL) 462*4882a593Smuzhiyun #define QLCNIC_ADDR_OCM1 (0x0000000200400000ULL) 463*4882a593Smuzhiyun #define QLCNIC_ADDR_OCM1_MAX (0x00000002004fffffULL) 464*4882a593Smuzhiyun #define QLCNIC_ADDR_QDR_NET (0x0000000300000000ULL) 465*4882a593Smuzhiyun #define QLCNIC_ADDR_QDR_NET_MAX (0x0000000307ffffffULL) 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun /* 468*4882a593Smuzhiyun * Register offsets for MN 469*4882a593Smuzhiyun */ 470*4882a593Smuzhiyun #define QLCNIC_MIU_CONTROL (0x000) 471*4882a593Smuzhiyun #define QLCNIC_MIU_MN_CONTROL (QLCNIC_CRB_DDR_NET+QLCNIC_MIU_CONTROL) 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun /* 200ms delay in each loop */ 474*4882a593Smuzhiyun #define QLCNIC_NIU_PHY_WAITLEN 200000 475*4882a593Smuzhiyun /* 10 seconds before we give up */ 476*4882a593Smuzhiyun #define QLCNIC_NIU_PHY_WAITMAX 50 477*4882a593Smuzhiyun #define QLCNIC_NIU_MAX_GBE_PORTS 4 478*4882a593Smuzhiyun #define QLCNIC_NIU_MAX_XG_PORTS 2 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun #define QLCNIC_NIU_MODE (QLCNIC_CRB_NIU + 0x00000) 481*4882a593Smuzhiyun #define QLCNIC_NIU_GB_PAUSE_CTL (QLCNIC_CRB_NIU + 0x0030c) 482*4882a593Smuzhiyun #define QLCNIC_NIU_XG_PAUSE_CTL (QLCNIC_CRB_NIU + 0x00098) 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun #define QLCNIC_NIU_GB_MAC_CONFIG_0(I) \ 485*4882a593Smuzhiyun (QLCNIC_CRB_NIU + 0x30000 + (I)*0x10000) 486*4882a593Smuzhiyun #define QLCNIC_NIU_GB_MAC_CONFIG_1(I) \ 487*4882a593Smuzhiyun (QLCNIC_CRB_NIU + 0x30004 + (I)*0x10000) 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun #define MAX_CTL_CHECK 1000 490*4882a593Smuzhiyun #define TEST_AGT_CTRL (0x00) 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun #define TA_CTL_START BIT_0 493*4882a593Smuzhiyun #define TA_CTL_ENABLE BIT_1 494*4882a593Smuzhiyun #define TA_CTL_WRITE BIT_2 495*4882a593Smuzhiyun #define TA_CTL_BUSY BIT_3 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun /* XG Link status */ 498*4882a593Smuzhiyun #define XG_LINK_UP 0x10 499*4882a593Smuzhiyun #define XG_LINK_DOWN 0x20 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun #define XG_LINK_UP_P3P 0x01 502*4882a593Smuzhiyun #define XG_LINK_DOWN_P3P 0x02 503*4882a593Smuzhiyun #define XG_LINK_STATE_P3P_MASK 0xf 504*4882a593Smuzhiyun #define XG_LINK_STATE_P3P(pcifn, val) \ 505*4882a593Smuzhiyun (((val) >> ((pcifn) * 4)) & XG_LINK_STATE_P3P_MASK) 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun #define P3P_LINK_SPEED_MHZ 100 508*4882a593Smuzhiyun #define P3P_LINK_SPEED_MASK 0xff 509*4882a593Smuzhiyun #define P3P_LINK_SPEED_REG(pcifn) \ 510*4882a593Smuzhiyun (CRB_PF_LINK_SPEED_1 + (((pcifn) / 4) * 4)) 511*4882a593Smuzhiyun #define P3P_LINK_SPEED_VAL(pcifn, reg) \ 512*4882a593Smuzhiyun (((reg) >> (8 * ((pcifn) & 0x3))) & P3P_LINK_SPEED_MASK) 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun #define QLCNIC_CAM_RAM_BASE (QLCNIC_CRB_CAM + 0x02000) 515*4882a593Smuzhiyun #define QLCNIC_CAM_RAM(reg) (QLCNIC_CAM_RAM_BASE + (reg)) 516*4882a593Smuzhiyun #define QLCNIC_ROM_LOCK_ID (QLCNIC_CAM_RAM(0x100)) 517*4882a593Smuzhiyun #define QLCNIC_PHY_LOCK_ID (QLCNIC_CAM_RAM(0x120)) 518*4882a593Smuzhiyun #define QLCNIC_CRB_WIN_LOCK_ID (QLCNIC_CAM_RAM(0x124)) 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun #define NIC_CRB_BASE (QLCNIC_CAM_RAM(0x200)) 521*4882a593Smuzhiyun #define NIC_CRB_BASE_2 (QLCNIC_CAM_RAM(0x700)) 522*4882a593Smuzhiyun #define QLCNIC_REG(X) (NIC_CRB_BASE+(X)) 523*4882a593Smuzhiyun #define QLCNIC_REG_2(X) (NIC_CRB_BASE_2+(X)) 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun #define QLCNIC_CDRP_MAX_ARGS 4 526*4882a593Smuzhiyun #define QLCNIC_CDRP_ARG(i) (QLCNIC_REG(0x18 + ((i) * 4))) 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun #define QLCNIC_CDRP_CRB_OFFSET (QLCNIC_REG(0x18)) 529*4882a593Smuzhiyun #define QLCNIC_SIGN_CRB_OFFSET (QLCNIC_REG(0x28)) 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun #define CRB_XG_STATE_P3P (QLCNIC_REG(0x98)) 532*4882a593Smuzhiyun #define CRB_PF_LINK_SPEED_1 (QLCNIC_REG(0xe8)) 533*4882a593Smuzhiyun #define CRB_DRIVER_VERSION (QLCNIC_REG(0x2a0)) 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun #define CRB_FW_CAPABILITIES_2 (QLCNIC_CAM_RAM(0x12c)) 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun /* 538*4882a593Smuzhiyun * CrbPortPhanCntrHi/Lo is used to pass the address of HostPhantomIndex address 539*4882a593Smuzhiyun * which can be read by the Phantom host to get producer/consumer indexes from 540*4882a593Smuzhiyun * Phantom/Casper. If it is not HOST_SHARED_MEMORY, then the following 541*4882a593Smuzhiyun * registers will be used for the addresses of the ring's shared memory 542*4882a593Smuzhiyun * on the Phantom. 543*4882a593Smuzhiyun */ 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun #define qlcnic_get_temp_val(x) ((x) >> 16) 546*4882a593Smuzhiyun #define qlcnic_get_temp_state(x) ((x) & 0xffff) 547*4882a593Smuzhiyun #define qlcnic_encode_temp(val, state) (((val) << 16) | (state)) 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun /* 550*4882a593Smuzhiyun * Temperature control. 551*4882a593Smuzhiyun */ 552*4882a593Smuzhiyun enum { 553*4882a593Smuzhiyun QLCNIC_TEMP_NORMAL = 0x1, /* Normal operating range */ 554*4882a593Smuzhiyun QLCNIC_TEMP_WARN, /* Sound alert, temperature getting high */ 555*4882a593Smuzhiyun QLCNIC_TEMP_PANIC /* Fatal error, hardware has shut down. */ 556*4882a593Smuzhiyun }; 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun /* Lock IDs for PHY lock */ 560*4882a593Smuzhiyun #define PHY_LOCK_DRIVER 0x44524956 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun #define PCIX_INT_VECTOR (0x10100) 563*4882a593Smuzhiyun #define PCIX_INT_MASK (0x10104) 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun #define PCIX_OCM_WINDOW (0x10800) 566*4882a593Smuzhiyun #define PCIX_OCM_WINDOW_REG(func) (PCIX_OCM_WINDOW + 0x4 * (func)) 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun #define PCIX_TARGET_STATUS (0x10118) 569*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F1 (0x10160) 570*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F2 (0x10164) 571*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F3 (0x10168) 572*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F4 (0x10360) 573*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F5 (0x10364) 574*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F6 (0x10368) 575*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F7 (0x1036c) 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun #define PCIX_TARGET_MASK (0x10128) 578*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F1 (0x10170) 579*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F2 (0x10174) 580*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F3 (0x10178) 581*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F4 (0x10370) 582*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F5 (0x10374) 583*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F6 (0x10378) 584*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F7 (0x1037c) 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun #define PCIX_MSI_F(i) (0x13000+((i)*4)) 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun #define QLCNIC_PCIX_PH_REG(reg) (QLCNIC_CRB_PCIE + (reg)) 589*4882a593Smuzhiyun #define QLCNIC_PCIX_PS_REG(reg) (QLCNIC_CRB_PCIX_MD + (reg)) 590*4882a593Smuzhiyun #define QLCNIC_PCIE_REG(reg) (QLCNIC_CRB_PCIE + (reg)) 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun #define PCIE_SEM0_LOCK (0x1c000) 593*4882a593Smuzhiyun #define PCIE_SEM0_UNLOCK (0x1c004) 594*4882a593Smuzhiyun #define PCIE_SEM_LOCK(N) (PCIE_SEM0_LOCK + 8*(N)) 595*4882a593Smuzhiyun #define PCIE_SEM_UNLOCK(N) (PCIE_SEM0_UNLOCK + 8*(N)) 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION (0x12040) 598*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION2 (0x12048) 599*4882a593Smuzhiyun #define PCIE_MISCCFG_RC (0x1206c) 600*4882a593Smuzhiyun #define PCIE_TGT_SPLIT_CHICKEN (0x12080) 601*4882a593Smuzhiyun #define PCIE_CHICKEN3 (0x120c8) 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun #define ISR_INT_STATE_REG (QLCNIC_PCIX_PS_REG(PCIE_MISCCFG_RC)) 604*4882a593Smuzhiyun #define PCIE_MAX_MASTER_SPLIT (0x14048) 605*4882a593Smuzhiyun 606*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_NONE 0 607*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_XG 1 608*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_GB 2 609*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_802_3_AP 3 610*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_AUTO_NEG 4 611*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_AUTO_NEG_1G 5 612*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_AUTO_NEG_XG 6 613*4882a593Smuzhiyun #define QLCNIC_PORT_MODE_ADDR (QLCNIC_CAM_RAM(0x24)) 614*4882a593Smuzhiyun #define QLCNIC_WOL_PORT_MODE (QLCNIC_CAM_RAM(0x198)) 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun #define QLCNIC_WOL_CONFIG_NV (QLCNIC_CAM_RAM(0x184)) 617*4882a593Smuzhiyun #define QLCNIC_WOL_CONFIG (QLCNIC_CAM_RAM(0x188)) 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun #define QLCNIC_PEG_TUNE_MN_PRESENT 0x1 620*4882a593Smuzhiyun #define QLCNIC_PEG_TUNE_CAPABILITY (QLCNIC_CAM_RAM(0x02c)) 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun #define QLCNIC_DMA_WATCHDOG_CTRL (QLCNIC_CAM_RAM(0x14)) 623*4882a593Smuzhiyun #define QLCNIC_ROM_DEV_INIT_TIMEOUT (0x3e885c) 624*4882a593Smuzhiyun #define QLCNIC_ROM_DRV_RESET_TIMEOUT (0x3e8860) 625*4882a593Smuzhiyun 626*4882a593Smuzhiyun /* Device State */ 627*4882a593Smuzhiyun #define QLCNIC_DEV_COLD 0x1 628*4882a593Smuzhiyun #define QLCNIC_DEV_INITIALIZING 0x2 629*4882a593Smuzhiyun #define QLCNIC_DEV_READY 0x3 630*4882a593Smuzhiyun #define QLCNIC_DEV_NEED_RESET 0x4 631*4882a593Smuzhiyun #define QLCNIC_DEV_NEED_QUISCENT 0x5 632*4882a593Smuzhiyun #define QLCNIC_DEV_FAILED 0x6 633*4882a593Smuzhiyun #define QLCNIC_DEV_QUISCENT 0x7 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun #define QLCNIC_DEV_BADBAD 0xbad0bad0 636*4882a593Smuzhiyun 637*4882a593Smuzhiyun #define QLCNIC_DEV_NPAR_NON_OPER 0 /* NON Operational */ 638*4882a593Smuzhiyun #define QLCNIC_DEV_NPAR_OPER 1 /* NPAR Operational */ 639*4882a593Smuzhiyun #define QLCNIC_DEV_NPAR_OPER_TIMEO 30 /* Operational time out */ 640*4882a593Smuzhiyun 641*4882a593Smuzhiyun #define QLC_DEV_SET_REF_CNT(VAL, FN) ((VAL) |= (1 << (FN * 4))) 642*4882a593Smuzhiyun #define QLC_DEV_CLR_REF_CNT(VAL, FN) ((VAL) &= ~(1 << (FN * 4))) 643*4882a593Smuzhiyun #define QLC_DEV_SET_RST_RDY(VAL, FN) ((VAL) |= (1 << (FN * 4))) 644*4882a593Smuzhiyun #define QLC_DEV_SET_QSCNT_RDY(VAL, FN) ((VAL) |= (2 << (FN * 4))) 645*4882a593Smuzhiyun #define QLC_DEV_CLR_RST_QSCNT(VAL, FN) ((VAL) &= ~(3 << (FN * 4))) 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun #define QLC_DEV_GET_DRV(VAL, FN) (0xf & ((VAL) >> (FN * 4))) 648*4882a593Smuzhiyun #define QLC_DEV_SET_DRV(VAL, FN) ((VAL) << (FN * 4)) 649*4882a593Smuzhiyun 650*4882a593Smuzhiyun #define QLCNIC_TYPE_NIC 1 651*4882a593Smuzhiyun #define QLCNIC_TYPE_FCOE 2 652*4882a593Smuzhiyun #define QLCNIC_TYPE_ISCSI 3 653*4882a593Smuzhiyun 654*4882a593Smuzhiyun #define QLCNIC_RCODE_DRIVER_INFO 0x20000000 655*4882a593Smuzhiyun #define QLCNIC_RCODE_DRIVER_CAN_RELOAD BIT_30 656*4882a593Smuzhiyun #define QLCNIC_RCODE_FATAL_ERROR BIT_31 657*4882a593Smuzhiyun #define QLCNIC_FWERROR_PEGNUM(code) ((code) & 0xff) 658*4882a593Smuzhiyun #define QLCNIC_FWERROR_CODE(code) ((code >> 8) & 0x1fffff) 659*4882a593Smuzhiyun #define QLCNIC_FWERROR_FAN_FAILURE 0x16 660*4882a593Smuzhiyun 661*4882a593Smuzhiyun #define FW_POLL_DELAY (1 * HZ) 662*4882a593Smuzhiyun #define FW_FAIL_THRESH 2 663*4882a593Smuzhiyun 664*4882a593Smuzhiyun #define QLCNIC_RESET_TIMEOUT_SECS 10 665*4882a593Smuzhiyun #define QLCNIC_INIT_TIMEOUT_SECS 30 666*4882a593Smuzhiyun #define QLCNIC_RCVPEG_CHECK_RETRY_COUNT 2000 667*4882a593Smuzhiyun #define QLCNIC_RCVPEG_CHECK_DELAY 10 668*4882a593Smuzhiyun #define QLCNIC_CMDPEG_CHECK_RETRY_COUNT 60 669*4882a593Smuzhiyun #define QLCNIC_CMDPEG_CHECK_DELAY 500 670*4882a593Smuzhiyun #define QLCNIC_HEARTBEAT_PERIOD_MSECS 200 671*4882a593Smuzhiyun #define QLCNIC_HEARTBEAT_CHECK_RETRY_COUNT 10 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun #define QLCNIC_MAX_MC_COUNT 38 674*4882a593Smuzhiyun #define QLCNIC_MAX_UC_COUNT 512 675*4882a593Smuzhiyun #define QLCNIC_WATCHDOG_TIMEOUTVALUE 5 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun #define ISR_MSI_INT_TRIGGER(FUNC) (QLCNIC_PCIX_PS_REG(PCIX_MSI_F(FUNC))) 678*4882a593Smuzhiyun #define ISR_LEGACY_INT_TRIGGERED(VAL) (((VAL) & 0x300) == 0x200) 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun /* 681*4882a593Smuzhiyun * PCI Interrupt Vector Values. 682*4882a593Smuzhiyun */ 683*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F0 0x0080 684*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F1 0x0100 685*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F2 0x0200 686*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F3 0x0400 687*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F4 0x0800 688*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F5 0x1000 689*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F6 0x2000 690*4882a593Smuzhiyun #define PCIX_INT_VECTOR_BIT_F7 0x4000 691*4882a593Smuzhiyun 692*4882a593Smuzhiyun struct qlcnic_legacy_intr_set { 693*4882a593Smuzhiyun u32 int_vec_bit; 694*4882a593Smuzhiyun u32 tgt_status_reg; 695*4882a593Smuzhiyun u32 tgt_mask_reg; 696*4882a593Smuzhiyun u32 pci_int_reg; 697*4882a593Smuzhiyun }; 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun #define QLCNIC_MSIX_BASE 0x132110 700*4882a593Smuzhiyun #define QLCNIC_MAX_VLAN_FILTERS 64 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun #define FLASH_ROM_WINDOW 0x42110030 703*4882a593Smuzhiyun #define FLASH_ROM_DATA 0x42150000 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun #define QLCNIC_FW_DUMP_REG1 0x00130060 706*4882a593Smuzhiyun #define QLCNIC_FW_DUMP_REG2 0x001e0000 707*4882a593Smuzhiyun #define QLCNIC_FLASH_SEM2_LK 0x0013C010 708*4882a593Smuzhiyun #define QLCNIC_FLASH_SEM2_ULK 0x0013C014 709*4882a593Smuzhiyun #define QLCNIC_FLASH_LOCK_ID 0x001B2100 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun /* PCI function operational mode */ 712*4882a593Smuzhiyun enum { 713*4882a593Smuzhiyun QLCNIC_MGMT_FUNC = 0, 714*4882a593Smuzhiyun QLCNIC_PRIV_FUNC = 1, 715*4882a593Smuzhiyun QLCNIC_NON_PRIV_FUNC = 2, 716*4882a593Smuzhiyun QLCNIC_SRIOV_PF_FUNC = 3, 717*4882a593Smuzhiyun QLCNIC_SRIOV_VF_FUNC = 4, 718*4882a593Smuzhiyun QLCNIC_UNKNOWN_FUNC_MODE = 5 719*4882a593Smuzhiyun }; 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun enum { 722*4882a593Smuzhiyun QLCNIC_PORT_DEFAULTS = 0, 723*4882a593Smuzhiyun QLCNIC_ADD_VLAN = 1, 724*4882a593Smuzhiyun QLCNIC_DEL_VLAN = 2 725*4882a593Smuzhiyun }; 726*4882a593Smuzhiyun 727*4882a593Smuzhiyun #define QLC_DEV_DRV_DEFAULT 0x11111111 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun #define LSB(x) ((uint8_t)(x)) 730*4882a593Smuzhiyun #define MSB(x) ((uint8_t)((uint16_t)(x) >> 8)) 731*4882a593Smuzhiyun 732*4882a593Smuzhiyun #define LSW(x) ((uint16_t)((uint32_t)(x))) 733*4882a593Smuzhiyun #define MSW(x) ((uint16_t)((uint32_t)(x) >> 16)) 734*4882a593Smuzhiyun 735*4882a593Smuzhiyun #define LSD(x) ((uint32_t)((uint64_t)(x))) 736*4882a593Smuzhiyun #define MSD(x) ((uint32_t)((((uint64_t)(x)) >> 16) >> 16)) 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun #define QLCNIC_MS_CTRL 0x41000090 739*4882a593Smuzhiyun #define QLCNIC_MS_ADDR_LO 0x41000094 740*4882a593Smuzhiyun #define QLCNIC_MS_ADDR_HI 0x41000098 741*4882a593Smuzhiyun #define QLCNIC_MS_WRTDATA_LO 0x410000A0 742*4882a593Smuzhiyun #define QLCNIC_MS_WRTDATA_HI 0x410000A4 743*4882a593Smuzhiyun #define QLCNIC_MS_WRTDATA_ULO 0x410000B0 744*4882a593Smuzhiyun #define QLCNIC_MS_WRTDATA_UHI 0x410000B4 745*4882a593Smuzhiyun #define QLCNIC_MS_RDDATA_LO 0x410000A8 746*4882a593Smuzhiyun #define QLCNIC_MS_RDDATA_HI 0x410000AC 747*4882a593Smuzhiyun #define QLCNIC_MS_RDDATA_ULO 0x410000B8 748*4882a593Smuzhiyun #define QLCNIC_MS_RDDATA_UHI 0x410000BC 749*4882a593Smuzhiyun 750*4882a593Smuzhiyun #define QLCNIC_TA_WRITE_ENABLE (TA_CTL_ENABLE | TA_CTL_WRITE) 751*4882a593Smuzhiyun #define QLCNIC_TA_WRITE_START (TA_CTL_START | TA_CTL_ENABLE | TA_CTL_WRITE) 752*4882a593Smuzhiyun #define QLCNIC_TA_START_ENABLE (TA_CTL_START | TA_CTL_ENABLE) 753*4882a593Smuzhiyun 754*4882a593Smuzhiyun #define QLCNIC_LEGACY_INTR_CONFIG \ 755*4882a593Smuzhiyun { \ 756*4882a593Smuzhiyun { \ 757*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F0, \ 758*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS, \ 759*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK, }, \ 760*4882a593Smuzhiyun \ 761*4882a593Smuzhiyun { \ 762*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F1, \ 763*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F1, \ 764*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F1, }, \ 765*4882a593Smuzhiyun \ 766*4882a593Smuzhiyun { \ 767*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F2, \ 768*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F2, \ 769*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F2, }, \ 770*4882a593Smuzhiyun \ 771*4882a593Smuzhiyun { \ 772*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F3, \ 773*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F3, \ 774*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F3, }, \ 775*4882a593Smuzhiyun \ 776*4882a593Smuzhiyun { \ 777*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F4, \ 778*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F4, \ 779*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F4, }, \ 780*4882a593Smuzhiyun \ 781*4882a593Smuzhiyun { \ 782*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F5, \ 783*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F5, \ 784*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F5, }, \ 785*4882a593Smuzhiyun \ 786*4882a593Smuzhiyun { \ 787*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F6, \ 788*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F6, \ 789*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F6, }, \ 790*4882a593Smuzhiyun \ 791*4882a593Smuzhiyun { \ 792*4882a593Smuzhiyun .int_vec_bit = PCIX_INT_VECTOR_BIT_F7, \ 793*4882a593Smuzhiyun .tgt_status_reg = ISR_INT_TARGET_STATUS_F7, \ 794*4882a593Smuzhiyun .tgt_mask_reg = ISR_INT_TARGET_MASK_F7, }, \ 795*4882a593Smuzhiyun } 796*4882a593Smuzhiyun 797*4882a593Smuzhiyun /* NIU REGS */ 798*4882a593Smuzhiyun 799*4882a593Smuzhiyun #define _qlcnic_crb_get_bit(var, bit) ((var >> bit) & 0x1) 800*4882a593Smuzhiyun 801*4882a593Smuzhiyun /* 802*4882a593Smuzhiyun * NIU GB MAC Config Register 0 (applies to GB0, GB1, GB2, GB3) 803*4882a593Smuzhiyun * 804*4882a593Smuzhiyun * Bit 0 : enable_tx => 1:enable frame xmit, 0:disable 805*4882a593Smuzhiyun * Bit 1 : tx_synced => R/O: xmit enable synched to xmit stream 806*4882a593Smuzhiyun * Bit 2 : enable_rx => 1:enable frame recv, 0:disable 807*4882a593Smuzhiyun * Bit 3 : rx_synced => R/O: recv enable synched to recv stream 808*4882a593Smuzhiyun * Bit 4 : tx_flowctl => 1:enable pause frame generation, 0:disable 809*4882a593Smuzhiyun * Bit 5 : rx_flowctl => 1:act on recv'd pause frames, 0:ignore 810*4882a593Smuzhiyun * Bit 8 : loopback => 1:loop MAC xmits to MAC recvs, 0:normal 811*4882a593Smuzhiyun * Bit 16: tx_reset_pb => 1:reset frame xmit protocol blk, 0:no-op 812*4882a593Smuzhiyun * Bit 17: rx_reset_pb => 1:reset frame recv protocol blk, 0:no-op 813*4882a593Smuzhiyun * Bit 18: tx_reset_mac => 1:reset data/ctl multiplexer blk, 0:no-op 814*4882a593Smuzhiyun * Bit 19: rx_reset_mac => 1:reset ctl frames & timers blk, 0:no-op 815*4882a593Smuzhiyun * Bit 31: soft_reset => 1:reset the MAC and the SERDES, 0:no-op 816*4882a593Smuzhiyun */ 817*4882a593Smuzhiyun #define qlcnic_gb_rx_flowctl(config_word) \ 818*4882a593Smuzhiyun ((config_word) |= 1 << 5) 819*4882a593Smuzhiyun #define qlcnic_gb_get_rx_flowctl(config_word) \ 820*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 5) 821*4882a593Smuzhiyun #define qlcnic_gb_unset_rx_flowctl(config_word) \ 822*4882a593Smuzhiyun ((config_word) &= ~(1 << 5)) 823*4882a593Smuzhiyun 824*4882a593Smuzhiyun /* 825*4882a593Smuzhiyun * NIU GB Pause Ctl Register 826*4882a593Smuzhiyun */ 827*4882a593Smuzhiyun 828*4882a593Smuzhiyun #define qlcnic_gb_set_gb0_mask(config_word) \ 829*4882a593Smuzhiyun ((config_word) |= 1 << 0) 830*4882a593Smuzhiyun #define qlcnic_gb_set_gb1_mask(config_word) \ 831*4882a593Smuzhiyun ((config_word) |= 1 << 2) 832*4882a593Smuzhiyun #define qlcnic_gb_set_gb2_mask(config_word) \ 833*4882a593Smuzhiyun ((config_word) |= 1 << 4) 834*4882a593Smuzhiyun #define qlcnic_gb_set_gb3_mask(config_word) \ 835*4882a593Smuzhiyun ((config_word) |= 1 << 6) 836*4882a593Smuzhiyun 837*4882a593Smuzhiyun #define qlcnic_gb_get_gb0_mask(config_word) \ 838*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 0) 839*4882a593Smuzhiyun #define qlcnic_gb_get_gb1_mask(config_word) \ 840*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 2) 841*4882a593Smuzhiyun #define qlcnic_gb_get_gb2_mask(config_word) \ 842*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 4) 843*4882a593Smuzhiyun #define qlcnic_gb_get_gb3_mask(config_word) \ 844*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 6) 845*4882a593Smuzhiyun 846*4882a593Smuzhiyun #define qlcnic_gb_unset_gb0_mask(config_word) \ 847*4882a593Smuzhiyun ((config_word) &= ~(1 << 0)) 848*4882a593Smuzhiyun #define qlcnic_gb_unset_gb1_mask(config_word) \ 849*4882a593Smuzhiyun ((config_word) &= ~(1 << 2)) 850*4882a593Smuzhiyun #define qlcnic_gb_unset_gb2_mask(config_word) \ 851*4882a593Smuzhiyun ((config_word) &= ~(1 << 4)) 852*4882a593Smuzhiyun #define qlcnic_gb_unset_gb3_mask(config_word) \ 853*4882a593Smuzhiyun ((config_word) &= ~(1 << 6)) 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun /* 856*4882a593Smuzhiyun * NIU XG Pause Ctl Register 857*4882a593Smuzhiyun * 858*4882a593Smuzhiyun * Bit 0 : xg0_mask => 1:disable tx pause frames 859*4882a593Smuzhiyun * Bit 1 : xg0_request => 1:request single pause frame 860*4882a593Smuzhiyun * Bit 2 : xg0_on_off => 1:request is pause on, 0:off 861*4882a593Smuzhiyun * Bit 3 : xg1_mask => 1:disable tx pause frames 862*4882a593Smuzhiyun * Bit 4 : xg1_request => 1:request single pause frame 863*4882a593Smuzhiyun * Bit 5 : xg1_on_off => 1:request is pause on, 0:off 864*4882a593Smuzhiyun */ 865*4882a593Smuzhiyun 866*4882a593Smuzhiyun #define qlcnic_xg_set_xg0_mask(config_word) \ 867*4882a593Smuzhiyun ((config_word) |= 1 << 0) 868*4882a593Smuzhiyun #define qlcnic_xg_set_xg1_mask(config_word) \ 869*4882a593Smuzhiyun ((config_word) |= 1 << 3) 870*4882a593Smuzhiyun 871*4882a593Smuzhiyun #define qlcnic_xg_get_xg0_mask(config_word) \ 872*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 0) 873*4882a593Smuzhiyun #define qlcnic_xg_get_xg1_mask(config_word) \ 874*4882a593Smuzhiyun _qlcnic_crb_get_bit((config_word), 3) 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun #define qlcnic_xg_unset_xg0_mask(config_word) \ 877*4882a593Smuzhiyun ((config_word) &= ~(1 << 0)) 878*4882a593Smuzhiyun #define qlcnic_xg_unset_xg1_mask(config_word) \ 879*4882a593Smuzhiyun ((config_word) &= ~(1 << 3)) 880*4882a593Smuzhiyun 881*4882a593Smuzhiyun /* 882*4882a593Smuzhiyun * NIU XG Pause Ctl Register 883*4882a593Smuzhiyun * 884*4882a593Smuzhiyun * Bit 0 : xg0_mask => 1:disable tx pause frames 885*4882a593Smuzhiyun * Bit 1 : xg0_request => 1:request single pause frame 886*4882a593Smuzhiyun * Bit 2 : xg0_on_off => 1:request is pause on, 0:off 887*4882a593Smuzhiyun * Bit 3 : xg1_mask => 1:disable tx pause frames 888*4882a593Smuzhiyun * Bit 4 : xg1_request => 1:request single pause frame 889*4882a593Smuzhiyun * Bit 5 : xg1_on_off => 1:request is pause on, 0:off 890*4882a593Smuzhiyun */ 891*4882a593Smuzhiyun 892*4882a593Smuzhiyun /* 893*4882a593Smuzhiyun * PHY-Specific MII control/status registers. 894*4882a593Smuzhiyun */ 895*4882a593Smuzhiyun #define QLCNIC_NIU_GB_MII_MGMT_ADDR_AUTONEG 4 896*4882a593Smuzhiyun #define QLCNIC_NIU_GB_MII_MGMT_ADDR_PHY_STATUS 17 897*4882a593Smuzhiyun 898*4882a593Smuzhiyun /* 899*4882a593Smuzhiyun * PHY-Specific Status Register (reg 17). 900*4882a593Smuzhiyun * 901*4882a593Smuzhiyun * Bit 0 : jabber => 1:jabber detected, 0:not 902*4882a593Smuzhiyun * Bit 1 : polarity => 1:polarity reversed, 0:normal 903*4882a593Smuzhiyun * Bit 2 : recvpause => 1:receive pause enabled, 0:disabled 904*4882a593Smuzhiyun * Bit 3 : xmitpause => 1:transmit pause enabled, 0:disabled 905*4882a593Smuzhiyun * Bit 4 : energydetect => 1:sleep, 0:active 906*4882a593Smuzhiyun * Bit 5 : downshift => 1:downshift, 0:no downshift 907*4882a593Smuzhiyun * Bit 6 : crossover => 1:MDIX (crossover), 0:MDI (no crossover) 908*4882a593Smuzhiyun * Bits 7-9 : cablelen => not valid in 10Mb/s mode 909*4882a593Smuzhiyun * 0:<50m, 1:50-80m, 2:80-110m, 3:110-140m, 4:>140m 910*4882a593Smuzhiyun * Bit 10 : link => 1:link up, 0:link down 911*4882a593Smuzhiyun * Bit 11 : resolved => 1:speed and duplex resolved, 0:not yet 912*4882a593Smuzhiyun * Bit 12 : pagercvd => 1:page received, 0:page not received 913*4882a593Smuzhiyun * Bit 13 : duplex => 1:full duplex, 0:half duplex 914*4882a593Smuzhiyun * Bits 14-15 : speed => 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd 915*4882a593Smuzhiyun */ 916*4882a593Smuzhiyun 917*4882a593Smuzhiyun #define qlcnic_get_phy_speed(config_word) (((config_word) >> 14) & 0x03) 918*4882a593Smuzhiyun 919*4882a593Smuzhiyun #define qlcnic_set_phy_speed(config_word, val) \ 920*4882a593Smuzhiyun ((config_word) |= ((val & 0x03) << 14)) 921*4882a593Smuzhiyun #define qlcnic_set_phy_duplex(config_word) \ 922*4882a593Smuzhiyun ((config_word) |= 1 << 13) 923*4882a593Smuzhiyun #define qlcnic_clear_phy_duplex(config_word) \ 924*4882a593Smuzhiyun ((config_word) &= ~(1 << 13)) 925*4882a593Smuzhiyun 926*4882a593Smuzhiyun #define qlcnic_get_phy_link(config_word) \ 927*4882a593Smuzhiyun _qlcnic_crb_get_bit(config_word, 10) 928*4882a593Smuzhiyun #define qlcnic_get_phy_duplex(config_word) \ 929*4882a593Smuzhiyun _qlcnic_crb_get_bit(config_word, 13) 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun #define QLCNIC_NIU_NON_PROMISC_MODE 0 932*4882a593Smuzhiyun #define QLCNIC_NIU_PROMISC_MODE 1 933*4882a593Smuzhiyun #define QLCNIC_NIU_ALLMULTI_MODE 2 934*4882a593Smuzhiyun 935*4882a593Smuzhiyun #define QLCNIC_PCIE_SEM_TIMEOUT 10000 936*4882a593Smuzhiyun 937*4882a593Smuzhiyun struct crb_128M_2M_sub_block_map { 938*4882a593Smuzhiyun unsigned valid; 939*4882a593Smuzhiyun unsigned start_128M; 940*4882a593Smuzhiyun unsigned end_128M; 941*4882a593Smuzhiyun unsigned start_2M; 942*4882a593Smuzhiyun }; 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun struct crb_128M_2M_block_map{ 945*4882a593Smuzhiyun struct crb_128M_2M_sub_block_map sub_block[16]; 946*4882a593Smuzhiyun }; 947*4882a593Smuzhiyun #endif /* __QLCNIC_HDR_H_ */ 948