Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * QLogic Fibre Channel HBA Driver
0004  * Copyright (c)  2003-2014 QLogic Corporation
0005  */
0006 #ifndef __QLA_NX_H
0007 #define __QLA_NX_H
0008 
0009 #include <scsi/scsi.h>
0010 
0011 /*
0012  * Following are the states of the Phantom. Phantom will set them and
0013  * Host will read to check if the fields are correct.
0014 */
0015 #define PHAN_INITIALIZE_FAILED        0xffff
0016 #define PHAN_INITIALIZE_COMPLETE      0xff01
0017 
0018 /* Host writes the following to notify that it has done the init-handshake */
0019 #define PHAN_INITIALIZE_ACK       0xf00f
0020 #define PHAN_PEG_RCV_INITIALIZED      0xff01
0021 
0022 /*CRB_RELATED*/
0023 #define QLA82XX_CRB_BASE    QLA82XX_CAM_RAM(0x200)
0024 #define QLA82XX_REG(X)      (QLA82XX_CRB_BASE+(X))
0025 
0026 #define CRB_CMDPEG_STATE        QLA82XX_REG(0x50)
0027 #define CRB_RCVPEG_STATE        QLA82XX_REG(0x13c)
0028 #define BOOT_LOADER_DIMM_STATUS     QLA82XX_REG(0x54)
0029 #define CRB_DMA_SHIFT           QLA82XX_REG(0xcc)
0030 #define CRB_TEMP_STATE          QLA82XX_REG(0x1b4)
0031 #define QLA82XX_DMA_SHIFT_VALUE     0x55555555
0032 
0033 #define QLA82XX_HW_H0_CH_HUB_ADR    0x05
0034 #define QLA82XX_HW_H1_CH_HUB_ADR    0x0E
0035 #define QLA82XX_HW_H2_CH_HUB_ADR    0x03
0036 #define QLA82XX_HW_H3_CH_HUB_ADR    0x01
0037 #define QLA82XX_HW_H4_CH_HUB_ADR    0x06
0038 #define QLA82XX_HW_H5_CH_HUB_ADR    0x07
0039 #define QLA82XX_HW_H6_CH_HUB_ADR    0x08
0040 
0041 /*  Hub 0 */
0042 #define QLA82XX_HW_MN_CRB_AGT_ADR   0x15
0043 #define QLA82XX_HW_MS_CRB_AGT_ADR   0x25
0044 
0045 /*  Hub 1 */
0046 #define QLA82XX_HW_PS_CRB_AGT_ADR   0x73
0047 #define QLA82XX_HW_QMS_CRB_AGT_ADR  0x00
0048 #define QLA82XX_HW_RPMX3_CRB_AGT_ADR    0x0b
0049 #define QLA82XX_HW_SQGS0_CRB_AGT_ADR    0x01
0050 #define QLA82XX_HW_SQGS1_CRB_AGT_ADR    0x02
0051 #define QLA82XX_HW_SQGS2_CRB_AGT_ADR    0x03
0052 #define QLA82XX_HW_SQGS3_CRB_AGT_ADR    0x04
0053 #define QLA82XX_HW_C2C0_CRB_AGT_ADR 0x58
0054 #define QLA82XX_HW_C2C1_CRB_AGT_ADR 0x59
0055 #define QLA82XX_HW_C2C2_CRB_AGT_ADR 0x5a
0056 #define QLA82XX_HW_RPMX2_CRB_AGT_ADR    0x0a
0057 #define QLA82XX_HW_RPMX4_CRB_AGT_ADR    0x0c
0058 #define QLA82XX_HW_RPMX7_CRB_AGT_ADR    0x0f
0059 #define QLA82XX_HW_RPMX9_CRB_AGT_ADR    0x12
0060 #define QLA82XX_HW_SMB_CRB_AGT_ADR  0x18
0061 
0062 /*  Hub 2 */
0063 #define QLA82XX_HW_NIU_CRB_AGT_ADR  0x31
0064 #define QLA82XX_HW_I2C0_CRB_AGT_ADR 0x19
0065 #define QLA82XX_HW_I2C1_CRB_AGT_ADR 0x29
0066 
0067 #define QLA82XX_HW_SN_CRB_AGT_ADR   0x10
0068 #define QLA82XX_HW_I2Q_CRB_AGT_ADR  0x20
0069 #define QLA82XX_HW_LPC_CRB_AGT_ADR  0x22
0070 #define QLA82XX_HW_ROMUSB_CRB_AGT_ADR   0x21
0071 #define QLA82XX_HW_QM_CRB_AGT_ADR   0x66
0072 #define QLA82XX_HW_SQG0_CRB_AGT_ADR 0x60
0073 #define QLA82XX_HW_SQG1_CRB_AGT_ADR 0x61
0074 #define QLA82XX_HW_SQG2_CRB_AGT_ADR 0x62
0075 #define QLA82XX_HW_SQG3_CRB_AGT_ADR 0x63
0076 #define QLA82XX_HW_RPMX1_CRB_AGT_ADR    0x09
0077 #define QLA82XX_HW_RPMX5_CRB_AGT_ADR    0x0d
0078 #define QLA82XX_HW_RPMX6_CRB_AGT_ADR    0x0e
0079 #define QLA82XX_HW_RPMX8_CRB_AGT_ADR    0x11
0080 
0081 /*  Hub 3 */
0082 #define QLA82XX_HW_PH_CRB_AGT_ADR   0x1A
0083 #define QLA82XX_HW_SRE_CRB_AGT_ADR  0x50
0084 #define QLA82XX_HW_EG_CRB_AGT_ADR   0x51
0085 #define QLA82XX_HW_RPMX0_CRB_AGT_ADR    0x08
0086 
0087 /*  Hub 4 */
0088 #define QLA82XX_HW_PEGN0_CRB_AGT_ADR    0x40
0089 #define QLA82XX_HW_PEGN1_CRB_AGT_ADR    0x41
0090 #define QLA82XX_HW_PEGN2_CRB_AGT_ADR    0x42
0091 #define QLA82XX_HW_PEGN3_CRB_AGT_ADR    0x43
0092 #define QLA82XX_HW_PEGNI_CRB_AGT_ADR    0x44
0093 #define QLA82XX_HW_PEGND_CRB_AGT_ADR    0x45
0094 #define QLA82XX_HW_PEGNC_CRB_AGT_ADR    0x46
0095 #define QLA82XX_HW_PEGR0_CRB_AGT_ADR    0x47
0096 #define QLA82XX_HW_PEGR1_CRB_AGT_ADR    0x48
0097 #define QLA82XX_HW_PEGR2_CRB_AGT_ADR    0x49
0098 #define QLA82XX_HW_PEGR3_CRB_AGT_ADR    0x4a
0099 #define QLA82XX_HW_PEGN4_CRB_AGT_ADR    0x4b
0100 
0101 /*  Hub 5 */
0102 #define QLA82XX_HW_PEGS0_CRB_AGT_ADR    0x40
0103 #define QLA82XX_HW_PEGS1_CRB_AGT_ADR    0x41
0104 #define QLA82XX_HW_PEGS2_CRB_AGT_ADR    0x42
0105 #define QLA82XX_HW_PEGS3_CRB_AGT_ADR    0x43
0106 #define QLA82XX_HW_PEGSI_CRB_AGT_ADR    0x44
0107 #define QLA82XX_HW_PEGSD_CRB_AGT_ADR    0x45
0108 #define QLA82XX_HW_PEGSC_CRB_AGT_ADR    0x46
0109 
0110 /*  Hub 6 */
0111 #define QLA82XX_HW_CAS0_CRB_AGT_ADR 0x46
0112 #define QLA82XX_HW_CAS1_CRB_AGT_ADR 0x47
0113 #define QLA82XX_HW_CAS2_CRB_AGT_ADR 0x48
0114 #define QLA82XX_HW_CAS3_CRB_AGT_ADR 0x49
0115 #define QLA82XX_HW_NCM_CRB_AGT_ADR  0x16
0116 #define QLA82XX_HW_TMR_CRB_AGT_ADR  0x17
0117 #define QLA82XX_HW_XDMA_CRB_AGT_ADR 0x05
0118 #define QLA82XX_HW_OCM0_CRB_AGT_ADR 0x06
0119 #define QLA82XX_HW_OCM1_CRB_AGT_ADR 0x07
0120 
0121 /*  This field defines PCI/X adr [25:20] of agents on the CRB */
0122 /*  */
0123 #define QLA82XX_HW_PX_MAP_CRB_PH    0
0124 #define QLA82XX_HW_PX_MAP_CRB_PS    1
0125 #define QLA82XX_HW_PX_MAP_CRB_MN    2
0126 #define QLA82XX_HW_PX_MAP_CRB_MS    3
0127 #define QLA82XX_HW_PX_MAP_CRB_SRE   5
0128 #define QLA82XX_HW_PX_MAP_CRB_NIU   6
0129 #define QLA82XX_HW_PX_MAP_CRB_QMN   7
0130 #define QLA82XX_HW_PX_MAP_CRB_SQN0  8
0131 #define QLA82XX_HW_PX_MAP_CRB_SQN1  9
0132 #define QLA82XX_HW_PX_MAP_CRB_SQN2  10
0133 #define QLA82XX_HW_PX_MAP_CRB_SQN3  11
0134 #define QLA82XX_HW_PX_MAP_CRB_QMS   12
0135 #define QLA82XX_HW_PX_MAP_CRB_SQS0  13
0136 #define QLA82XX_HW_PX_MAP_CRB_SQS1  14
0137 #define QLA82XX_HW_PX_MAP_CRB_SQS2  15
0138 #define QLA82XX_HW_PX_MAP_CRB_SQS3  16
0139 #define QLA82XX_HW_PX_MAP_CRB_PGN0  17
0140 #define QLA82XX_HW_PX_MAP_CRB_PGN1  18
0141 #define QLA82XX_HW_PX_MAP_CRB_PGN2  19
0142 #define QLA82XX_HW_PX_MAP_CRB_PGN3  20
0143 #define QLA82XX_HW_PX_MAP_CRB_PGN4  QLA82XX_HW_PX_MAP_CRB_SQS2
0144 #define QLA82XX_HW_PX_MAP_CRB_PGND  21
0145 #define QLA82XX_HW_PX_MAP_CRB_PGNI  22
0146 #define QLA82XX_HW_PX_MAP_CRB_PGS0  23
0147 #define QLA82XX_HW_PX_MAP_CRB_PGS1  24
0148 #define QLA82XX_HW_PX_MAP_CRB_PGS2  25
0149 #define QLA82XX_HW_PX_MAP_CRB_PGS3  26
0150 #define QLA82XX_HW_PX_MAP_CRB_PGSD  27
0151 #define QLA82XX_HW_PX_MAP_CRB_PGSI  28
0152 #define QLA82XX_HW_PX_MAP_CRB_SN    29
0153 #define QLA82XX_HW_PX_MAP_CRB_EG    31
0154 #define QLA82XX_HW_PX_MAP_CRB_PH2   32
0155 #define QLA82XX_HW_PX_MAP_CRB_PS2   33
0156 #define QLA82XX_HW_PX_MAP_CRB_CAM   34
0157 #define QLA82XX_HW_PX_MAP_CRB_CAS0  35
0158 #define QLA82XX_HW_PX_MAP_CRB_CAS1  36
0159 #define QLA82XX_HW_PX_MAP_CRB_CAS2  37
0160 #define QLA82XX_HW_PX_MAP_CRB_C2C0  38
0161 #define QLA82XX_HW_PX_MAP_CRB_C2C1  39
0162 #define QLA82XX_HW_PX_MAP_CRB_TIMR  40
0163 #define QLA82XX_HW_PX_MAP_CRB_RPMX1 42
0164 #define QLA82XX_HW_PX_MAP_CRB_RPMX2 43
0165 #define QLA82XX_HW_PX_MAP_CRB_RPMX3 44
0166 #define QLA82XX_HW_PX_MAP_CRB_RPMX4 45
0167 #define QLA82XX_HW_PX_MAP_CRB_RPMX5 46
0168 #define QLA82XX_HW_PX_MAP_CRB_RPMX6 47
0169 #define QLA82XX_HW_PX_MAP_CRB_RPMX7 48
0170 #define QLA82XX_HW_PX_MAP_CRB_XDMA  49
0171 #define QLA82XX_HW_PX_MAP_CRB_I2Q   50
0172 #define QLA82XX_HW_PX_MAP_CRB_ROMUSB    51
0173 #define QLA82XX_HW_PX_MAP_CRB_CAS3  52
0174 #define QLA82XX_HW_PX_MAP_CRB_RPMX0 53
0175 #define QLA82XX_HW_PX_MAP_CRB_RPMX8 54
0176 #define QLA82XX_HW_PX_MAP_CRB_RPMX9 55
0177 #define QLA82XX_HW_PX_MAP_CRB_OCM0  56
0178 #define QLA82XX_HW_PX_MAP_CRB_OCM1  57
0179 #define QLA82XX_HW_PX_MAP_CRB_SMB   58
0180 #define QLA82XX_HW_PX_MAP_CRB_I2C0  59
0181 #define QLA82XX_HW_PX_MAP_CRB_I2C1  60
0182 #define QLA82XX_HW_PX_MAP_CRB_LPC   61
0183 #define QLA82XX_HW_PX_MAP_CRB_PGNC  62
0184 #define QLA82XX_HW_PX_MAP_CRB_PGR0  63
0185 #define QLA82XX_HW_PX_MAP_CRB_PGR1  4
0186 #define QLA82XX_HW_PX_MAP_CRB_PGR2  30
0187 #define QLA82XX_HW_PX_MAP_CRB_PGR3  41
0188 
0189 /*  This field defines CRB adr [31:20] of the agents */
0190 /*  */
0191 
0192 #define QLA82XX_HW_CRB_HUB_AGT_ADR_MN       ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
0193     QLA82XX_HW_MN_CRB_AGT_ADR)
0194 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PH       ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
0195     QLA82XX_HW_PH_CRB_AGT_ADR)
0196 #define QLA82XX_HW_CRB_HUB_AGT_ADR_MS       ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
0197     QLA82XX_HW_MS_CRB_AGT_ADR)
0198 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PS       ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0199     QLA82XX_HW_PS_CRB_AGT_ADR)
0200 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SS       ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0201     QLA82XX_HW_SS_CRB_AGT_ADR)
0202 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX3    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0203     QLA82XX_HW_RPMX3_CRB_AGT_ADR)
0204 #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMS      ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0205     QLA82XX_HW_QMS_CRB_AGT_ADR)
0206 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS0     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0207     QLA82XX_HW_SQGS0_CRB_AGT_ADR)
0208 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS1     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0209     QLA82XX_HW_SQGS1_CRB_AGT_ADR)
0210 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS2     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0211     QLA82XX_HW_SQGS2_CRB_AGT_ADR)
0212 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS3     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0213     QLA82XX_HW_SQGS3_CRB_AGT_ADR)
0214 #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C0     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0215     QLA82XX_HW_C2C0_CRB_AGT_ADR)
0216 #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C1     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0217     QLA82XX_HW_C2C1_CRB_AGT_ADR)
0218 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX2    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0219     QLA82XX_HW_RPMX2_CRB_AGT_ADR)
0220 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX4    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0221     QLA82XX_HW_RPMX4_CRB_AGT_ADR)
0222 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX7    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0223     QLA82XX_HW_RPMX7_CRB_AGT_ADR)
0224 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX9    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0225     QLA82XX_HW_RPMX9_CRB_AGT_ADR)
0226 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SMB      ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
0227     QLA82XX_HW_SMB_CRB_AGT_ADR)
0228 #define QLA82XX_HW_CRB_HUB_AGT_ADR_NIU      ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
0229     QLA82XX_HW_NIU_CRB_AGT_ADR)
0230 #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C0     ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
0231     QLA82XX_HW_I2C0_CRB_AGT_ADR)
0232 #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C1     ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
0233     QLA82XX_HW_I2C1_CRB_AGT_ADR)
0234 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SRE      ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0235     QLA82XX_HW_SRE_CRB_AGT_ADR)
0236 #define QLA82XX_HW_CRB_HUB_AGT_ADR_EG       ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0237     QLA82XX_HW_EG_CRB_AGT_ADR)
0238 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX0    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0239     QLA82XX_HW_RPMX0_CRB_AGT_ADR)
0240 #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMN      ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0241     QLA82XX_HW_QM_CRB_AGT_ADR)
0242 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN0     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0243     QLA82XX_HW_SQG0_CRB_AGT_ADR)
0244 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN1     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0245     QLA82XX_HW_SQG1_CRB_AGT_ADR)
0246 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN2     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0247     QLA82XX_HW_SQG2_CRB_AGT_ADR)
0248 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN3     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0249     QLA82XX_HW_SQG3_CRB_AGT_ADR)
0250 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX1    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0251     QLA82XX_HW_RPMX1_CRB_AGT_ADR)
0252 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX5    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0253     QLA82XX_HW_RPMX5_CRB_AGT_ADR)
0254 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX6    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0255     QLA82XX_HW_RPMX6_CRB_AGT_ADR)
0256 #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX8    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0257     QLA82XX_HW_RPMX8_CRB_AGT_ADR)
0258 #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS0     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0259     QLA82XX_HW_CAS0_CRB_AGT_ADR)
0260 #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS1     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0261     QLA82XX_HW_CAS1_CRB_AGT_ADR)
0262 #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS2     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0263     QLA82XX_HW_CAS2_CRB_AGT_ADR)
0264 #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS3     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
0265     QLA82XX_HW_CAS3_CRB_AGT_ADR)
0266 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNI     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0267     QLA82XX_HW_PEGNI_CRB_AGT_ADR)
0268 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGND     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0269     QLA82XX_HW_PEGND_CRB_AGT_ADR)
0270 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN0     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0271     QLA82XX_HW_PEGN0_CRB_AGT_ADR)
0272 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN1     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0273     QLA82XX_HW_PEGN1_CRB_AGT_ADR)
0274 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN2     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0275     QLA82XX_HW_PEGN2_CRB_AGT_ADR)
0276 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN3     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0277     QLA82XX_HW_PEGN3_CRB_AGT_ADR)
0278 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN4    ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0279     QLA82XX_HW_PEGN4_CRB_AGT_ADR)
0280 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNC     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0281     QLA82XX_HW_PEGNC_CRB_AGT_ADR)
0282 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR0     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0283     QLA82XX_HW_PEGR0_CRB_AGT_ADR)
0284 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR1     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0285     QLA82XX_HW_PEGR1_CRB_AGT_ADR)
0286 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR2     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0287     QLA82XX_HW_PEGR2_CRB_AGT_ADR)
0288 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR3     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
0289     QLA82XX_HW_PEGR3_CRB_AGT_ADR)
0290 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSI     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0291     QLA82XX_HW_PEGSI_CRB_AGT_ADR)
0292 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSD     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0293     QLA82XX_HW_PEGSD_CRB_AGT_ADR)
0294 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS0     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0295     QLA82XX_HW_PEGS0_CRB_AGT_ADR)
0296 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS1     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0297     QLA82XX_HW_PEGS1_CRB_AGT_ADR)
0298 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS2     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0299     QLA82XX_HW_PEGS2_CRB_AGT_ADR)
0300 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS3     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0301     QLA82XX_HW_PEGS3_CRB_AGT_ADR)
0302 #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSC     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
0303     QLA82XX_HW_PEGSC_CRB_AGT_ADR)
0304 #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAM      ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0305     QLA82XX_HW_NCM_CRB_AGT_ADR)
0306 #define QLA82XX_HW_CRB_HUB_AGT_ADR_TIMR     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0307     QLA82XX_HW_TMR_CRB_AGT_ADR)
0308 #define QLA82XX_HW_CRB_HUB_AGT_ADR_XDMA     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0309     QLA82XX_HW_XDMA_CRB_AGT_ADR)
0310 #define QLA82XX_HW_CRB_HUB_AGT_ADR_SN       ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0311     QLA82XX_HW_SN_CRB_AGT_ADR)
0312 #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2Q      ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0313     QLA82XX_HW_I2Q_CRB_AGT_ADR)
0314 #define QLA82XX_HW_CRB_HUB_AGT_ADR_ROMUSB   ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0315     QLA82XX_HW_ROMUSB_CRB_AGT_ADR)
0316 #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM0     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0317     QLA82XX_HW_OCM0_CRB_AGT_ADR)
0318 #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM1     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0319     QLA82XX_HW_OCM1_CRB_AGT_ADR)
0320 #define QLA82XX_HW_CRB_HUB_AGT_ADR_LPC      ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
0321     QLA82XX_HW_LPC_CRB_AGT_ADR)
0322 
0323 #define ROMUSB_GLB              (QLA82XX_CRB_ROMUSB + 0x00000)
0324 #define QLA82XX_ROMUSB_GLB_PEGTUNE_DONE     (ROMUSB_GLB + 0x005c)
0325 #define QLA82XX_ROMUSB_GLB_STATUS       (ROMUSB_GLB + 0x0004)
0326 #define QLA82XX_ROMUSB_GLB_SW_RESET     (ROMUSB_GLB + 0x0008)
0327 #define QLA82XX_ROMUSB_ROM_ADDRESS      (ROMUSB_ROM + 0x0008)
0328 #define QLA82XX_ROMUSB_ROM_WDATA        (ROMUSB_ROM + 0x000c)
0329 #define QLA82XX_ROMUSB_ROM_ABYTE_CNT        (ROMUSB_ROM + 0x0010)
0330 #define QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT   (ROMUSB_ROM + 0x0014)
0331 #define QLA82XX_ROMUSB_ROM_RDATA        (ROMUSB_ROM + 0x0018)
0332 
0333 #define ROMUSB_ROM              (QLA82XX_CRB_ROMUSB + 0x10000)
0334 #define QLA82XX_ROMUSB_ROM_INSTR_OPCODE     (ROMUSB_ROM + 0x0004)
0335 #define QLA82XX_ROMUSB_GLB_CAS_RST      (ROMUSB_GLB + 0x0038)
0336 
0337 #define QLA82XX_PCI_CRB_WINDOWSIZE 0x00100000    /* all are 1MB windows */
0338 #define QLA82XX_PCI_CRB_WINDOW(A) \
0339     (QLA82XX_PCI_CRBSPACE + (A)*QLA82XX_PCI_CRB_WINDOWSIZE)
0340 #define QLA82XX_CRB_C2C_0 \
0341     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C0)
0342 #define QLA82XX_CRB_C2C_1 \
0343     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C1)
0344 #define QLA82XX_CRB_C2C_2 \
0345     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C2)
0346 #define QLA82XX_CRB_CAM \
0347     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAM)
0348 #define QLA82XX_CRB_CASPER \
0349     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS)
0350 #define QLA82XX_CRB_CASPER_0 \
0351     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS0)
0352 #define QLA82XX_CRB_CASPER_1 \
0353     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS1)
0354 #define QLA82XX_CRB_CASPER_2 \
0355     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS2)
0356 #define QLA82XX_CRB_DDR_MD \
0357     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MS)
0358 #define QLA82XX_CRB_DDR_NET \
0359     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MN)
0360 #define QLA82XX_CRB_EPG \
0361     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_EG)
0362 #define QLA82XX_CRB_I2Q \
0363     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2Q)
0364 #define QLA82XX_CRB_NIU \
0365     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_NIU)
0366 
0367 #define QLA82XX_CRB_PCIX_HOST \
0368     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH)
0369 #define QLA82XX_CRB_PCIX_HOST2 \
0370     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH2)
0371 #define QLA82XX_CRB_PCIX_MD \
0372     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS)
0373 #define QLA82XX_CRB_PCIE \
0374     QLA82XX_CRB_PCIX_MD
0375 
0376 /* window 1 pcie slot */
0377 #define QLA82XX_CRB_PCIE2    \
0378     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS2)
0379 #define QLA82XX_CRB_PEG_MD_0 \
0380     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS0)
0381 #define QLA82XX_CRB_PEG_MD_1 \
0382     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS1)
0383 #define QLA82XX_CRB_PEG_MD_2 \
0384     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS2)
0385 #define QLA82XX_CRB_PEG_MD_3 \
0386     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3)
0387 #define QLA82XX_CRB_PEG_MD_3 \
0388     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3)
0389 #define QLA82XX_CRB_PEG_MD_D \
0390     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSD)
0391 #define QLA82XX_CRB_PEG_MD_I \
0392     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSI)
0393 #define QLA82XX_CRB_PEG_NET_0 \
0394     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN0)
0395 #define QLA82XX_CRB_PEG_NET_1 \
0396     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN1)
0397 #define QLA82XX_CRB_PEG_NET_2 \
0398     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN2)
0399 #define QLA82XX_CRB_PEG_NET_3 \
0400     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN3)
0401 #define QLA82XX_CRB_PEG_NET_4 \
0402     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN4)
0403 #define QLA82XX_CRB_PEG_NET_D \
0404     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGND)
0405 #define QLA82XX_CRB_PEG_NET_I \
0406     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGNI)
0407 #define QLA82XX_CRB_PQM_MD \
0408     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMS)
0409 #define QLA82XX_CRB_PQM_NET \
0410     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMN)
0411 #define QLA82XX_CRB_QDR_MD \
0412     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SS)
0413 #define QLA82XX_CRB_QDR_NET \
0414     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SN)
0415 #define QLA82XX_CRB_ROMUSB \
0416     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_ROMUSB)
0417 #define QLA82XX_CRB_RPMX_0 \
0418     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX0)
0419 #define QLA82XX_CRB_RPMX_1 \
0420     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX1)
0421 #define QLA82XX_CRB_RPMX_2 \
0422     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX2)
0423 #define QLA82XX_CRB_RPMX_3 \
0424     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX3)
0425 #define QLA82XX_CRB_RPMX_4 \
0426     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX4)
0427 #define QLA82XX_CRB_RPMX_5 \
0428     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX5)
0429 #define QLA82XX_CRB_RPMX_6 \
0430     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX6)
0431 #define QLA82XX_CRB_RPMX_7 \
0432     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX7)
0433 #define QLA82XX_CRB_SQM_MD_0 \
0434     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS0)
0435 #define QLA82XX_CRB_SQM_MD_1 \
0436     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS1)
0437 #define QLA82XX_CRB_SQM_MD_2 \
0438     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS2)
0439 #define QLA82XX_CRB_SQM_MD_3 \
0440     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS3)
0441 #define QLA82XX_CRB_SQM_NET_0 \
0442     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN0)
0443 #define QLA82XX_CRB_SQM_NET_1 \
0444     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN1)
0445 #define QLA82XX_CRB_SQM_NET_2 \
0446     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN2)
0447 #define QLA82XX_CRB_SQM_NET_3 \
0448     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN3)
0449 #define QLA82XX_CRB_SRE \
0450     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SRE)
0451 #define QLA82XX_CRB_TIMER \
0452     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_TIMR)
0453 #define QLA82XX_CRB_XDMA \
0454     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_XDMA)
0455 #define QLA82XX_CRB_I2C0 \
0456     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C0)
0457 #define QLA82XX_CRB_I2C1 \
0458     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C1)
0459 #define QLA82XX_CRB_OCM0 \
0460     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_OCM0)
0461 #define QLA82XX_CRB_SMB \
0462     QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SMB)
0463 #define QLA82XX_CRB_MAX \
0464     QLA82XX_PCI_CRB_WINDOW(64)
0465 
0466 /*
0467  * ====================== BASE ADDRESSES ON-CHIP ======================
0468  * Base addresses of major components on-chip.
0469  * ====================== BASE ADDRESSES ON-CHIP ======================
0470  */
0471 #define QLA82XX_ADDR_DDR_NET        (0x0000000000000000ULL)
0472 #define QLA82XX_ADDR_DDR_NET_MAX    (0x000000000fffffffULL)
0473 
0474 /* Imbus address bit used to indicate a host address. This bit is
0475  * eliminated by the pcie bar and bar select before presentation
0476  * over pcie. */
0477 /* host memory via IMBUS */
0478 #define QLA82XX_P2_ADDR_PCIE        (0x0000000800000000ULL)
0479 #define QLA82XX_P3_ADDR_PCIE        (0x0000008000000000ULL)
0480 #define QLA82XX_ADDR_PCIE_MAX       (0x0000000FFFFFFFFFULL)
0481 #define QLA82XX_ADDR_OCM0       (0x0000000200000000ULL)
0482 #define QLA82XX_ADDR_OCM0_MAX       (0x00000002000fffffULL)
0483 #define QLA82XX_ADDR_OCM1       (0x0000000200400000ULL)
0484 #define QLA82XX_ADDR_OCM1_MAX       (0x00000002004fffffULL)
0485 #define QLA82XX_ADDR_QDR_NET        (0x0000000300000000ULL)
0486 #define QLA82XX_P3_ADDR_QDR_NET_MAX (0x0000000303ffffffULL)
0487 
0488 #define QLA82XX_PCI_CRBSPACE        0x06000000UL
0489 #define QLA82XX_PCI_DIRECT_CRB      0x04400000UL
0490 #define QLA82XX_PCI_CAMQM       0x04800000UL
0491 #define QLA82XX_PCI_CAMQM_MAX       0x04ffffffUL
0492 #define QLA82XX_PCI_DDR_NET     0x00000000UL
0493 #define QLA82XX_PCI_QDR_NET     0x04000000UL
0494 #define QLA82XX_PCI_QDR_NET_MAX     0x043fffffUL
0495 
0496 /*
0497  *   Register offsets for MN
0498  */
0499 #define MIU_CONTROL         (0x000)
0500 #define MIU_TAG             (0x004)
0501 #define MIU_TEST_AGT_CTRL       (0x090)
0502 #define MIU_TEST_AGT_ADDR_LO        (0x094)
0503 #define MIU_TEST_AGT_ADDR_HI        (0x098)
0504 #define MIU_TEST_AGT_WRDATA_LO      (0x0a0)
0505 #define MIU_TEST_AGT_WRDATA_HI      (0x0a4)
0506 #define MIU_TEST_AGT_WRDATA(i)      (0x0a0+(4*(i)))
0507 #define MIU_TEST_AGT_RDDATA_LO      (0x0a8)
0508 #define MIU_TEST_AGT_RDDATA_HI      (0x0ac)
0509 #define MIU_TEST_AGT_RDDATA(i)      (0x0a8+(4*(i)))
0510 #define MIU_TEST_AGT_ADDR_MASK      0xfffffff8
0511 #define MIU_TEST_AGT_UPPER_ADDR(off)    (0)
0512 
0513 /* MIU_TEST_AGT_CTRL flags. work for SIU as well */
0514 #define MIU_TA_CTL_START    1
0515 #define MIU_TA_CTL_ENABLE   2
0516 #define MIU_TA_CTL_WRITE    4
0517 #define MIU_TA_CTL_BUSY     8
0518 
0519 /*CAM RAM */
0520 # define QLA82XX_CAM_RAM_BASE       (QLA82XX_CRB_CAM + 0x02000)
0521 # define QLA82XX_CAM_RAM(reg)       (QLA82XX_CAM_RAM_BASE + (reg))
0522 
0523 #define QLA82XX_PORT_MODE_ADDR      (QLA82XX_CAM_RAM(0x24))
0524 #define QLA82XX_PEG_HALT_STATUS1    (QLA82XX_CAM_RAM(0xa8))
0525 #define QLA82XX_PEG_HALT_STATUS2    (QLA82XX_CAM_RAM(0xac))
0526 #define QLA82XX_PEG_ALIVE_COUNTER   (QLA82XX_CAM_RAM(0xb0))
0527 
0528 #define QLA82XX_CAMRAM_DB1      (QLA82XX_CAM_RAM(0x1b8))
0529 #define QLA82XX_CAMRAM_DB2      (QLA82XX_CAM_RAM(0x1bc))
0530 
0531 #define HALT_STATUS_UNRECOVERABLE   0x80000000
0532 #define HALT_STATUS_RECOVERABLE     0x40000000
0533 
0534 /* Driver Coexistence Defines */
0535 #define QLA82XX_CRB_DRV_ACTIVE       (QLA82XX_CAM_RAM(0x138))
0536 #define QLA82XX_CRB_DEV_STATE        (QLA82XX_CAM_RAM(0x140))
0537 #define QLA82XX_CRB_DRV_STATE        (QLA82XX_CAM_RAM(0x144))
0538 #define QLA82XX_CRB_DRV_SCRATCH      (QLA82XX_CAM_RAM(0x148))
0539 #define QLA82XX_CRB_DEV_PART_INFO    (QLA82XX_CAM_RAM(0x14c))
0540 #define QLA82XX_CRB_DRV_IDC_VERSION  (QLA82XX_CAM_RAM(0x174))
0541 
0542 /* Every driver should use these Device State */
0543 enum {
0544     QLA8XXX_DEV_UNKNOWN,
0545     QLA8XXX_DEV_COLD,
0546     QLA8XXX_DEV_INITIALIZING,
0547     QLA8XXX_DEV_READY,
0548     QLA8XXX_DEV_NEED_RESET,
0549     QLA8XXX_DEV_NEED_QUIESCENT,
0550     QLA8XXX_DEV_FAILED,
0551     QLA8XXX_DEV_QUIESCENT,
0552     MAX_STATES, /* Increment if new state added */
0553 };
0554 
0555 #define QLA8XXX_BAD_VALUE       0xbad0bad0
0556 
0557 #define QLA82XX_IDC_VERSION         1
0558 #define QLA82XX_ROM_DEV_INIT_TIMEOUT        30
0559 #define QLA82XX_ROM_DRV_RESET_ACK_TIMEOUT   10
0560 
0561 #define QLA82XX_ROM_LOCK_ID     (QLA82XX_CAM_RAM(0x100))
0562 #define QLA82XX_CRB_WIN_LOCK_ID     (QLA82XX_CAM_RAM(0x124))
0563 #define QLA82XX_FW_VERSION_MAJOR    (QLA82XX_CAM_RAM(0x150))
0564 #define QLA82XX_FW_VERSION_MINOR    (QLA82XX_CAM_RAM(0x154))
0565 #define QLA82XX_FW_VERSION_SUB      (QLA82XX_CAM_RAM(0x158))
0566 #define QLA82XX_PCIE_REG(reg)       (QLA82XX_CRB_PCIE + (reg))
0567 
0568 #define PCIE_SETUP_FUNCTION     (0x12040)
0569 #define PCIE_SETUP_FUNCTION2        (0x12048)
0570 
0571 #define QLA82XX_PCIX_PS_REG(reg)    (QLA82XX_CRB_PCIX_MD + (reg))
0572 #define QLA82XX_PCIX_PS2_REG(reg)   (QLA82XX_CRB_PCIE2 + (reg))
0573 
0574 #define PCIE_SEM2_LOCK       (0x1c010)  /* Flash lock   */
0575 #define PCIE_SEM2_UNLOCK     (0x1c014)  /* Flash unlock */
0576 #define PCIE_SEM5_LOCK       (0x1c028)  /* Coexistence lock   */
0577 #define PCIE_SEM5_UNLOCK     (0x1c02c)  /* Coexistence unlock */
0578 #define PCIE_SEM7_LOCK       (0x1c038)  /* crb win lock */
0579 #define PCIE_SEM7_UNLOCK     (0x1c03c)  /* crbwin unlock*/
0580 
0581 /* Different drive state */
0582 #define QLA82XX_DRVST_NOT_RDY       0
0583 #define QLA82XX_DRVST_RST_RDY       1
0584 #define QLA82XX_DRVST_QSNT_RDY      2
0585 
0586 /* Different drive active state */
0587 #define QLA82XX_DRV_NOT_ACTIVE      0
0588 #define QLA82XX_DRV_ACTIVE      1
0589 
0590 /*
0591  * The PCI VendorID and DeviceID for our board.
0592  */
0593 #define PCI_DEVICE_ID_QLOGIC_ISP8021        0x8021
0594 #define PCI_DEVICE_ID_QLOGIC_ISP8044        0x8044
0595 
0596 #define QLA82XX_MSIX_TBL_SPACE          8192
0597 #define QLA82XX_PCI_REG_MSIX_TBL        0x44
0598 #define QLA82XX_PCI_MSIX_CONTROL        0x40
0599 
0600 struct crb_128M_2M_sub_block_map {
0601     unsigned valid;
0602     unsigned start_128M;
0603     unsigned end_128M;
0604     unsigned start_2M;
0605 };
0606 
0607 struct crb_128M_2M_block_map {
0608     struct crb_128M_2M_sub_block_map sub_block[16];
0609 };
0610 
0611 struct crb_addr_pair {
0612     long addr;
0613     long data;
0614 };
0615 
0616 #define ADDR_ERROR ((unsigned long) 0xffffffff)
0617 #define MAX_CTL_CHECK   1000
0618 
0619 /***************************************************************************
0620  *      PCI related defines.
0621  **************************************************************************/
0622 
0623 /*
0624  * Interrupt related defines.
0625  */
0626 #define PCIX_TARGET_STATUS  (0x10118)
0627 #define PCIX_TARGET_STATUS_F1   (0x10160)
0628 #define PCIX_TARGET_STATUS_F2   (0x10164)
0629 #define PCIX_TARGET_STATUS_F3   (0x10168)
0630 #define PCIX_TARGET_STATUS_F4   (0x10360)
0631 #define PCIX_TARGET_STATUS_F5   (0x10364)
0632 #define PCIX_TARGET_STATUS_F6   (0x10368)
0633 #define PCIX_TARGET_STATUS_F7   (0x1036c)
0634 
0635 #define PCIX_TARGET_MASK    (0x10128)
0636 #define PCIX_TARGET_MASK_F1 (0x10170)
0637 #define PCIX_TARGET_MASK_F2 (0x10174)
0638 #define PCIX_TARGET_MASK_F3 (0x10178)
0639 #define PCIX_TARGET_MASK_F4 (0x10370)
0640 #define PCIX_TARGET_MASK_F5 (0x10374)
0641 #define PCIX_TARGET_MASK_F6 (0x10378)
0642 #define PCIX_TARGET_MASK_F7 (0x1037c)
0643 
0644 /*
0645  * Message Signaled Interrupts
0646  */
0647 #define PCIX_MSI_F0     (0x13000)
0648 #define PCIX_MSI_F1     (0x13004)
0649 #define PCIX_MSI_F2     (0x13008)
0650 #define PCIX_MSI_F3     (0x1300c)
0651 #define PCIX_MSI_F4     (0x13010)
0652 #define PCIX_MSI_F5     (0x13014)
0653 #define PCIX_MSI_F6     (0x13018)
0654 #define PCIX_MSI_F7     (0x1301c)
0655 #define PCIX_MSI_F(FUNC)    (0x13000 + ((FUNC) * 4))
0656 #define PCIX_INT_VECTOR     (0x10100)
0657 #define PCIX_INT_MASK       (0x10104)
0658 
0659 /*
0660  * Interrupt state machine and other bits.
0661  */
0662 #define PCIE_MISCCFG_RC     (0x1206c)
0663 
0664 #define ISR_INT_TARGET_STATUS \
0665     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS))
0666 #define ISR_INT_TARGET_STATUS_F1 \
0667     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F1))
0668 #define ISR_INT_TARGET_STATUS_F2 \
0669     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F2))
0670 #define ISR_INT_TARGET_STATUS_F3 \
0671     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F3))
0672 #define ISR_INT_TARGET_STATUS_F4 \
0673     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F4))
0674 #define ISR_INT_TARGET_STATUS_F5 \
0675     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F5))
0676 #define ISR_INT_TARGET_STATUS_F6 \
0677     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F6))
0678 #define ISR_INT_TARGET_STATUS_F7 \
0679     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F7))
0680 
0681 #define ISR_INT_TARGET_MASK \
0682     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK))
0683 #define ISR_INT_TARGET_MASK_F1 \
0684     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F1))
0685 #define ISR_INT_TARGET_MASK_F2 \
0686     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F2))
0687 #define ISR_INT_TARGET_MASK_F3 \
0688     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F3))
0689 #define ISR_INT_TARGET_MASK_F4 \
0690     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F4))
0691 #define ISR_INT_TARGET_MASK_F5 \
0692     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F5))
0693 #define ISR_INT_TARGET_MASK_F6 \
0694     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F6))
0695 #define ISR_INT_TARGET_MASK_F7 \
0696     (QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F7))
0697 
0698 #define ISR_INT_VECTOR \
0699     (QLA82XX_PCIX_PS_REG(PCIX_INT_VECTOR))
0700 #define ISR_INT_MASK \
0701     (QLA82XX_PCIX_PS_REG(PCIX_INT_MASK))
0702 #define ISR_INT_STATE_REG \
0703     (QLA82XX_PCIX_PS_REG(PCIE_MISCCFG_RC))
0704 
0705 #define ISR_MSI_INT_TRIGGER(FUNC) \
0706     (QLA82XX_PCIX_PS_REG(PCIX_MSI_F(FUNC)))
0707 
0708 #define ISR_IS_LEGACY_INTR_IDLE(VAL)        (((VAL) & 0x300) == 0)
0709 #define ISR_IS_LEGACY_INTR_TRIGGERED(VAL)   (((VAL) & 0x300) == 0x200)
0710 
0711 /*
0712  * PCI Interrupt Vector Values.
0713  */
0714 #define PCIX_INT_VECTOR_BIT_F0  0x0080
0715 #define PCIX_INT_VECTOR_BIT_F1  0x0100
0716 #define PCIX_INT_VECTOR_BIT_F2  0x0200
0717 #define PCIX_INT_VECTOR_BIT_F3  0x0400
0718 #define PCIX_INT_VECTOR_BIT_F4  0x0800
0719 #define PCIX_INT_VECTOR_BIT_F5  0x1000
0720 #define PCIX_INT_VECTOR_BIT_F6  0x2000
0721 #define PCIX_INT_VECTOR_BIT_F7  0x4000
0722 
0723 struct qla82xx_legacy_intr_set {
0724     uint32_t    int_vec_bit;
0725     uint32_t    tgt_status_reg;
0726     uint32_t    tgt_mask_reg;
0727     uint32_t    pci_int_reg;
0728 };
0729 
0730 #define QLA82XX_LEGACY_INTR_CONFIG                  \
0731 {                                   \
0732     {                               \
0733         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F0,     \
0734         .tgt_status_reg =   ISR_INT_TARGET_STATUS,      \
0735         .tgt_mask_reg   =   ISR_INT_TARGET_MASK,        \
0736         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(0) },   \
0737                                     \
0738     {                               \
0739         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F1,     \
0740         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F1,   \
0741         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F1,     \
0742         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(1) },   \
0743                                     \
0744     {                               \
0745         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F2,     \
0746         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F2,   \
0747         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F2,     \
0748         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(2) },   \
0749                                     \
0750     {                               \
0751         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F3,     \
0752         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F3,   \
0753         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F3,     \
0754         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(3) },   \
0755                                     \
0756     {                               \
0757         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F4,     \
0758         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F4,   \
0759         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F4,     \
0760         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(4) },   \
0761                                     \
0762     {                               \
0763         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F5,     \
0764         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F5,   \
0765         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F5,     \
0766         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(5) },   \
0767                                     \
0768     {                               \
0769         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F6,     \
0770         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F6,   \
0771         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F6,     \
0772         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(6) },   \
0773                                     \
0774     {                               \
0775         .int_vec_bit    =   PCIX_INT_VECTOR_BIT_F7,     \
0776         .tgt_status_reg =   ISR_INT_TARGET_STATUS_F7,   \
0777         .tgt_mask_reg   =   ISR_INT_TARGET_MASK_F7,     \
0778         .pci_int_reg    =   ISR_MSI_INT_TRIGGER(7) },   \
0779 }
0780 
0781 #define BRDCFG_START        0x4000
0782 #define BOOTLD_START        0x10000
0783 #define IMAGE_START     0x100000
0784 #define FLASH_ADDR_START    0x43000
0785 
0786 /* Magic number to let user know flash is programmed */
0787 #define QLA82XX_BDINFO_MAGIC    0x12345678
0788 #define QLA82XX_FW_MAGIC_OFFSET (BRDCFG_START + 0x128)
0789 #define FW_SIZE_OFFSET      (0x3e840c)
0790 #define QLA82XX_FW_MIN_SIZE 0x3fffff
0791 
0792 /* UNIFIED ROMIMAGE START */
0793 #define QLA82XX_URI_FW_MIN_SIZE         0xc8000
0794 #define QLA82XX_URI_DIR_SECT_PRODUCT_TBL    0x0
0795 #define QLA82XX_URI_DIR_SECT_BOOTLD     0x6
0796 #define QLA82XX_URI_DIR_SECT_FW         0x7
0797 
0798 /* Offsets */
0799 #define QLA82XX_URI_CHIP_REV_OFF    10
0800 #define QLA82XX_URI_FLAGS_OFF       11
0801 #define QLA82XX_URI_BIOS_VERSION_OFF    12
0802 #define QLA82XX_URI_BOOTLD_IDX_OFF  27
0803 #define QLA82XX_URI_FIRMWARE_IDX_OFF    29
0804 
0805 struct qla82xx_uri_table_desc{
0806     __le32  findex;
0807     __le32  num_entries;
0808     __le32  entry_size;
0809     __le32  reserved[5];
0810 };
0811 
0812 struct qla82xx_uri_data_desc{
0813     __le32  findex;
0814     __le32  size;
0815     __le32  reserved[5];
0816 };
0817 
0818 /* UNIFIED ROMIMAGE END */
0819 
0820 #define QLA82XX_UNIFIED_ROMIMAGE    3
0821 #define QLA82XX_FLASH_ROMIMAGE      4
0822 #define QLA82XX_UNKNOWN_ROMIMAGE    0xff
0823 
0824 #define MIU_TEST_AGT_WRDATA_UPPER_LO        (0x0b0)
0825 #define MIU_TEST_AGT_WRDATA_UPPER_HI        (0x0b4)
0826 
0827 /* Request and response queue size */
0828 #define REQUEST_ENTRY_CNT_82XX      128 /* Number of request entries. */
0829 #define RESPONSE_ENTRY_CNT_82XX     128 /* Number of response entries.*/
0830 
0831 /*
0832  * ISP 8021 I/O Register Set structure definitions.
0833  */
0834 struct device_reg_82xx {
0835     __le32  req_q_out[64];      /* Request Queue out-Pointer (64 * 4) */
0836     __le32  rsp_q_in[64];       /* Response Queue In-Pointer. */
0837     __le32  rsp_q_out[64];      /* Response Queue Out-Pointer. */
0838 
0839     __le16  mailbox_in[32];     /* Mailbox In registers */
0840     __le16  unused_1[32];
0841     __le32  hint;           /* Host interrupt register */
0842 #define HINT_MBX_INT_PENDING    BIT_0
0843     __le16  unused_2[62];
0844     __le16  mailbox_out[32];    /* Mailbox Out registers */
0845     __le32  unused_3[48];
0846 
0847     __le32  host_status;        /* host status */
0848 #define HSRX_RISC_INT       BIT_15  /* RISC to Host interrupt. */
0849 #define HSRX_RISC_PAUSED    BIT_8   /* RISC Paused. */
0850     __le32  host_int;       /* Interrupt status. */
0851 #define ISRX_NX_RISC_INT    BIT_0   /* RISC interrupt. */
0852 };
0853 
0854 struct fcp_cmnd {
0855     struct scsi_lun lun;
0856     uint8_t crn;
0857     uint8_t task_attribute;
0858     uint8_t task_management;
0859     uint8_t additional_cdb_len;
0860     uint8_t cdb[260]; /* 256 for CDB len and 4 for FCP_DL */
0861 };
0862 
0863 struct dsd_dma {
0864     struct list_head list;
0865     dma_addr_t dsd_list_dma;
0866     void *dsd_addr;
0867 };
0868 
0869 #define QLA_DSDS_PER_IOCB   37
0870 #define QLA_DSD_SIZE        12
0871 struct ct6_dsd {
0872     uint16_t fcp_cmnd_len;
0873     dma_addr_t fcp_cmnd_dma;
0874     struct fcp_cmnd *fcp_cmnd;
0875     int dsd_use_cnt;
0876     struct list_head dsd_list;
0877 };
0878 
0879 #define MBC_TOGGLE_INTERRUPT    0x10
0880 #define MBC_SET_LED_CONFIG  0x125   /* FCoE specific LED control */
0881 #define MBC_GET_LED_CONFIG  0x126   /* FCoE specific LED control */
0882 
0883 /* Flash  offset */
0884 #define FLT_REG_BOOTLOAD_82XX   0x72
0885 #define FLT_REG_BOOT_CODE_82XX  0x78
0886 #define FLT_REG_FW_82XX     0x74
0887 #define FLT_REG_GOLD_FW_82XX    0x75
0888 #define FLT_REG_VPD_8XXX    0x81
0889 
0890 #define FA_VPD_SIZE_82XX    0x400
0891 
0892 #define FA_FLASH_LAYOUT_ADDR_82 0xFC400
0893 
0894 /******************************************************************************
0895 *
0896 *    Definitions specific to M25P flash
0897 *
0898 *******************************************************************************
0899 *   Instructions
0900 */
0901 #define M25P_INSTR_WREN     0x06
0902 #define M25P_INSTR_WRDI     0x04
0903 #define M25P_INSTR_RDID     0x9f
0904 #define M25P_INSTR_RDSR     0x05
0905 #define M25P_INSTR_WRSR     0x01
0906 #define M25P_INSTR_READ     0x03
0907 #define M25P_INSTR_FAST_READ    0x0b
0908 #define M25P_INSTR_PP       0x02
0909 #define M25P_INSTR_SE       0xd8
0910 #define M25P_INSTR_BE       0xc7
0911 #define M25P_INSTR_DP       0xb9
0912 #define M25P_INSTR_RES      0xab
0913 
0914 /* Minidump related */
0915 
0916 /*
0917  * Version of the template
0918  * 4 Bytes
0919  * X.Major.Minor.RELEASE
0920  */
0921 #define QLA82XX_MINIDUMP_VERSION         0x10101
0922 
0923 /*
0924  * Entry Type Defines
0925  */
0926 #define QLA82XX_RDNOP                   0
0927 #define QLA82XX_RDCRB                   1
0928 #define QLA82XX_RDMUX                   2
0929 #define QLA82XX_QUEUE                   3
0930 #define QLA82XX_BOARD                   4
0931 #define QLA82XX_RDSRE                   5
0932 #define QLA82XX_RDOCM                   6
0933 #define QLA82XX_CACHE                  10
0934 #define QLA82XX_L1DAT                  11
0935 #define QLA82XX_L1INS                  12
0936 #define QLA82XX_L2DTG                  21
0937 #define QLA82XX_L2ITG                  22
0938 #define QLA82XX_L2DAT                  23
0939 #define QLA82XX_L2INS                  24
0940 #define QLA82XX_RDROM                  71
0941 #define QLA82XX_RDMEM                  72
0942 #define QLA82XX_CNTRL                  98
0943 #define QLA82XX_TLHDR                  99
0944 #define QLA82XX_RDEND                  255
0945 #define QLA8044_POLLRD          35
0946 #define QLA8044_RDMUX2          36
0947 #define QLA8044_L1DTG           8
0948 #define QLA8044_L1ITG           9
0949 #define QLA8044_POLLRDMWR       37
0950 
0951 /*
0952  * Opcodes for Control Entries.
0953  * These Flags are bit fields.
0954  */
0955 #define QLA82XX_DBG_OPCODE_WR        0x01
0956 #define QLA82XX_DBG_OPCODE_RW        0x02
0957 #define QLA82XX_DBG_OPCODE_AND       0x04
0958 #define QLA82XX_DBG_OPCODE_OR        0x08
0959 #define QLA82XX_DBG_OPCODE_POLL      0x10
0960 #define QLA82XX_DBG_OPCODE_RDSTATE   0x20
0961 #define QLA82XX_DBG_OPCODE_WRSTATE   0x40
0962 #define QLA82XX_DBG_OPCODE_MDSTATE   0x80
0963 
0964 /*
0965  * Template Header and Entry Header definitions start here.
0966  */
0967 
0968 /*
0969  * Template Header
0970  * Parts of the template header can be modified by the driver.
0971  * These include the saved_state_array, capture_debug_level, driver_timestamp
0972  */
0973 
0974 #define QLA82XX_DBG_STATE_ARRAY_LEN        16
0975 #define QLA82XX_DBG_CAP_SIZE_ARRAY_LEN     8
0976 #define QLA82XX_DBG_RSVD_ARRAY_LEN         8
0977 
0978 /*
0979  * Driver Flags
0980  */
0981 #define QLA82XX_DBG_SKIPPED_FLAG    0x80    /* driver skipped this entry */
0982 #define QLA82XX_DEFAULT_CAP_MASK    0xFF    /* default capture mask */
0983 
0984 struct qla82xx_md_template_hdr {
0985     uint32_t entry_type;
0986     uint32_t first_entry_offset;
0987     uint32_t size_of_template;
0988     uint32_t capture_debug_level;
0989 
0990     uint32_t num_of_entries;
0991     uint32_t version;
0992     uint32_t driver_timestamp;
0993     uint32_t template_checksum;
0994 
0995     uint32_t driver_capture_mask;
0996     uint32_t driver_info[3];
0997 
0998     uint32_t saved_state_array[QLA82XX_DBG_STATE_ARRAY_LEN];
0999     uint32_t capture_size_array[QLA82XX_DBG_CAP_SIZE_ARRAY_LEN];
1000 
1001     /*  markers_array used to capture some special locations on board */
1002     uint32_t markers_array[QLA82XX_DBG_RSVD_ARRAY_LEN];
1003     uint32_t num_of_free_entries;   /* For internal use */
1004     uint32_t free_entry_offset; /* For internal use */
1005     uint32_t total_table_size;  /*  For internal use */
1006     uint32_t bkup_table_offset; /*  For internal use */
1007 } __packed;
1008 
1009 /*
1010  * Entry Header:  Common to All Entry Types
1011  */
1012 
1013 /*
1014  * Driver Code is for driver to write some info about the entry.
1015  * Currently not used.
1016  */
1017 typedef struct qla82xx_md_entry_hdr {
1018     uint32_t entry_type;
1019     uint32_t entry_size;
1020     uint32_t entry_capture_size;
1021     struct {
1022         uint8_t entry_capture_mask;
1023         uint8_t entry_code;
1024         uint8_t driver_code;
1025         uint8_t driver_flags;
1026     } d_ctrl;
1027 } __packed qla82xx_md_entry_hdr_t;
1028 
1029 /*
1030  *  Read CRB entry header
1031  */
1032 struct qla82xx_md_entry_crb {
1033     qla82xx_md_entry_hdr_t h;
1034     uint32_t addr;
1035     struct {
1036         uint8_t addr_stride;
1037         uint8_t state_index_a;
1038         uint16_t poll_timeout;
1039     } crb_strd;
1040 
1041     uint32_t data_size;
1042     uint32_t op_count;
1043 
1044     struct {
1045         uint8_t opcode;
1046         uint8_t state_index_v;
1047         uint8_t shl;
1048         uint8_t shr;
1049     } crb_ctrl;
1050 
1051     uint32_t value_1;
1052     uint32_t value_2;
1053     uint32_t value_3;
1054 } __packed;
1055 
1056 /*
1057  * Cache entry header
1058  */
1059 struct qla82xx_md_entry_cache {
1060     qla82xx_md_entry_hdr_t h;
1061 
1062     uint32_t tag_reg_addr;
1063     struct {
1064         uint16_t tag_value_stride;
1065         uint16_t init_tag_value;
1066     } addr_ctrl;
1067 
1068     uint32_t data_size;
1069     uint32_t op_count;
1070 
1071     uint32_t control_addr;
1072     struct {
1073         uint16_t write_value;
1074         uint8_t poll_mask;
1075         uint8_t poll_wait;
1076     } cache_ctrl;
1077 
1078     uint32_t read_addr;
1079     struct {
1080         uint8_t read_addr_stride;
1081         uint8_t read_addr_cnt;
1082         uint16_t rsvd_1;
1083     } read_ctrl;
1084 } __packed;
1085 
1086 /*
1087  * Read OCM
1088  */
1089 struct qla82xx_md_entry_rdocm {
1090     qla82xx_md_entry_hdr_t h;
1091 
1092     uint32_t rsvd_0;
1093     uint32_t rsvd_1;
1094     uint32_t data_size;
1095     uint32_t op_count;
1096 
1097     uint32_t rsvd_2;
1098     uint32_t rsvd_3;
1099     uint32_t read_addr;
1100     uint32_t read_addr_stride;
1101     uint32_t read_addr_cntrl;
1102 } __packed;
1103 
1104 /*
1105  * Read Memory
1106  */
1107 struct qla82xx_md_entry_rdmem {
1108     qla82xx_md_entry_hdr_t h;
1109     uint32_t rsvd[6];
1110     uint32_t read_addr;
1111     uint32_t read_data_size;
1112 } __packed;
1113 
1114 /*
1115  * Read ROM
1116  */
1117 struct qla82xx_md_entry_rdrom {
1118     qla82xx_md_entry_hdr_t h;
1119     uint32_t rsvd[6];
1120     uint32_t read_addr;
1121     uint32_t read_data_size;
1122 } __packed;
1123 
1124 struct qla82xx_md_entry_mux {
1125     qla82xx_md_entry_hdr_t h;
1126 
1127     uint32_t select_addr;
1128     uint32_t rsvd_0;
1129     uint32_t data_size;
1130     uint32_t op_count;
1131 
1132     uint32_t select_value;
1133     uint32_t select_value_stride;
1134     uint32_t read_addr;
1135     uint32_t rsvd_1;
1136 } __packed;
1137 
1138 struct qla82xx_md_entry_queue {
1139     qla82xx_md_entry_hdr_t h;
1140 
1141     uint32_t select_addr;
1142     struct {
1143         uint16_t queue_id_stride;
1144         uint16_t rsvd_0;
1145     } q_strd;
1146 
1147     uint32_t data_size;
1148     uint32_t op_count;
1149     uint32_t rsvd_1;
1150     uint32_t rsvd_2;
1151 
1152     uint32_t read_addr;
1153     struct {
1154         uint8_t read_addr_stride;
1155         uint8_t read_addr_cnt;
1156         uint16_t rsvd_3;
1157     } rd_strd;
1158 } __packed;
1159 
1160 #define MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE 0x129
1161 #define RQST_TMPLT_SIZE 0x0
1162 #define RQST_TMPLT 0x1
1163 #define MD_DIRECT_ROM_WINDOW    0x42110030
1164 #define MD_DIRECT_ROM_READ_BASE 0x42150000
1165 #define MD_MIU_TEST_AGT_CTRL        0x41000090
1166 #define MD_MIU_TEST_AGT_ADDR_LO     0x41000094
1167 #define MD_MIU_TEST_AGT_ADDR_HI     0x41000098
1168 
1169 extern const int MD_MIU_TEST_AGT_RDDATA[4];
1170 
1171 #define CRB_NIU_XG_PAUSE_CTL_P0        0x1
1172 #define CRB_NIU_XG_PAUSE_CTL_P1        0x8
1173 
1174 #define qla82xx_get_temp_val(x)          ((x) >> 16)
1175 #define qla82xx_get_temp_state(x)        ((x) & 0xffff)
1176 #define qla82xx_encode_temp(val, state)  (((val) << 16) | (state))
1177 
1178 /*
1179  * Temperature control.
1180  */
1181 enum {
1182     QLA82XX_TEMP_NORMAL = 0x1, /* Normal operating range */
1183     QLA82XX_TEMP_WARN,     /* Sound alert, temperature getting high */
1184     QLA82XX_TEMP_PANIC     /* Fatal error, hardware has shut down. */
1185 };
1186 
1187 #define LEG_INTR_PTR_OFFSET 0x38C0
1188 #define LEG_INTR_TRIG_OFFSET    0x38C4
1189 #define LEG_INTR_MASK_OFFSET    0x38C8
1190 #endif