Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * QLogic qlcnic NIC Driver
0004  * Copyright (c) 2009-2013 QLogic Corporation
0005  */
0006 
0007 #ifndef __QLCNIC_HDR_H_
0008 #define __QLCNIC_HDR_H_
0009 
0010 #include <linux/kernel.h>
0011 #include <linux/types.h>
0012 
0013 #include "qlcnic_hw.h"
0014 
0015 /*
0016  * The basic unit of access when reading/writing control registers.
0017  */
0018 
0019 enum {
0020     QLCNIC_HW_H0_CH_HUB_ADR = 0x05,
0021     QLCNIC_HW_H1_CH_HUB_ADR = 0x0E,
0022     QLCNIC_HW_H2_CH_HUB_ADR = 0x03,
0023     QLCNIC_HW_H3_CH_HUB_ADR = 0x01,
0024     QLCNIC_HW_H4_CH_HUB_ADR = 0x06,
0025     QLCNIC_HW_H5_CH_HUB_ADR = 0x07,
0026     QLCNIC_HW_H6_CH_HUB_ADR = 0x08
0027 };
0028 
0029 /*  Hub 0 */
0030 enum {
0031     QLCNIC_HW_MN_CRB_AGT_ADR = 0x15,
0032     QLCNIC_HW_MS_CRB_AGT_ADR = 0x25
0033 };
0034 
0035 /*  Hub 1 */
0036 enum {
0037     QLCNIC_HW_PS_CRB_AGT_ADR = 0x73,
0038     QLCNIC_HW_SS_CRB_AGT_ADR = 0x20,
0039     QLCNIC_HW_RPMX3_CRB_AGT_ADR = 0x0b,
0040     QLCNIC_HW_QMS_CRB_AGT_ADR = 0x00,
0041     QLCNIC_HW_SQGS0_CRB_AGT_ADR = 0x01,
0042     QLCNIC_HW_SQGS1_CRB_AGT_ADR = 0x02,
0043     QLCNIC_HW_SQGS2_CRB_AGT_ADR = 0x03,
0044     QLCNIC_HW_SQGS3_CRB_AGT_ADR = 0x04,
0045     QLCNIC_HW_C2C0_CRB_AGT_ADR = 0x58,
0046     QLCNIC_HW_C2C1_CRB_AGT_ADR = 0x59,
0047     QLCNIC_HW_C2C2_CRB_AGT_ADR = 0x5a,
0048     QLCNIC_HW_RPMX2_CRB_AGT_ADR = 0x0a,
0049     QLCNIC_HW_RPMX4_CRB_AGT_ADR = 0x0c,
0050     QLCNIC_HW_RPMX7_CRB_AGT_ADR = 0x0f,
0051     QLCNIC_HW_RPMX9_CRB_AGT_ADR = 0x12,
0052     QLCNIC_HW_SMB_CRB_AGT_ADR = 0x18
0053 };
0054 
0055 /*  Hub 2 */
0056 enum {
0057     QLCNIC_HW_NIU_CRB_AGT_ADR = 0x31,
0058     QLCNIC_HW_I2C0_CRB_AGT_ADR = 0x19,
0059     QLCNIC_HW_I2C1_CRB_AGT_ADR = 0x29,
0060 
0061     QLCNIC_HW_SN_CRB_AGT_ADR = 0x10,
0062     QLCNIC_HW_I2Q_CRB_AGT_ADR = 0x20,
0063     QLCNIC_HW_LPC_CRB_AGT_ADR = 0x22,
0064     QLCNIC_HW_ROMUSB_CRB_AGT_ADR = 0x21,
0065     QLCNIC_HW_QM_CRB_AGT_ADR = 0x66,
0066     QLCNIC_HW_SQG0_CRB_AGT_ADR = 0x60,
0067     QLCNIC_HW_SQG1_CRB_AGT_ADR = 0x61,
0068     QLCNIC_HW_SQG2_CRB_AGT_ADR = 0x62,
0069     QLCNIC_HW_SQG3_CRB_AGT_ADR = 0x63,
0070     QLCNIC_HW_RPMX1_CRB_AGT_ADR = 0x09,
0071     QLCNIC_HW_RPMX5_CRB_AGT_ADR = 0x0d,
0072     QLCNIC_HW_RPMX6_CRB_AGT_ADR = 0x0e,
0073     QLCNIC_HW_RPMX8_CRB_AGT_ADR = 0x11
0074 };
0075 
0076 /*  Hub 3 */
0077 enum {
0078     QLCNIC_HW_PH_CRB_AGT_ADR = 0x1A,
0079     QLCNIC_HW_SRE_CRB_AGT_ADR = 0x50,
0080     QLCNIC_HW_EG_CRB_AGT_ADR = 0x51,
0081     QLCNIC_HW_RPMX0_CRB_AGT_ADR = 0x08
0082 };
0083 
0084 /*  Hub 4 */
0085 enum {
0086     QLCNIC_HW_PEGN0_CRB_AGT_ADR = 0x40,
0087     QLCNIC_HW_PEGN1_CRB_AGT_ADR,
0088     QLCNIC_HW_PEGN2_CRB_AGT_ADR,
0089     QLCNIC_HW_PEGN3_CRB_AGT_ADR,
0090     QLCNIC_HW_PEGNI_CRB_AGT_ADR,
0091     QLCNIC_HW_PEGND_CRB_AGT_ADR,
0092     QLCNIC_HW_PEGNC_CRB_AGT_ADR,
0093     QLCNIC_HW_PEGR0_CRB_AGT_ADR,
0094     QLCNIC_HW_PEGR1_CRB_AGT_ADR,
0095     QLCNIC_HW_PEGR2_CRB_AGT_ADR,
0096     QLCNIC_HW_PEGR3_CRB_AGT_ADR,
0097     QLCNIC_HW_PEGN4_CRB_AGT_ADR
0098 };
0099 
0100 /*  Hub 5 */
0101 enum {
0102     QLCNIC_HW_PEGS0_CRB_AGT_ADR = 0x40,
0103     QLCNIC_HW_PEGS1_CRB_AGT_ADR,
0104     QLCNIC_HW_PEGS2_CRB_AGT_ADR,
0105     QLCNIC_HW_PEGS3_CRB_AGT_ADR,
0106     QLCNIC_HW_PEGSI_CRB_AGT_ADR,
0107     QLCNIC_HW_PEGSD_CRB_AGT_ADR,
0108     QLCNIC_HW_PEGSC_CRB_AGT_ADR
0109 };
0110 
0111 /*  Hub 6 */
0112 enum {
0113     QLCNIC_HW_CAS0_CRB_AGT_ADR = 0x46,
0114     QLCNIC_HW_CAS1_CRB_AGT_ADR = 0x47,
0115     QLCNIC_HW_CAS2_CRB_AGT_ADR = 0x48,
0116     QLCNIC_HW_CAS3_CRB_AGT_ADR = 0x49,
0117     QLCNIC_HW_NCM_CRB_AGT_ADR = 0x16,
0118     QLCNIC_HW_TMR_CRB_AGT_ADR = 0x17,
0119     QLCNIC_HW_XDMA_CRB_AGT_ADR = 0x05,
0120     QLCNIC_HW_OCM0_CRB_AGT_ADR = 0x06,
0121     QLCNIC_HW_OCM1_CRB_AGT_ADR = 0x07
0122 };
0123 
0124 /*  Floaters - non existent modules */
0125 #define QLCNIC_HW_EFC_RPMX0_CRB_AGT_ADR 0x67
0126 
0127 /*  This field defines PCI/X adr [25:20] of agents on the CRB */
0128 enum {
0129     QLCNIC_HW_PX_MAP_CRB_PH = 0,
0130     QLCNIC_HW_PX_MAP_CRB_PS,
0131     QLCNIC_HW_PX_MAP_CRB_MN,
0132     QLCNIC_HW_PX_MAP_CRB_MS,
0133     QLCNIC_HW_PX_MAP_CRB_PGR1,
0134     QLCNIC_HW_PX_MAP_CRB_SRE,
0135     QLCNIC_HW_PX_MAP_CRB_NIU,
0136     QLCNIC_HW_PX_MAP_CRB_QMN,
0137     QLCNIC_HW_PX_MAP_CRB_SQN0,
0138     QLCNIC_HW_PX_MAP_CRB_SQN1,
0139     QLCNIC_HW_PX_MAP_CRB_SQN2,
0140     QLCNIC_HW_PX_MAP_CRB_SQN3,
0141     QLCNIC_HW_PX_MAP_CRB_QMS,
0142     QLCNIC_HW_PX_MAP_CRB_SQS0,
0143     QLCNIC_HW_PX_MAP_CRB_SQS1,
0144     QLCNIC_HW_PX_MAP_CRB_SQS2,
0145     QLCNIC_HW_PX_MAP_CRB_SQS3,
0146     QLCNIC_HW_PX_MAP_CRB_PGN0,
0147     QLCNIC_HW_PX_MAP_CRB_PGN1,
0148     QLCNIC_HW_PX_MAP_CRB_PGN2,
0149     QLCNIC_HW_PX_MAP_CRB_PGN3,
0150     QLCNIC_HW_PX_MAP_CRB_PGND,
0151     QLCNIC_HW_PX_MAP_CRB_PGNI,
0152     QLCNIC_HW_PX_MAP_CRB_PGS0,
0153     QLCNIC_HW_PX_MAP_CRB_PGS1,
0154     QLCNIC_HW_PX_MAP_CRB_PGS2,
0155     QLCNIC_HW_PX_MAP_CRB_PGS3,
0156     QLCNIC_HW_PX_MAP_CRB_PGSD,
0157     QLCNIC_HW_PX_MAP_CRB_PGSI,
0158     QLCNIC_HW_PX_MAP_CRB_SN,
0159     QLCNIC_HW_PX_MAP_CRB_PGR2,
0160     QLCNIC_HW_PX_MAP_CRB_EG,
0161     QLCNIC_HW_PX_MAP_CRB_PH2,
0162     QLCNIC_HW_PX_MAP_CRB_PS2,
0163     QLCNIC_HW_PX_MAP_CRB_CAM,
0164     QLCNIC_HW_PX_MAP_CRB_CAS0,
0165     QLCNIC_HW_PX_MAP_CRB_CAS1,
0166     QLCNIC_HW_PX_MAP_CRB_CAS2,
0167     QLCNIC_HW_PX_MAP_CRB_C2C0,
0168     QLCNIC_HW_PX_MAP_CRB_C2C1,
0169     QLCNIC_HW_PX_MAP_CRB_TIMR,
0170     QLCNIC_HW_PX_MAP_CRB_PGR3,
0171     QLCNIC_HW_PX_MAP_CRB_RPMX1,
0172     QLCNIC_HW_PX_MAP_CRB_RPMX2,
0173     QLCNIC_HW_PX_MAP_CRB_RPMX3,
0174     QLCNIC_HW_PX_MAP_CRB_RPMX4,
0175     QLCNIC_HW_PX_MAP_CRB_RPMX5,
0176     QLCNIC_HW_PX_MAP_CRB_RPMX6,
0177     QLCNIC_HW_PX_MAP_CRB_RPMX7,
0178     QLCNIC_HW_PX_MAP_CRB_XDMA,
0179     QLCNIC_HW_PX_MAP_CRB_I2Q,
0180     QLCNIC_HW_PX_MAP_CRB_ROMUSB,
0181     QLCNIC_HW_PX_MAP_CRB_CAS3,
0182     QLCNIC_HW_PX_MAP_CRB_RPMX0,
0183     QLCNIC_HW_PX_MAP_CRB_RPMX8,
0184     QLCNIC_HW_PX_MAP_CRB_RPMX9,
0185     QLCNIC_HW_PX_MAP_CRB_OCM0,
0186     QLCNIC_HW_PX_MAP_CRB_OCM1,
0187     QLCNIC_HW_PX_MAP_CRB_SMB,
0188     QLCNIC_HW_PX_MAP_CRB_I2C0,
0189     QLCNIC_HW_PX_MAP_CRB_I2C1,
0190     QLCNIC_HW_PX_MAP_CRB_LPC,
0191     QLCNIC_HW_PX_MAP_CRB_PGNC,
0192     QLCNIC_HW_PX_MAP_CRB_PGR0
0193 };
0194 
0195 #define BIT_0   0x1
0196 #define BIT_1   0x2
0197 #define BIT_2   0x4
0198 #define BIT_3   0x8
0199 #define BIT_4   0x10
0200 #define BIT_5   0x20
0201 #define BIT_6   0x40
0202 #define BIT_7   0x80
0203 #define BIT_8   0x100
0204 #define BIT_9   0x200
0205 #define BIT_10  0x400
0206 #define BIT_11  0x800
0207 #define BIT_12  0x1000
0208 #define BIT_13  0x2000
0209 #define BIT_14  0x4000
0210 #define BIT_15  0x8000
0211 #define BIT_16  0x10000
0212 #define BIT_17  0x20000
0213 #define BIT_18  0x40000
0214 #define BIT_19  0x80000
0215 #define BIT_20  0x100000
0216 #define BIT_21  0x200000
0217 #define BIT_22  0x400000
0218 #define BIT_23  0x800000
0219 #define BIT_24  0x1000000
0220 #define BIT_25  0x2000000
0221 #define BIT_26  0x4000000
0222 #define BIT_27  0x8000000
0223 #define BIT_28  0x10000000
0224 #define BIT_29  0x20000000
0225 #define BIT_30  0x40000000
0226 #define BIT_31  0x80000000
0227 
0228 /*  This field defines CRB adr [31:20] of the agents */
0229 
0230 #define QLCNIC_HW_CRB_HUB_AGT_ADR_MN    \
0231     ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_MN_CRB_AGT_ADR)
0232 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PH    \
0233     ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_PH_CRB_AGT_ADR)
0234 #define QLCNIC_HW_CRB_HUB_AGT_ADR_MS    \
0235     ((QLCNIC_HW_H0_CH_HUB_ADR << 7) | QLCNIC_HW_MS_CRB_AGT_ADR)
0236 
0237 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PS    \
0238     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_PS_CRB_AGT_ADR)
0239 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SS    \
0240     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SS_CRB_AGT_ADR)
0241 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX3 \
0242     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX3_CRB_AGT_ADR)
0243 #define QLCNIC_HW_CRB_HUB_AGT_ADR_QMS   \
0244     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_QMS_CRB_AGT_ADR)
0245 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS0  \
0246     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS0_CRB_AGT_ADR)
0247 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS1  \
0248     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS1_CRB_AGT_ADR)
0249 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS2  \
0250     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS2_CRB_AGT_ADR)
0251 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQS3  \
0252     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SQGS3_CRB_AGT_ADR)
0253 #define QLCNIC_HW_CRB_HUB_AGT_ADR_C2C0  \
0254     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_C2C0_CRB_AGT_ADR)
0255 #define QLCNIC_HW_CRB_HUB_AGT_ADR_C2C1  \
0256     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_C2C1_CRB_AGT_ADR)
0257 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX2 \
0258     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX2_CRB_AGT_ADR)
0259 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX4 \
0260     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX4_CRB_AGT_ADR)
0261 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX7 \
0262     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX7_CRB_AGT_ADR)
0263 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX9 \
0264     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX9_CRB_AGT_ADR)
0265 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SMB   \
0266     ((QLCNIC_HW_H1_CH_HUB_ADR << 7) | QLCNIC_HW_SMB_CRB_AGT_ADR)
0267 
0268 #define QLCNIC_HW_CRB_HUB_AGT_ADR_NIU   \
0269     ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_NIU_CRB_AGT_ADR)
0270 #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2C0  \
0271     ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_I2C0_CRB_AGT_ADR)
0272 #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2C1  \
0273     ((QLCNIC_HW_H2_CH_HUB_ADR << 7) | QLCNIC_HW_I2C1_CRB_AGT_ADR)
0274 
0275 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SRE   \
0276     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SRE_CRB_AGT_ADR)
0277 #define QLCNIC_HW_CRB_HUB_AGT_ADR_EG    \
0278     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_EG_CRB_AGT_ADR)
0279 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX0 \
0280     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX0_CRB_AGT_ADR)
0281 #define QLCNIC_HW_CRB_HUB_AGT_ADR_QMN   \
0282     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_QM_CRB_AGT_ADR)
0283 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN0  \
0284     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG0_CRB_AGT_ADR)
0285 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN1  \
0286     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG1_CRB_AGT_ADR)
0287 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN2  \
0288     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG2_CRB_AGT_ADR)
0289 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SQN3  \
0290     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_SQG3_CRB_AGT_ADR)
0291 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX1 \
0292     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX1_CRB_AGT_ADR)
0293 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX5 \
0294     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX5_CRB_AGT_ADR)
0295 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX6 \
0296     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX6_CRB_AGT_ADR)
0297 #define QLCNIC_HW_CRB_HUB_AGT_ADR_RPMX8 \
0298     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_RPMX8_CRB_AGT_ADR)
0299 #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS0  \
0300     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS0_CRB_AGT_ADR)
0301 #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS1  \
0302     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS1_CRB_AGT_ADR)
0303 #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS2  \
0304     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS2_CRB_AGT_ADR)
0305 #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAS3  \
0306     ((QLCNIC_HW_H3_CH_HUB_ADR << 7) | QLCNIC_HW_CAS3_CRB_AGT_ADR)
0307 
0308 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGNI  \
0309     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGNI_CRB_AGT_ADR)
0310 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGND  \
0311     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGND_CRB_AGT_ADR)
0312 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN0  \
0313     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN0_CRB_AGT_ADR)
0314 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN1  \
0315     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN1_CRB_AGT_ADR)
0316 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN2  \
0317     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN2_CRB_AGT_ADR)
0318 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN3  \
0319     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN3_CRB_AGT_ADR)
0320 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGN4  \
0321     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGN4_CRB_AGT_ADR)
0322 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGNC  \
0323     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGNC_CRB_AGT_ADR)
0324 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR0  \
0325     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR0_CRB_AGT_ADR)
0326 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR1  \
0327     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR1_CRB_AGT_ADR)
0328 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR2  \
0329     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR2_CRB_AGT_ADR)
0330 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGR3  \
0331     ((QLCNIC_HW_H4_CH_HUB_ADR << 7) | QLCNIC_HW_PEGR3_CRB_AGT_ADR)
0332 
0333 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSI  \
0334     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSI_CRB_AGT_ADR)
0335 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSD  \
0336     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSD_CRB_AGT_ADR)
0337 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS0  \
0338     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS0_CRB_AGT_ADR)
0339 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS1  \
0340     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS1_CRB_AGT_ADR)
0341 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS2  \
0342     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS2_CRB_AGT_ADR)
0343 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGS3  \
0344     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGS3_CRB_AGT_ADR)
0345 #define QLCNIC_HW_CRB_HUB_AGT_ADR_PGSC  \
0346     ((QLCNIC_HW_H5_CH_HUB_ADR << 7) | QLCNIC_HW_PEGSC_CRB_AGT_ADR)
0347 
0348 #define QLCNIC_HW_CRB_HUB_AGT_ADR_CAM   \
0349     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_NCM_CRB_AGT_ADR)
0350 #define QLCNIC_HW_CRB_HUB_AGT_ADR_TIMR  \
0351     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_TMR_CRB_AGT_ADR)
0352 #define QLCNIC_HW_CRB_HUB_AGT_ADR_XDMA  \
0353     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_XDMA_CRB_AGT_ADR)
0354 #define QLCNIC_HW_CRB_HUB_AGT_ADR_SN    \
0355     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_SN_CRB_AGT_ADR)
0356 #define QLCNIC_HW_CRB_HUB_AGT_ADR_I2Q   \
0357     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_I2Q_CRB_AGT_ADR)
0358 #define QLCNIC_HW_CRB_HUB_AGT_ADR_ROMUSB    \
0359     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_ROMUSB_CRB_AGT_ADR)
0360 #define QLCNIC_HW_CRB_HUB_AGT_ADR_OCM0  \
0361     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_OCM0_CRB_AGT_ADR)
0362 #define QLCNIC_HW_CRB_HUB_AGT_ADR_OCM1  \
0363     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_OCM1_CRB_AGT_ADR)
0364 #define QLCNIC_HW_CRB_HUB_AGT_ADR_LPC   \
0365     ((QLCNIC_HW_H6_CH_HUB_ADR << 7) | QLCNIC_HW_LPC_CRB_AGT_ADR)
0366 
0367 #define QLCNIC_SRE_MISC     (QLCNIC_CRB_SRE + 0x0002c)
0368 
0369 #define QLCNIC_I2Q_CLR_PCI_HI   (QLCNIC_CRB_I2Q + 0x00034)
0370 
0371 #define ROMUSB_GLB      (QLCNIC_CRB_ROMUSB + 0x00000)
0372 #define ROMUSB_ROM      (QLCNIC_CRB_ROMUSB + 0x10000)
0373 
0374 #define QLCNIC_ROMUSB_GLB_STATUS    (ROMUSB_GLB + 0x0004)
0375 #define QLCNIC_ROMUSB_GLB_SW_RESET  (ROMUSB_GLB + 0x0008)
0376 #define QLCNIC_ROMUSB_GLB_PAD_GPIO_I    (ROMUSB_GLB + 0x000c)
0377 #define QLCNIC_ROMUSB_GLB_CAS_RST   (ROMUSB_GLB + 0x0038)
0378 #define QLCNIC_ROMUSB_GLB_TEST_MUX_SEL  (ROMUSB_GLB + 0x0044)
0379 #define QLCNIC_ROMUSB_GLB_PEGTUNE_DONE  (ROMUSB_GLB + 0x005c)
0380 #define QLCNIC_ROMUSB_GLB_CHIP_CLK_CTRL (ROMUSB_GLB + 0x00A8)
0381 
0382 #define QLCNIC_ROMUSB_GPIO(n)       (ROMUSB_GLB + 0x60 + (4 * (n)))
0383 
0384 #define QLCNIC_ROMUSB_ROM_INSTR_OPCODE  (ROMUSB_ROM + 0x0004)
0385 #define QLCNIC_ROMUSB_ROM_ADDRESS   (ROMUSB_ROM + 0x0008)
0386 #define QLCNIC_ROMUSB_ROM_WDATA     (ROMUSB_ROM + 0x000c)
0387 #define QLCNIC_ROMUSB_ROM_ABYTE_CNT (ROMUSB_ROM + 0x0010)
0388 #define QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT (ROMUSB_ROM + 0x0014)
0389 #define QLCNIC_ROMUSB_ROM_RDATA     (ROMUSB_ROM + 0x0018)
0390 
0391 /******************************************************************************
0392 *
0393 *    Definitions specific to M25P flash
0394 *
0395 *******************************************************************************
0396 */
0397 
0398 /* all are 1MB windows */
0399 
0400 #define QLCNIC_PCI_CRB_WINDOWSIZE   0x00100000
0401 #define QLCNIC_PCI_CRB_WINDOW(A)    \
0402     (QLCNIC_PCI_CRBSPACE + (A)*QLCNIC_PCI_CRB_WINDOWSIZE)
0403 
0404 #define QLCNIC_CRB_NIU      QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_NIU)
0405 #define QLCNIC_CRB_SRE      QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SRE)
0406 #define QLCNIC_CRB_ROMUSB   \
0407     QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_ROMUSB)
0408 #define QLCNIC_CRB_EPG      QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_EG)
0409 #define QLCNIC_CRB_I2Q      QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_I2Q)
0410 #define QLCNIC_CRB_TIMER    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_TIMR)
0411 #define QLCNIC_CRB_I2C0     QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_I2C0)
0412 #define QLCNIC_CRB_SMB      QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SMB)
0413 #define QLCNIC_CRB_MAX      QLCNIC_PCI_CRB_WINDOW(64)
0414 
0415 #define QLCNIC_CRB_PCIX_HOST    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PH)
0416 #define QLCNIC_CRB_PCIX_HOST2   QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PH2)
0417 #define QLCNIC_CRB_PEG_NET_0    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN0)
0418 #define QLCNIC_CRB_PEG_NET_1    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN1)
0419 #define QLCNIC_CRB_PEG_NET_2    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN2)
0420 #define QLCNIC_CRB_PEG_NET_3    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGN3)
0421 #define QLCNIC_CRB_PEG_NET_4    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SQS2)
0422 #define QLCNIC_CRB_PEG_NET_D    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGND)
0423 #define QLCNIC_CRB_PEG_NET_I    QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PGNI)
0424 #define QLCNIC_CRB_DDR_NET  QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_MN)
0425 #define QLCNIC_CRB_QDR_NET  QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_SN)
0426 
0427 #define QLCNIC_CRB_PCIX_MD  QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_PS)
0428 #define QLCNIC_CRB_PCIE     QLCNIC_CRB_PCIX_MD
0429 
0430 #define ISR_INT_VECTOR      (QLCNIC_PCIX_PS_REG(PCIX_INT_VECTOR))
0431 #define ISR_INT_MASK        (QLCNIC_PCIX_PS_REG(PCIX_INT_MASK))
0432 #define ISR_INT_MASK_SLOW   (QLCNIC_PCIX_PS_REG(PCIX_INT_MASK))
0433 #define ISR_INT_TARGET_STATUS   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS))
0434 #define ISR_INT_TARGET_MASK (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK))
0435 #define ISR_INT_TARGET_STATUS_F1   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F1))
0436 #define ISR_INT_TARGET_MASK_F1     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F1))
0437 #define ISR_INT_TARGET_STATUS_F2   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F2))
0438 #define ISR_INT_TARGET_MASK_F2     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F2))
0439 #define ISR_INT_TARGET_STATUS_F3   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F3))
0440 #define ISR_INT_TARGET_MASK_F3     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F3))
0441 #define ISR_INT_TARGET_STATUS_F4   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F4))
0442 #define ISR_INT_TARGET_MASK_F4     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F4))
0443 #define ISR_INT_TARGET_STATUS_F5   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F5))
0444 #define ISR_INT_TARGET_MASK_F5     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F5))
0445 #define ISR_INT_TARGET_STATUS_F6   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F6))
0446 #define ISR_INT_TARGET_MASK_F6     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F6))
0447 #define ISR_INT_TARGET_STATUS_F7   (QLCNIC_PCIX_PS_REG(PCIX_TARGET_STATUS_F7))
0448 #define ISR_INT_TARGET_MASK_F7     (QLCNIC_PCIX_PS_REG(PCIX_TARGET_MASK_F7))
0449 
0450 #define QLCNIC_PCI_OCM0_2M  (0x000c0000UL)
0451 #define QLCNIC_PCI_CRBSPACE (0x06000000UL)
0452 #define QLCNIC_PCI_CAMQM    (0x04800000UL)
0453 #define QLCNIC_PCI_CAMQM_END    (0x04800800UL)
0454 #define QLCNIC_PCI_CAMQM_2M_BASE    (0x000ff800UL)
0455 
0456 #define QLCNIC_CRB_CAM  QLCNIC_PCI_CRB_WINDOW(QLCNIC_HW_PX_MAP_CRB_CAM)
0457 
0458 #define QLCNIC_ADDR_DDR_NET (0x0000000000000000ULL)
0459 #define QLCNIC_ADDR_DDR_NET_MAX (0x000000000fffffffULL)
0460 #define QLCNIC_ADDR_OCM0    (0x0000000200000000ULL)
0461 #define QLCNIC_ADDR_OCM0_MAX    (0x00000002000fffffULL)
0462 #define QLCNIC_ADDR_OCM1    (0x0000000200400000ULL)
0463 #define QLCNIC_ADDR_OCM1_MAX    (0x00000002004fffffULL)
0464 #define QLCNIC_ADDR_QDR_NET (0x0000000300000000ULL)
0465 #define QLCNIC_ADDR_QDR_NET_MAX (0x0000000307ffffffULL)
0466 
0467 /*
0468  *   Register offsets for MN
0469  */
0470 #define QLCNIC_MIU_CONTROL  (0x000)
0471 #define QLCNIC_MIU_MN_CONTROL   (QLCNIC_CRB_DDR_NET+QLCNIC_MIU_CONTROL)
0472 
0473 /* 200ms delay in each loop */
0474 #define QLCNIC_NIU_PHY_WAITLEN      200000
0475 /* 10 seconds before we give up */
0476 #define QLCNIC_NIU_PHY_WAITMAX      50
0477 #define QLCNIC_NIU_MAX_GBE_PORTS    4
0478 #define QLCNIC_NIU_MAX_XG_PORTS     2
0479 
0480 #define QLCNIC_NIU_MODE         (QLCNIC_CRB_NIU + 0x00000)
0481 #define QLCNIC_NIU_GB_PAUSE_CTL     (QLCNIC_CRB_NIU + 0x0030c)
0482 #define QLCNIC_NIU_XG_PAUSE_CTL     (QLCNIC_CRB_NIU + 0x00098)
0483 
0484 #define QLCNIC_NIU_GB_MAC_CONFIG_0(I)       \
0485         (QLCNIC_CRB_NIU + 0x30000 + (I)*0x10000)
0486 #define QLCNIC_NIU_GB_MAC_CONFIG_1(I)       \
0487         (QLCNIC_CRB_NIU + 0x30004 + (I)*0x10000)
0488 
0489 #define MAX_CTL_CHECK   1000
0490 #define TEST_AGT_CTRL   (0x00)
0491 
0492 #define TA_CTL_START    BIT_0
0493 #define TA_CTL_ENABLE   BIT_1
0494 #define TA_CTL_WRITE    BIT_2
0495 #define TA_CTL_BUSY BIT_3
0496 
0497 /* XG Link status */
0498 #define XG_LINK_UP  0x10
0499 #define XG_LINK_DOWN    0x20
0500 
0501 #define XG_LINK_UP_P3P  0x01
0502 #define XG_LINK_DOWN_P3P    0x02
0503 #define XG_LINK_STATE_P3P_MASK 0xf
0504 #define XG_LINK_STATE_P3P(pcifn, val) \
0505     (((val) >> ((pcifn) * 4)) & XG_LINK_STATE_P3P_MASK)
0506 
0507 #define P3P_LINK_SPEED_MHZ  100
0508 #define P3P_LINK_SPEED_MASK 0xff
0509 #define P3P_LINK_SPEED_REG(pcifn)   \
0510     (CRB_PF_LINK_SPEED_1 + (((pcifn) / 4) * 4))
0511 #define P3P_LINK_SPEED_VAL(pcifn, reg)  \
0512     (((reg) >> (8 * ((pcifn) & 0x3))) & P3P_LINK_SPEED_MASK)
0513 
0514 #define QLCNIC_CAM_RAM_BASE (QLCNIC_CRB_CAM + 0x02000)
0515 #define QLCNIC_CAM_RAM(reg) (QLCNIC_CAM_RAM_BASE + (reg))
0516 #define QLCNIC_ROM_LOCK_ID  (QLCNIC_CAM_RAM(0x100))
0517 #define QLCNIC_PHY_LOCK_ID  (QLCNIC_CAM_RAM(0x120))
0518 #define QLCNIC_CRB_WIN_LOCK_ID  (QLCNIC_CAM_RAM(0x124))
0519 
0520 #define NIC_CRB_BASE        (QLCNIC_CAM_RAM(0x200))
0521 #define NIC_CRB_BASE_2      (QLCNIC_CAM_RAM(0x700))
0522 #define QLCNIC_REG(X)       (NIC_CRB_BASE+(X))
0523 #define QLCNIC_REG_2(X)     (NIC_CRB_BASE_2+(X))
0524 
0525 #define QLCNIC_CDRP_MAX_ARGS    4
0526 #define QLCNIC_CDRP_ARG(i)  (QLCNIC_REG(0x18 + ((i) * 4)))
0527 
0528 #define QLCNIC_CDRP_CRB_OFFSET      (QLCNIC_REG(0x18))
0529 #define QLCNIC_SIGN_CRB_OFFSET      (QLCNIC_REG(0x28))
0530 
0531 #define CRB_XG_STATE_P3P        (QLCNIC_REG(0x98))
0532 #define CRB_PF_LINK_SPEED_1     (QLCNIC_REG(0xe8))
0533 #define CRB_DRIVER_VERSION      (QLCNIC_REG(0x2a0))
0534 
0535 #define CRB_FW_CAPABILITIES_2       (QLCNIC_CAM_RAM(0x12c))
0536 
0537 /*
0538  * CrbPortPhanCntrHi/Lo is used to pass the address of HostPhantomIndex address
0539  * which can be read by the Phantom host to get producer/consumer indexes from
0540  * Phantom/Casper. If it is not HOST_SHARED_MEMORY, then the following
0541  * registers will be used for the addresses of the ring's shared memory
0542  * on the Phantom.
0543  */
0544 
0545 #define qlcnic_get_temp_val(x)      ((x) >> 16)
0546 #define qlcnic_get_temp_state(x)    ((x) & 0xffff)
0547 #define qlcnic_encode_temp(val, state)  (((val) << 16) | (state))
0548 
0549 /*
0550  * Temperature control.
0551  */
0552 enum {
0553     QLCNIC_TEMP_NORMAL = 0x1,   /* Normal operating range */
0554     QLCNIC_TEMP_WARN,   /* Sound alert, temperature getting high */
0555     QLCNIC_TEMP_PANIC   /* Fatal error, hardware has shut down. */
0556 };
0557 
0558 
0559 /* Lock IDs for PHY lock */
0560 #define PHY_LOCK_DRIVER     0x44524956
0561 
0562 #define PCIX_INT_VECTOR     (0x10100)
0563 #define PCIX_INT_MASK       (0x10104)
0564 
0565 #define PCIX_OCM_WINDOW     (0x10800)
0566 #define PCIX_OCM_WINDOW_REG(func)   (PCIX_OCM_WINDOW + 0x4 * (func))
0567 
0568 #define PCIX_TARGET_STATUS  (0x10118)
0569 #define PCIX_TARGET_STATUS_F1   (0x10160)
0570 #define PCIX_TARGET_STATUS_F2   (0x10164)
0571 #define PCIX_TARGET_STATUS_F3   (0x10168)
0572 #define PCIX_TARGET_STATUS_F4   (0x10360)
0573 #define PCIX_TARGET_STATUS_F5   (0x10364)
0574 #define PCIX_TARGET_STATUS_F6   (0x10368)
0575 #define PCIX_TARGET_STATUS_F7   (0x1036c)
0576 
0577 #define PCIX_TARGET_MASK    (0x10128)
0578 #define PCIX_TARGET_MASK_F1 (0x10170)
0579 #define PCIX_TARGET_MASK_F2 (0x10174)
0580 #define PCIX_TARGET_MASK_F3 (0x10178)
0581 #define PCIX_TARGET_MASK_F4 (0x10370)
0582 #define PCIX_TARGET_MASK_F5 (0x10374)
0583 #define PCIX_TARGET_MASK_F6 (0x10378)
0584 #define PCIX_TARGET_MASK_F7 (0x1037c)
0585 
0586 #define PCIX_MSI_F(i)       (0x13000+((i)*4))
0587 
0588 #define QLCNIC_PCIX_PH_REG(reg) (QLCNIC_CRB_PCIE + (reg))
0589 #define QLCNIC_PCIX_PS_REG(reg) (QLCNIC_CRB_PCIX_MD + (reg))
0590 #define QLCNIC_PCIE_REG(reg)    (QLCNIC_CRB_PCIE + (reg))
0591 
0592 #define PCIE_SEM0_LOCK      (0x1c000)
0593 #define PCIE_SEM0_UNLOCK    (0x1c004)
0594 #define PCIE_SEM_LOCK(N)    (PCIE_SEM0_LOCK + 8*(N))
0595 #define PCIE_SEM_UNLOCK(N)  (PCIE_SEM0_UNLOCK + 8*(N))
0596 
0597 #define PCIE_SETUP_FUNCTION (0x12040)
0598 #define PCIE_SETUP_FUNCTION2    (0x12048)
0599 #define PCIE_MISCCFG_RC         (0x1206c)
0600 #define PCIE_TGT_SPLIT_CHICKEN  (0x12080)
0601 #define PCIE_CHICKEN3       (0x120c8)
0602 
0603 #define ISR_INT_STATE_REG       (QLCNIC_PCIX_PS_REG(PCIE_MISCCFG_RC))
0604 #define PCIE_MAX_MASTER_SPLIT   (0x14048)
0605 
0606 #define QLCNIC_PORT_MODE_NONE       0
0607 #define QLCNIC_PORT_MODE_XG     1
0608 #define QLCNIC_PORT_MODE_GB     2
0609 #define QLCNIC_PORT_MODE_802_3_AP   3
0610 #define QLCNIC_PORT_MODE_AUTO_NEG   4
0611 #define QLCNIC_PORT_MODE_AUTO_NEG_1G    5
0612 #define QLCNIC_PORT_MODE_AUTO_NEG_XG    6
0613 #define QLCNIC_PORT_MODE_ADDR       (QLCNIC_CAM_RAM(0x24))
0614 #define QLCNIC_WOL_PORT_MODE        (QLCNIC_CAM_RAM(0x198))
0615 
0616 #define QLCNIC_WOL_CONFIG_NV        (QLCNIC_CAM_RAM(0x184))
0617 #define QLCNIC_WOL_CONFIG       (QLCNIC_CAM_RAM(0x188))
0618 
0619 #define QLCNIC_PEG_TUNE_MN_PRESENT  0x1
0620 #define QLCNIC_PEG_TUNE_CAPABILITY  (QLCNIC_CAM_RAM(0x02c))
0621 
0622 #define QLCNIC_DMA_WATCHDOG_CTRL    (QLCNIC_CAM_RAM(0x14))
0623 #define QLCNIC_ROM_DEV_INIT_TIMEOUT (0x3e885c)
0624 #define QLCNIC_ROM_DRV_RESET_TIMEOUT    (0x3e8860)
0625 
0626 /* Device State */
0627 #define QLCNIC_DEV_COLD         0x1
0628 #define QLCNIC_DEV_INITIALIZING     0x2
0629 #define QLCNIC_DEV_READY        0x3
0630 #define QLCNIC_DEV_NEED_RESET       0x4
0631 #define QLCNIC_DEV_NEED_QUISCENT    0x5
0632 #define QLCNIC_DEV_FAILED       0x6
0633 #define QLCNIC_DEV_QUISCENT     0x7
0634 
0635 #define QLCNIC_DEV_BADBAD       0xbad0bad0
0636 
0637 #define QLCNIC_DEV_NPAR_NON_OPER    0 /* NON Operational */
0638 #define QLCNIC_DEV_NPAR_OPER        1 /* NPAR Operational */
0639 #define QLCNIC_DEV_NPAR_OPER_TIMEO  30 /* Operational time out */
0640 
0641 #define QLC_DEV_SET_REF_CNT(VAL, FN)        ((VAL) |= (1 << (FN * 4)))
0642 #define QLC_DEV_CLR_REF_CNT(VAL, FN)        ((VAL) &= ~(1 << (FN * 4)))
0643 #define QLC_DEV_SET_RST_RDY(VAL, FN)        ((VAL) |= (1 << (FN * 4)))
0644 #define QLC_DEV_SET_QSCNT_RDY(VAL, FN)      ((VAL) |= (2 << (FN * 4)))
0645 #define QLC_DEV_CLR_RST_QSCNT(VAL, FN)      ((VAL) &= ~(3 << (FN * 4)))
0646 
0647 #define QLC_DEV_GET_DRV(VAL, FN)        (0xf & ((VAL) >> (FN * 4)))
0648 #define QLC_DEV_SET_DRV(VAL, FN)        ((VAL) << (FN * 4))
0649 
0650 #define QLCNIC_TYPE_NIC     1
0651 #define QLCNIC_TYPE_FCOE        2
0652 #define QLCNIC_TYPE_ISCSI       3
0653 
0654 #define QLCNIC_RCODE_DRIVER_INFO        0x20000000
0655 #define QLCNIC_RCODE_DRIVER_CAN_RELOAD      BIT_30
0656 #define QLCNIC_RCODE_FATAL_ERROR        BIT_31
0657 #define QLCNIC_FWERROR_PEGNUM(code)     ((code) & 0xff)
0658 #define QLCNIC_FWERROR_CODE(code)       ((code >> 8) & 0x1fffff)
0659 #define QLCNIC_FWERROR_FAN_FAILURE      0x16
0660 
0661 #define FW_POLL_DELAY       (1 * HZ)
0662 #define FW_FAIL_THRESH      2
0663 
0664 #define QLCNIC_RESET_TIMEOUT_SECS   10
0665 #define QLCNIC_INIT_TIMEOUT_SECS    30
0666 #define QLCNIC_RCVPEG_CHECK_RETRY_COUNT 2000
0667 #define QLCNIC_RCVPEG_CHECK_DELAY   10
0668 #define QLCNIC_CMDPEG_CHECK_RETRY_COUNT 60
0669 #define QLCNIC_CMDPEG_CHECK_DELAY   500
0670 #define QLCNIC_HEARTBEAT_PERIOD_MSECS   200
0671 #define QLCNIC_HEARTBEAT_CHECK_RETRY_COUNT  10
0672 
0673 #define QLCNIC_MAX_MC_COUNT     38
0674 #define QLCNIC_MAX_UC_COUNT     512
0675 #define QLCNIC_WATCHDOG_TIMEOUTVALUE    5
0676 
0677 #define ISR_MSI_INT_TRIGGER(FUNC) (QLCNIC_PCIX_PS_REG(PCIX_MSI_F(FUNC)))
0678 #define ISR_LEGACY_INT_TRIGGERED(VAL)   (((VAL) & 0x300) == 0x200)
0679 
0680 /*
0681  * PCI Interrupt Vector Values.
0682  */
0683 #define PCIX_INT_VECTOR_BIT_F0  0x0080
0684 #define PCIX_INT_VECTOR_BIT_F1  0x0100
0685 #define PCIX_INT_VECTOR_BIT_F2  0x0200
0686 #define PCIX_INT_VECTOR_BIT_F3  0x0400
0687 #define PCIX_INT_VECTOR_BIT_F4  0x0800
0688 #define PCIX_INT_VECTOR_BIT_F5  0x1000
0689 #define PCIX_INT_VECTOR_BIT_F6  0x2000
0690 #define PCIX_INT_VECTOR_BIT_F7  0x4000
0691 
0692 struct qlcnic_legacy_intr_set {
0693     u32 int_vec_bit;
0694     u32 tgt_status_reg;
0695     u32 tgt_mask_reg;
0696     u32 pci_int_reg;
0697 };
0698 
0699 #define QLCNIC_MSIX_BASE    0x132110
0700 #define QLCNIC_MAX_VLAN_FILTERS 64
0701 
0702 #define FLASH_ROM_WINDOW    0x42110030
0703 #define FLASH_ROM_DATA      0x42150000
0704 
0705 #define QLCNIC_FW_DUMP_REG1 0x00130060
0706 #define QLCNIC_FW_DUMP_REG2 0x001e0000
0707 #define QLCNIC_FLASH_SEM2_LK    0x0013C010
0708 #define QLCNIC_FLASH_SEM2_ULK   0x0013C014
0709 #define QLCNIC_FLASH_LOCK_ID    0x001B2100
0710 
0711 /* PCI function operational mode */
0712 enum {
0713     QLCNIC_MGMT_FUNC    = 0,
0714     QLCNIC_PRIV_FUNC    = 1,
0715     QLCNIC_NON_PRIV_FUNC    = 2,
0716     QLCNIC_SRIOV_PF_FUNC    = 3,
0717     QLCNIC_SRIOV_VF_FUNC    = 4,
0718     QLCNIC_UNKNOWN_FUNC_MODE = 5
0719 };
0720 
0721 enum {
0722     QLCNIC_PORT_DEFAULTS    = 0,
0723     QLCNIC_ADD_VLAN = 1,
0724     QLCNIC_DEL_VLAN = 2
0725 };
0726 
0727 #define QLC_DEV_DRV_DEFAULT 0x11111111
0728 
0729 #define LSB(x)  ((uint8_t)(x))
0730 #define MSB(x)  ((uint8_t)((uint16_t)(x) >> 8))
0731 
0732 #define LSW(x)  ((uint16_t)((uint32_t)(x)))
0733 #define MSW(x)  ((uint16_t)((uint32_t)(x) >> 16))
0734 
0735 #define LSD(x)  ((uint32_t)((uint64_t)(x)))
0736 #define MSD(x)  ((uint32_t)((((uint64_t)(x)) >> 16) >> 16))
0737 
0738 #define QLCNIC_MS_CTRL          0x41000090
0739 #define QLCNIC_MS_ADDR_LO       0x41000094
0740 #define QLCNIC_MS_ADDR_HI       0x41000098
0741 #define QLCNIC_MS_WRTDATA_LO        0x410000A0
0742 #define QLCNIC_MS_WRTDATA_HI        0x410000A4
0743 #define QLCNIC_MS_WRTDATA_ULO       0x410000B0
0744 #define QLCNIC_MS_WRTDATA_UHI       0x410000B4
0745 #define QLCNIC_MS_RDDATA_LO     0x410000A8
0746 #define QLCNIC_MS_RDDATA_HI     0x410000AC
0747 #define QLCNIC_MS_RDDATA_ULO        0x410000B8
0748 #define QLCNIC_MS_RDDATA_UHI        0x410000BC
0749 
0750 #define QLCNIC_TA_WRITE_ENABLE  (TA_CTL_ENABLE | TA_CTL_WRITE)
0751 #define QLCNIC_TA_WRITE_START   (TA_CTL_START | TA_CTL_ENABLE | TA_CTL_WRITE)
0752 #define QLCNIC_TA_START_ENABLE  (TA_CTL_START | TA_CTL_ENABLE)
0753 
0754 #define QLCNIC_LEGACY_INTR_CONFIG                   \
0755 {                                   \
0756     {                               \
0757         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F0,     \
0758         .tgt_status_reg =   ISR_INT_TARGET_STATUS,      \
0759         .tgt_mask_reg   =   ISR_INT_TARGET_MASK, },     \
0760                                     \
0761     {                               \
0762         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F1,     \
0763         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F1,   \
0764         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F1, },  \
0765                                     \
0766     {                               \
0767         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F2,     \
0768         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F2,   \
0769         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F2, },  \
0770                                     \
0771     {                               \
0772         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F3,     \
0773         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F3,   \
0774         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F3, },  \
0775                                     \
0776     {                               \
0777         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F4,     \
0778         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F4,   \
0779         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F4, },  \
0780                                     \
0781     {                               \
0782         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F5,     \
0783         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F5,   \
0784         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F5, },  \
0785                                     \
0786     {                               \
0787         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F6,     \
0788         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F6,   \
0789         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F6, },  \
0790                                     \
0791     {                               \
0792         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F7,     \
0793         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F7,   \
0794         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F7, },  \
0795 }
0796 
0797 /* NIU REGS */
0798 
0799 #define _qlcnic_crb_get_bit(var, bit)  ((var >> bit) & 0x1)
0800 
0801 /*
0802  * NIU GB MAC Config Register 0 (applies to GB0, GB1, GB2, GB3)
0803  *
0804  *  Bit 0 : enable_tx => 1:enable frame xmit, 0:disable
0805  *  Bit 1 : tx_synced => R/O: xmit enable synched to xmit stream
0806  *  Bit 2 : enable_rx => 1:enable frame recv, 0:disable
0807  *  Bit 3 : rx_synced => R/O: recv enable synched to recv stream
0808  *  Bit 4 : tx_flowctl => 1:enable pause frame generation, 0:disable
0809  *  Bit 5 : rx_flowctl => 1:act on recv'd pause frames, 0:ignore
0810  *  Bit 8 : loopback => 1:loop MAC xmits to MAC recvs, 0:normal
0811  *  Bit 16: tx_reset_pb => 1:reset frame xmit protocol blk, 0:no-op
0812  *  Bit 17: rx_reset_pb => 1:reset frame recv protocol blk, 0:no-op
0813  *  Bit 18: tx_reset_mac => 1:reset data/ctl multiplexer blk, 0:no-op
0814  *  Bit 19: rx_reset_mac => 1:reset ctl frames & timers blk, 0:no-op
0815  *  Bit 31: soft_reset => 1:reset the MAC and the SERDES, 0:no-op
0816  */
0817 #define qlcnic_gb_rx_flowctl(config_word)   \
0818     ((config_word) |= 1 << 5)
0819 #define qlcnic_gb_get_rx_flowctl(config_word)   \
0820     _qlcnic_crb_get_bit((config_word), 5)
0821 #define qlcnic_gb_unset_rx_flowctl(config_word) \
0822     ((config_word) &= ~(1 << 5))
0823 
0824 /*
0825  * NIU GB Pause Ctl Register
0826  */
0827 
0828 #define qlcnic_gb_set_gb0_mask(config_word)    \
0829     ((config_word) |= 1 << 0)
0830 #define qlcnic_gb_set_gb1_mask(config_word)    \
0831     ((config_word) |= 1 << 2)
0832 #define qlcnic_gb_set_gb2_mask(config_word)    \
0833     ((config_word) |= 1 << 4)
0834 #define qlcnic_gb_set_gb3_mask(config_word)    \
0835     ((config_word) |= 1 << 6)
0836 
0837 #define qlcnic_gb_get_gb0_mask(config_word)    \
0838     _qlcnic_crb_get_bit((config_word), 0)
0839 #define qlcnic_gb_get_gb1_mask(config_word)    \
0840     _qlcnic_crb_get_bit((config_word), 2)
0841 #define qlcnic_gb_get_gb2_mask(config_word)    \
0842     _qlcnic_crb_get_bit((config_word), 4)
0843 #define qlcnic_gb_get_gb3_mask(config_word)    \
0844     _qlcnic_crb_get_bit((config_word), 6)
0845 
0846 #define qlcnic_gb_unset_gb0_mask(config_word)  \
0847     ((config_word) &= ~(1 << 0))
0848 #define qlcnic_gb_unset_gb1_mask(config_word)  \
0849     ((config_word) &= ~(1 << 2))
0850 #define qlcnic_gb_unset_gb2_mask(config_word)  \
0851     ((config_word) &= ~(1 << 4))
0852 #define qlcnic_gb_unset_gb3_mask(config_word)  \
0853     ((config_word) &= ~(1 << 6))
0854 
0855 /*
0856  * NIU XG Pause Ctl Register
0857  *
0858  *      Bit 0       : xg0_mask => 1:disable tx pause frames
0859  *      Bit 1       : xg0_request => 1:request single pause frame
0860  *      Bit 2       : xg0_on_off => 1:request is pause on, 0:off
0861  *      Bit 3       : xg1_mask => 1:disable tx pause frames
0862  *      Bit 4       : xg1_request => 1:request single pause frame
0863  *      Bit 5       : xg1_on_off => 1:request is pause on, 0:off
0864  */
0865 
0866 #define qlcnic_xg_set_xg0_mask(config_word)    \
0867     ((config_word) |= 1 << 0)
0868 #define qlcnic_xg_set_xg1_mask(config_word)    \
0869     ((config_word) |= 1 << 3)
0870 
0871 #define qlcnic_xg_get_xg0_mask(config_word)    \
0872     _qlcnic_crb_get_bit((config_word), 0)
0873 #define qlcnic_xg_get_xg1_mask(config_word)    \
0874     _qlcnic_crb_get_bit((config_word), 3)
0875 
0876 #define qlcnic_xg_unset_xg0_mask(config_word)  \
0877     ((config_word) &= ~(1 << 0))
0878 #define qlcnic_xg_unset_xg1_mask(config_word)  \
0879     ((config_word) &= ~(1 << 3))
0880 
0881 /*
0882  * NIU XG Pause Ctl Register
0883  *
0884  *      Bit 0       : xg0_mask => 1:disable tx pause frames
0885  *      Bit 1       : xg0_request => 1:request single pause frame
0886  *      Bit 2       : xg0_on_off => 1:request is pause on, 0:off
0887  *      Bit 3       : xg1_mask => 1:disable tx pause frames
0888  *      Bit 4       : xg1_request => 1:request single pause frame
0889  *      Bit 5       : xg1_on_off => 1:request is pause on, 0:off
0890  */
0891 
0892 /*
0893  * PHY-Specific MII control/status registers.
0894  */
0895 #define QLCNIC_NIU_GB_MII_MGMT_ADDR_AUTONEG     4
0896 #define QLCNIC_NIU_GB_MII_MGMT_ADDR_PHY_STATUS      17
0897 
0898 /*
0899  * PHY-Specific Status Register (reg 17).
0900  *
0901  * Bit 0      : jabber => 1:jabber detected, 0:not
0902  * Bit 1      : polarity => 1:polarity reversed, 0:normal
0903  * Bit 2      : recvpause => 1:receive pause enabled, 0:disabled
0904  * Bit 3      : xmitpause => 1:transmit pause enabled, 0:disabled
0905  * Bit 4      : energydetect => 1:sleep, 0:active
0906  * Bit 5      : downshift => 1:downshift, 0:no downshift
0907  * Bit 6      : crossover => 1:MDIX (crossover), 0:MDI (no crossover)
0908  * Bits 7-9   : cablelen => not valid in 10Mb/s mode
0909  *          0:<50m, 1:50-80m, 2:80-110m, 3:110-140m, 4:>140m
0910  * Bit 10     : link => 1:link up, 0:link down
0911  * Bit 11     : resolved => 1:speed and duplex resolved, 0:not yet
0912  * Bit 12     : pagercvd => 1:page received, 0:page not received
0913  * Bit 13     : duplex => 1:full duplex, 0:half duplex
0914  * Bits 14-15 : speed => 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd
0915  */
0916 
0917 #define qlcnic_get_phy_speed(config_word) (((config_word) >> 14) & 0x03)
0918 
0919 #define qlcnic_set_phy_speed(config_word, val)  \
0920         ((config_word) |= ((val & 0x03) << 14))
0921 #define qlcnic_set_phy_duplex(config_word)  \
0922         ((config_word) |= 1 << 13)
0923 #define qlcnic_clear_phy_duplex(config_word)    \
0924         ((config_word) &= ~(1 << 13))
0925 
0926 #define qlcnic_get_phy_link(config_word)    \
0927         _qlcnic_crb_get_bit(config_word, 10)
0928 #define qlcnic_get_phy_duplex(config_word)  \
0929         _qlcnic_crb_get_bit(config_word, 13)
0930 
0931 #define QLCNIC_NIU_NON_PROMISC_MODE 0
0932 #define QLCNIC_NIU_PROMISC_MODE     1
0933 #define QLCNIC_NIU_ALLMULTI_MODE    2
0934 
0935 #define QLCNIC_PCIE_SEM_TIMEOUT 10000
0936 
0937 struct crb_128M_2M_sub_block_map {
0938     unsigned valid;
0939     unsigned start_128M;
0940     unsigned end_128M;
0941     unsigned start_2M;
0942 };
0943 
0944 struct crb_128M_2M_block_map{
0945     struct crb_128M_2M_sub_block_map sub_block[16];
0946 };
0947 #endif              /* __QLCNIC_HDR_H_ */