xref: /OK3568_Linux_fs/kernel/drivers/scsi/qla2xxx/qla_nx.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * QLogic Fibre Channel HBA Driver
4*4882a593Smuzhiyun  * Copyright (c)  2003-2014 QLogic Corporation
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef __QLA_NX_H
7*4882a593Smuzhiyun #define __QLA_NX_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <scsi/scsi.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /*
12*4882a593Smuzhiyun  * Following are the states of the Phantom. Phantom will set them and
13*4882a593Smuzhiyun  * Host will read to check if the fields are correct.
14*4882a593Smuzhiyun */
15*4882a593Smuzhiyun #define PHAN_INITIALIZE_FAILED	      0xffff
16*4882a593Smuzhiyun #define PHAN_INITIALIZE_COMPLETE      0xff01
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /* Host writes the following to notify that it has done the init-handshake */
19*4882a593Smuzhiyun #define PHAN_INITIALIZE_ACK	      0xf00f
20*4882a593Smuzhiyun #define PHAN_PEG_RCV_INITIALIZED      0xff01
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /*CRB_RELATED*/
23*4882a593Smuzhiyun #define QLA82XX_CRB_BASE	QLA82XX_CAM_RAM(0x200)
24*4882a593Smuzhiyun #define QLA82XX_REG(X)		(QLA82XX_CRB_BASE+(X))
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define CRB_CMDPEG_STATE		QLA82XX_REG(0x50)
27*4882a593Smuzhiyun #define CRB_RCVPEG_STATE		QLA82XX_REG(0x13c)
28*4882a593Smuzhiyun #define BOOT_LOADER_DIMM_STATUS		QLA82XX_REG(0x54)
29*4882a593Smuzhiyun #define CRB_DMA_SHIFT			QLA82XX_REG(0xcc)
30*4882a593Smuzhiyun #define CRB_TEMP_STATE			QLA82XX_REG(0x1b4)
31*4882a593Smuzhiyun #define QLA82XX_DMA_SHIFT_VALUE		0x55555555
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define QLA82XX_HW_H0_CH_HUB_ADR    0x05
34*4882a593Smuzhiyun #define QLA82XX_HW_H1_CH_HUB_ADR    0x0E
35*4882a593Smuzhiyun #define QLA82XX_HW_H2_CH_HUB_ADR    0x03
36*4882a593Smuzhiyun #define QLA82XX_HW_H3_CH_HUB_ADR    0x01
37*4882a593Smuzhiyun #define QLA82XX_HW_H4_CH_HUB_ADR    0x06
38*4882a593Smuzhiyun #define QLA82XX_HW_H5_CH_HUB_ADR    0x07
39*4882a593Smuzhiyun #define QLA82XX_HW_H6_CH_HUB_ADR    0x08
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /*  Hub 0 */
42*4882a593Smuzhiyun #define QLA82XX_HW_MN_CRB_AGT_ADR   0x15
43*4882a593Smuzhiyun #define QLA82XX_HW_MS_CRB_AGT_ADR   0x25
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun /*  Hub 1 */
46*4882a593Smuzhiyun #define QLA82XX_HW_PS_CRB_AGT_ADR	0x73
47*4882a593Smuzhiyun #define QLA82XX_HW_QMS_CRB_AGT_ADR	0x00
48*4882a593Smuzhiyun #define QLA82XX_HW_RPMX3_CRB_AGT_ADR	0x0b
49*4882a593Smuzhiyun #define QLA82XX_HW_SQGS0_CRB_AGT_ADR	0x01
50*4882a593Smuzhiyun #define QLA82XX_HW_SQGS1_CRB_AGT_ADR	0x02
51*4882a593Smuzhiyun #define QLA82XX_HW_SQGS2_CRB_AGT_ADR	0x03
52*4882a593Smuzhiyun #define QLA82XX_HW_SQGS3_CRB_AGT_ADR	0x04
53*4882a593Smuzhiyun #define QLA82XX_HW_C2C0_CRB_AGT_ADR	0x58
54*4882a593Smuzhiyun #define QLA82XX_HW_C2C1_CRB_AGT_ADR	0x59
55*4882a593Smuzhiyun #define QLA82XX_HW_C2C2_CRB_AGT_ADR	0x5a
56*4882a593Smuzhiyun #define QLA82XX_HW_RPMX2_CRB_AGT_ADR	0x0a
57*4882a593Smuzhiyun #define QLA82XX_HW_RPMX4_CRB_AGT_ADR	0x0c
58*4882a593Smuzhiyun #define QLA82XX_HW_RPMX7_CRB_AGT_ADR	0x0f
59*4882a593Smuzhiyun #define QLA82XX_HW_RPMX9_CRB_AGT_ADR	0x12
60*4882a593Smuzhiyun #define QLA82XX_HW_SMB_CRB_AGT_ADR	0x18
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /*  Hub 2 */
63*4882a593Smuzhiyun #define QLA82XX_HW_NIU_CRB_AGT_ADR	0x31
64*4882a593Smuzhiyun #define QLA82XX_HW_I2C0_CRB_AGT_ADR	0x19
65*4882a593Smuzhiyun #define QLA82XX_HW_I2C1_CRB_AGT_ADR	0x29
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #define QLA82XX_HW_SN_CRB_AGT_ADR	0x10
68*4882a593Smuzhiyun #define QLA82XX_HW_I2Q_CRB_AGT_ADR	0x20
69*4882a593Smuzhiyun #define QLA82XX_HW_LPC_CRB_AGT_ADR	0x22
70*4882a593Smuzhiyun #define QLA82XX_HW_ROMUSB_CRB_AGT_ADR	0x21
71*4882a593Smuzhiyun #define QLA82XX_HW_QM_CRB_AGT_ADR	0x66
72*4882a593Smuzhiyun #define QLA82XX_HW_SQG0_CRB_AGT_ADR	0x60
73*4882a593Smuzhiyun #define QLA82XX_HW_SQG1_CRB_AGT_ADR	0x61
74*4882a593Smuzhiyun #define QLA82XX_HW_SQG2_CRB_AGT_ADR	0x62
75*4882a593Smuzhiyun #define QLA82XX_HW_SQG3_CRB_AGT_ADR	0x63
76*4882a593Smuzhiyun #define QLA82XX_HW_RPMX1_CRB_AGT_ADR	0x09
77*4882a593Smuzhiyun #define QLA82XX_HW_RPMX5_CRB_AGT_ADR	0x0d
78*4882a593Smuzhiyun #define QLA82XX_HW_RPMX6_CRB_AGT_ADR	0x0e
79*4882a593Smuzhiyun #define QLA82XX_HW_RPMX8_CRB_AGT_ADR	0x11
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /*  Hub 3 */
82*4882a593Smuzhiyun #define QLA82XX_HW_PH_CRB_AGT_ADR	0x1A
83*4882a593Smuzhiyun #define QLA82XX_HW_SRE_CRB_AGT_ADR	0x50
84*4882a593Smuzhiyun #define QLA82XX_HW_EG_CRB_AGT_ADR	0x51
85*4882a593Smuzhiyun #define QLA82XX_HW_RPMX0_CRB_AGT_ADR	0x08
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /*  Hub 4 */
88*4882a593Smuzhiyun #define QLA82XX_HW_PEGN0_CRB_AGT_ADR	0x40
89*4882a593Smuzhiyun #define QLA82XX_HW_PEGN1_CRB_AGT_ADR	0x41
90*4882a593Smuzhiyun #define QLA82XX_HW_PEGN2_CRB_AGT_ADR	0x42
91*4882a593Smuzhiyun #define QLA82XX_HW_PEGN3_CRB_AGT_ADR	0x43
92*4882a593Smuzhiyun #define QLA82XX_HW_PEGNI_CRB_AGT_ADR	0x44
93*4882a593Smuzhiyun #define QLA82XX_HW_PEGND_CRB_AGT_ADR	0x45
94*4882a593Smuzhiyun #define QLA82XX_HW_PEGNC_CRB_AGT_ADR	0x46
95*4882a593Smuzhiyun #define QLA82XX_HW_PEGR0_CRB_AGT_ADR	0x47
96*4882a593Smuzhiyun #define QLA82XX_HW_PEGR1_CRB_AGT_ADR	0x48
97*4882a593Smuzhiyun #define QLA82XX_HW_PEGR2_CRB_AGT_ADR	0x49
98*4882a593Smuzhiyun #define QLA82XX_HW_PEGR3_CRB_AGT_ADR	0x4a
99*4882a593Smuzhiyun #define QLA82XX_HW_PEGN4_CRB_AGT_ADR	0x4b
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun /*  Hub 5 */
102*4882a593Smuzhiyun #define QLA82XX_HW_PEGS0_CRB_AGT_ADR	0x40
103*4882a593Smuzhiyun #define QLA82XX_HW_PEGS1_CRB_AGT_ADR	0x41
104*4882a593Smuzhiyun #define QLA82XX_HW_PEGS2_CRB_AGT_ADR	0x42
105*4882a593Smuzhiyun #define QLA82XX_HW_PEGS3_CRB_AGT_ADR	0x43
106*4882a593Smuzhiyun #define QLA82XX_HW_PEGSI_CRB_AGT_ADR	0x44
107*4882a593Smuzhiyun #define QLA82XX_HW_PEGSD_CRB_AGT_ADR	0x45
108*4882a593Smuzhiyun #define QLA82XX_HW_PEGSC_CRB_AGT_ADR	0x46
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun /*  Hub 6 */
111*4882a593Smuzhiyun #define QLA82XX_HW_CAS0_CRB_AGT_ADR	0x46
112*4882a593Smuzhiyun #define QLA82XX_HW_CAS1_CRB_AGT_ADR	0x47
113*4882a593Smuzhiyun #define QLA82XX_HW_CAS2_CRB_AGT_ADR	0x48
114*4882a593Smuzhiyun #define QLA82XX_HW_CAS3_CRB_AGT_ADR	0x49
115*4882a593Smuzhiyun #define QLA82XX_HW_NCM_CRB_AGT_ADR	0x16
116*4882a593Smuzhiyun #define QLA82XX_HW_TMR_CRB_AGT_ADR	0x17
117*4882a593Smuzhiyun #define QLA82XX_HW_XDMA_CRB_AGT_ADR	0x05
118*4882a593Smuzhiyun #define QLA82XX_HW_OCM0_CRB_AGT_ADR	0x06
119*4882a593Smuzhiyun #define QLA82XX_HW_OCM1_CRB_AGT_ADR	0x07
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /*  This field defines PCI/X adr [25:20] of agents on the CRB */
122*4882a593Smuzhiyun /*  */
123*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PH	0
124*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PS	1
125*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_MN	2
126*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_MS	3
127*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SRE	5
128*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_NIU	6
129*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_QMN	7
130*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN0	8
131*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN1	9
132*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN2	10
133*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQN3	11
134*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_QMS	12
135*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS0	13
136*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS1	14
137*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS2	15
138*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SQS3	16
139*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN0	17
140*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN1	18
141*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN2	19
142*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN3	20
143*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGN4	QLA82XX_HW_PX_MAP_CRB_SQS2
144*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGND	21
145*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGNI	22
146*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS0	23
147*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS1	24
148*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS2	25
149*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGS3	26
150*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGSD	27
151*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGSI	28
152*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SN	29
153*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_EG	31
154*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PH2	32
155*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PS2	33
156*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAM	34
157*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS0	35
158*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS1	36
159*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS2	37
160*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_C2C0	38
161*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_C2C1	39
162*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_TIMR	40
163*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX1	42
164*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX2	43
165*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX3	44
166*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX4	45
167*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX5	46
168*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX6	47
169*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX7	48
170*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_XDMA	49
171*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2Q	50
172*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_ROMUSB	51
173*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_CAS3	52
174*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX0	53
175*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX8	54
176*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_RPMX9	55
177*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_OCM0	56
178*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_OCM1	57
179*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_SMB	58
180*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2C0	59
181*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_I2C1	60
182*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_LPC	61
183*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGNC	62
184*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR0	63
185*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR1	4
186*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR2	30
187*4882a593Smuzhiyun #define QLA82XX_HW_PX_MAP_CRB_PGR3	41
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun /*  This field defines CRB adr [31:20] of the agents */
190*4882a593Smuzhiyun /*  */
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_MN	    ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
193*4882a593Smuzhiyun 	QLA82XX_HW_MN_CRB_AGT_ADR)
194*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PH	    ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
195*4882a593Smuzhiyun 	QLA82XX_HW_PH_CRB_AGT_ADR)
196*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_MS	    ((QLA82XX_HW_H0_CH_HUB_ADR << 7) | \
197*4882a593Smuzhiyun 	QLA82XX_HW_MS_CRB_AGT_ADR)
198*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PS	    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
199*4882a593Smuzhiyun 	QLA82XX_HW_PS_CRB_AGT_ADR)
200*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SS	    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
201*4882a593Smuzhiyun 	QLA82XX_HW_SS_CRB_AGT_ADR)
202*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX3    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
203*4882a593Smuzhiyun 	QLA82XX_HW_RPMX3_CRB_AGT_ADR)
204*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMS	    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
205*4882a593Smuzhiyun 	QLA82XX_HW_QMS_CRB_AGT_ADR)
206*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS0     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
207*4882a593Smuzhiyun 	QLA82XX_HW_SQGS0_CRB_AGT_ADR)
208*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS1     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
209*4882a593Smuzhiyun 	QLA82XX_HW_SQGS1_CRB_AGT_ADR)
210*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS2     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
211*4882a593Smuzhiyun 	QLA82XX_HW_SQGS2_CRB_AGT_ADR)
212*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQS3     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
213*4882a593Smuzhiyun 	QLA82XX_HW_SQGS3_CRB_AGT_ADR)
214*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C0     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
215*4882a593Smuzhiyun 	QLA82XX_HW_C2C0_CRB_AGT_ADR)
216*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_C2C1     ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
217*4882a593Smuzhiyun 	QLA82XX_HW_C2C1_CRB_AGT_ADR)
218*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX2    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
219*4882a593Smuzhiyun 	QLA82XX_HW_RPMX2_CRB_AGT_ADR)
220*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX4    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
221*4882a593Smuzhiyun 	QLA82XX_HW_RPMX4_CRB_AGT_ADR)
222*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX7    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
223*4882a593Smuzhiyun 	QLA82XX_HW_RPMX7_CRB_AGT_ADR)
224*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX9    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
225*4882a593Smuzhiyun 	QLA82XX_HW_RPMX9_CRB_AGT_ADR)
226*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SMB	    ((QLA82XX_HW_H1_CH_HUB_ADR << 7) | \
227*4882a593Smuzhiyun 	QLA82XX_HW_SMB_CRB_AGT_ADR)
228*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_NIU	    ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
229*4882a593Smuzhiyun 	QLA82XX_HW_NIU_CRB_AGT_ADR)
230*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C0     ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
231*4882a593Smuzhiyun 	QLA82XX_HW_I2C0_CRB_AGT_ADR)
232*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2C1     ((QLA82XX_HW_H2_CH_HUB_ADR << 7) | \
233*4882a593Smuzhiyun 	QLA82XX_HW_I2C1_CRB_AGT_ADR)
234*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SRE	    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
235*4882a593Smuzhiyun 	QLA82XX_HW_SRE_CRB_AGT_ADR)
236*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_EG	    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
237*4882a593Smuzhiyun 	QLA82XX_HW_EG_CRB_AGT_ADR)
238*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX0    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
239*4882a593Smuzhiyun 	QLA82XX_HW_RPMX0_CRB_AGT_ADR)
240*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_QMN	    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
241*4882a593Smuzhiyun 	QLA82XX_HW_QM_CRB_AGT_ADR)
242*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN0     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
243*4882a593Smuzhiyun 	QLA82XX_HW_SQG0_CRB_AGT_ADR)
244*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN1     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
245*4882a593Smuzhiyun 	QLA82XX_HW_SQG1_CRB_AGT_ADR)
246*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN2     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
247*4882a593Smuzhiyun 	QLA82XX_HW_SQG2_CRB_AGT_ADR)
248*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SQN3     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
249*4882a593Smuzhiyun 	QLA82XX_HW_SQG3_CRB_AGT_ADR)
250*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX1    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
251*4882a593Smuzhiyun 	QLA82XX_HW_RPMX1_CRB_AGT_ADR)
252*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX5    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
253*4882a593Smuzhiyun 	QLA82XX_HW_RPMX5_CRB_AGT_ADR)
254*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX6    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
255*4882a593Smuzhiyun 	QLA82XX_HW_RPMX6_CRB_AGT_ADR)
256*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_RPMX8    ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
257*4882a593Smuzhiyun 	QLA82XX_HW_RPMX8_CRB_AGT_ADR)
258*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS0     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
259*4882a593Smuzhiyun 	QLA82XX_HW_CAS0_CRB_AGT_ADR)
260*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS1     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
261*4882a593Smuzhiyun 	QLA82XX_HW_CAS1_CRB_AGT_ADR)
262*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS2     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
263*4882a593Smuzhiyun 	QLA82XX_HW_CAS2_CRB_AGT_ADR)
264*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAS3     ((QLA82XX_HW_H3_CH_HUB_ADR << 7) | \
265*4882a593Smuzhiyun 	QLA82XX_HW_CAS3_CRB_AGT_ADR)
266*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNI     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
267*4882a593Smuzhiyun 	QLA82XX_HW_PEGNI_CRB_AGT_ADR)
268*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGND     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
269*4882a593Smuzhiyun 	QLA82XX_HW_PEGND_CRB_AGT_ADR)
270*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN0     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
271*4882a593Smuzhiyun 	QLA82XX_HW_PEGN0_CRB_AGT_ADR)
272*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN1     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
273*4882a593Smuzhiyun 	QLA82XX_HW_PEGN1_CRB_AGT_ADR)
274*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN2     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
275*4882a593Smuzhiyun 	QLA82XX_HW_PEGN2_CRB_AGT_ADR)
276*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN3     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
277*4882a593Smuzhiyun 	QLA82XX_HW_PEGN3_CRB_AGT_ADR)
278*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGN4	   ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
279*4882a593Smuzhiyun 	QLA82XX_HW_PEGN4_CRB_AGT_ADR)
280*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGNC     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
281*4882a593Smuzhiyun 	QLA82XX_HW_PEGNC_CRB_AGT_ADR)
282*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR0     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
283*4882a593Smuzhiyun 	QLA82XX_HW_PEGR0_CRB_AGT_ADR)
284*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR1     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
285*4882a593Smuzhiyun 	QLA82XX_HW_PEGR1_CRB_AGT_ADR)
286*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR2     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
287*4882a593Smuzhiyun 	QLA82XX_HW_PEGR2_CRB_AGT_ADR)
288*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGR3     ((QLA82XX_HW_H4_CH_HUB_ADR << 7) | \
289*4882a593Smuzhiyun 	QLA82XX_HW_PEGR3_CRB_AGT_ADR)
290*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSI     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
291*4882a593Smuzhiyun 	QLA82XX_HW_PEGSI_CRB_AGT_ADR)
292*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSD     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
293*4882a593Smuzhiyun 	QLA82XX_HW_PEGSD_CRB_AGT_ADR)
294*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS0     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
295*4882a593Smuzhiyun 	QLA82XX_HW_PEGS0_CRB_AGT_ADR)
296*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS1     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
297*4882a593Smuzhiyun 	QLA82XX_HW_PEGS1_CRB_AGT_ADR)
298*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS2     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
299*4882a593Smuzhiyun 	QLA82XX_HW_PEGS2_CRB_AGT_ADR)
300*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGS3     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
301*4882a593Smuzhiyun 	QLA82XX_HW_PEGS3_CRB_AGT_ADR)
302*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_PGSC     ((QLA82XX_HW_H5_CH_HUB_ADR << 7) | \
303*4882a593Smuzhiyun 	QLA82XX_HW_PEGSC_CRB_AGT_ADR)
304*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_CAM	    ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
305*4882a593Smuzhiyun 	QLA82XX_HW_NCM_CRB_AGT_ADR)
306*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_TIMR     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
307*4882a593Smuzhiyun 	QLA82XX_HW_TMR_CRB_AGT_ADR)
308*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_XDMA     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
309*4882a593Smuzhiyun 	QLA82XX_HW_XDMA_CRB_AGT_ADR)
310*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_SN	    ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
311*4882a593Smuzhiyun 	QLA82XX_HW_SN_CRB_AGT_ADR)
312*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_I2Q	    ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
313*4882a593Smuzhiyun 	QLA82XX_HW_I2Q_CRB_AGT_ADR)
314*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_ROMUSB   ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
315*4882a593Smuzhiyun 	QLA82XX_HW_ROMUSB_CRB_AGT_ADR)
316*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM0     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
317*4882a593Smuzhiyun 	QLA82XX_HW_OCM0_CRB_AGT_ADR)
318*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_OCM1     ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
319*4882a593Smuzhiyun 	QLA82XX_HW_OCM1_CRB_AGT_ADR)
320*4882a593Smuzhiyun #define QLA82XX_HW_CRB_HUB_AGT_ADR_LPC	    ((QLA82XX_HW_H6_CH_HUB_ADR << 7) | \
321*4882a593Smuzhiyun 	QLA82XX_HW_LPC_CRB_AGT_ADR)
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun #define ROMUSB_GLB				(QLA82XX_CRB_ROMUSB + 0x00000)
324*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_PEGTUNE_DONE		(ROMUSB_GLB + 0x005c)
325*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_STATUS		(ROMUSB_GLB + 0x0004)
326*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_SW_RESET		(ROMUSB_GLB + 0x0008)
327*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_ADDRESS		(ROMUSB_ROM + 0x0008)
328*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_WDATA		(ROMUSB_ROM + 0x000c)
329*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_ABYTE_CNT		(ROMUSB_ROM + 0x0010)
330*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT	(ROMUSB_ROM + 0x0014)
331*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_RDATA		(ROMUSB_ROM + 0x0018)
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun #define ROMUSB_ROM				(QLA82XX_CRB_ROMUSB + 0x10000)
334*4882a593Smuzhiyun #define QLA82XX_ROMUSB_ROM_INSTR_OPCODE		(ROMUSB_ROM + 0x0004)
335*4882a593Smuzhiyun #define QLA82XX_ROMUSB_GLB_CAS_RST		(ROMUSB_GLB + 0x0038)
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun #define QLA82XX_PCI_CRB_WINDOWSIZE 0x00100000	 /* all are 1MB windows */
338*4882a593Smuzhiyun #define QLA82XX_PCI_CRB_WINDOW(A) \
339*4882a593Smuzhiyun 	(QLA82XX_PCI_CRBSPACE + (A)*QLA82XX_PCI_CRB_WINDOWSIZE)
340*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_0 \
341*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C0)
342*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_1 \
343*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C1)
344*4882a593Smuzhiyun #define QLA82XX_CRB_C2C_2 \
345*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_C2C2)
346*4882a593Smuzhiyun #define QLA82XX_CRB_CAM \
347*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAM)
348*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER \
349*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS)
350*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_0 \
351*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS0)
352*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_1 \
353*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS1)
354*4882a593Smuzhiyun #define QLA82XX_CRB_CASPER_2 \
355*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_CAS2)
356*4882a593Smuzhiyun #define QLA82XX_CRB_DDR_MD \
357*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MS)
358*4882a593Smuzhiyun #define QLA82XX_CRB_DDR_NET \
359*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_MN)
360*4882a593Smuzhiyun #define QLA82XX_CRB_EPG \
361*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_EG)
362*4882a593Smuzhiyun #define QLA82XX_CRB_I2Q \
363*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2Q)
364*4882a593Smuzhiyun #define QLA82XX_CRB_NIU \
365*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_NIU)
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_HOST \
368*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH)
369*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_HOST2 \
370*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PH2)
371*4882a593Smuzhiyun #define QLA82XX_CRB_PCIX_MD \
372*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS)
373*4882a593Smuzhiyun #define QLA82XX_CRB_PCIE \
374*4882a593Smuzhiyun 	QLA82XX_CRB_PCIX_MD
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun /* window 1 pcie slot */
377*4882a593Smuzhiyun #define QLA82XX_CRB_PCIE2	 \
378*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PS2)
379*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_0 \
380*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS0)
381*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_1 \
382*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS1)
383*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_2 \
384*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS2)
385*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_3 \
386*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3)
387*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_3 \
388*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGS3)
389*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_D \
390*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSD)
391*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_MD_I \
392*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGSI)
393*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_0 \
394*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN0)
395*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_1 \
396*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN1)
397*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_2 \
398*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN2)
399*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_3 \
400*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN3)
401*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_4 \
402*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGN4)
403*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_D \
404*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGND)
405*4882a593Smuzhiyun #define QLA82XX_CRB_PEG_NET_I \
406*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_PGNI)
407*4882a593Smuzhiyun #define QLA82XX_CRB_PQM_MD \
408*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMS)
409*4882a593Smuzhiyun #define QLA82XX_CRB_PQM_NET \
410*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_QMN)
411*4882a593Smuzhiyun #define QLA82XX_CRB_QDR_MD \
412*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SS)
413*4882a593Smuzhiyun #define QLA82XX_CRB_QDR_NET \
414*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SN)
415*4882a593Smuzhiyun #define QLA82XX_CRB_ROMUSB \
416*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_ROMUSB)
417*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_0 \
418*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX0)
419*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_1 \
420*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX1)
421*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_2 \
422*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX2)
423*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_3 \
424*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX3)
425*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_4 \
426*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX4)
427*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_5 \
428*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX5)
429*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_6 \
430*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX6)
431*4882a593Smuzhiyun #define QLA82XX_CRB_RPMX_7 \
432*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_RPMX7)
433*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_0 \
434*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS0)
435*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_1 \
436*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS1)
437*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_2 \
438*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS2)
439*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_MD_3 \
440*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQS3)
441*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_0 \
442*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN0)
443*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_1 \
444*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN1)
445*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_2 \
446*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN2)
447*4882a593Smuzhiyun #define QLA82XX_CRB_SQM_NET_3 \
448*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SQN3)
449*4882a593Smuzhiyun #define QLA82XX_CRB_SRE \
450*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SRE)
451*4882a593Smuzhiyun #define QLA82XX_CRB_TIMER \
452*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_TIMR)
453*4882a593Smuzhiyun #define QLA82XX_CRB_XDMA \
454*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_XDMA)
455*4882a593Smuzhiyun #define QLA82XX_CRB_I2C0 \
456*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C0)
457*4882a593Smuzhiyun #define QLA82XX_CRB_I2C1 \
458*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_I2C1)
459*4882a593Smuzhiyun #define QLA82XX_CRB_OCM0 \
460*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_OCM0)
461*4882a593Smuzhiyun #define QLA82XX_CRB_SMB \
462*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(QLA82XX_HW_PX_MAP_CRB_SMB)
463*4882a593Smuzhiyun #define QLA82XX_CRB_MAX \
464*4882a593Smuzhiyun 	QLA82XX_PCI_CRB_WINDOW(64)
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun /*
467*4882a593Smuzhiyun  * ====================== BASE ADDRESSES ON-CHIP ======================
468*4882a593Smuzhiyun  * Base addresses of major components on-chip.
469*4882a593Smuzhiyun  * ====================== BASE ADDRESSES ON-CHIP ======================
470*4882a593Smuzhiyun  */
471*4882a593Smuzhiyun #define QLA82XX_ADDR_DDR_NET		(0x0000000000000000ULL)
472*4882a593Smuzhiyun #define QLA82XX_ADDR_DDR_NET_MAX	(0x000000000fffffffULL)
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun /* Imbus address bit used to indicate a host address. This bit is
475*4882a593Smuzhiyun  * eliminated by the pcie bar and bar select before presentation
476*4882a593Smuzhiyun  * over pcie. */
477*4882a593Smuzhiyun /* host memory via IMBUS */
478*4882a593Smuzhiyun #define QLA82XX_P2_ADDR_PCIE		(0x0000000800000000ULL)
479*4882a593Smuzhiyun #define QLA82XX_P3_ADDR_PCIE		(0x0000008000000000ULL)
480*4882a593Smuzhiyun #define QLA82XX_ADDR_PCIE_MAX		(0x0000000FFFFFFFFFULL)
481*4882a593Smuzhiyun #define QLA82XX_ADDR_OCM0		(0x0000000200000000ULL)
482*4882a593Smuzhiyun #define QLA82XX_ADDR_OCM0_MAX		(0x00000002000fffffULL)
483*4882a593Smuzhiyun #define QLA82XX_ADDR_OCM1		(0x0000000200400000ULL)
484*4882a593Smuzhiyun #define QLA82XX_ADDR_OCM1_MAX		(0x00000002004fffffULL)
485*4882a593Smuzhiyun #define QLA82XX_ADDR_QDR_NET		(0x0000000300000000ULL)
486*4882a593Smuzhiyun #define QLA82XX_P3_ADDR_QDR_NET_MAX	(0x0000000303ffffffULL)
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun #define QLA82XX_PCI_CRBSPACE		0x06000000UL
489*4882a593Smuzhiyun #define QLA82XX_PCI_DIRECT_CRB		0x04400000UL
490*4882a593Smuzhiyun #define QLA82XX_PCI_CAMQM		0x04800000UL
491*4882a593Smuzhiyun #define QLA82XX_PCI_CAMQM_MAX		0x04ffffffUL
492*4882a593Smuzhiyun #define QLA82XX_PCI_DDR_NET		0x00000000UL
493*4882a593Smuzhiyun #define QLA82XX_PCI_QDR_NET		0x04000000UL
494*4882a593Smuzhiyun #define QLA82XX_PCI_QDR_NET_MAX		0x043fffffUL
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun /*
497*4882a593Smuzhiyun  *   Register offsets for MN
498*4882a593Smuzhiyun  */
499*4882a593Smuzhiyun #define MIU_CONTROL			(0x000)
500*4882a593Smuzhiyun #define MIU_TAG				(0x004)
501*4882a593Smuzhiyun #define MIU_TEST_AGT_CTRL		(0x090)
502*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_LO		(0x094)
503*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_HI		(0x098)
504*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_LO		(0x0a0)
505*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_HI		(0x0a4)
506*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA(i)		(0x0a0+(4*(i)))
507*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA_LO		(0x0a8)
508*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA_HI		(0x0ac)
509*4882a593Smuzhiyun #define MIU_TEST_AGT_RDDATA(i)		(0x0a8+(4*(i)))
510*4882a593Smuzhiyun #define MIU_TEST_AGT_ADDR_MASK		0xfffffff8
511*4882a593Smuzhiyun #define MIU_TEST_AGT_UPPER_ADDR(off)	(0)
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun /* MIU_TEST_AGT_CTRL flags. work for SIU as well */
514*4882a593Smuzhiyun #define MIU_TA_CTL_START	1
515*4882a593Smuzhiyun #define MIU_TA_CTL_ENABLE	2
516*4882a593Smuzhiyun #define MIU_TA_CTL_WRITE	4
517*4882a593Smuzhiyun #define MIU_TA_CTL_BUSY		8
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun /*CAM RAM */
520*4882a593Smuzhiyun # define QLA82XX_CAM_RAM_BASE		(QLA82XX_CRB_CAM + 0x02000)
521*4882a593Smuzhiyun # define QLA82XX_CAM_RAM(reg)		(QLA82XX_CAM_RAM_BASE + (reg))
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun #define QLA82XX_PORT_MODE_ADDR		(QLA82XX_CAM_RAM(0x24))
524*4882a593Smuzhiyun #define QLA82XX_PEG_HALT_STATUS1	(QLA82XX_CAM_RAM(0xa8))
525*4882a593Smuzhiyun #define QLA82XX_PEG_HALT_STATUS2	(QLA82XX_CAM_RAM(0xac))
526*4882a593Smuzhiyun #define QLA82XX_PEG_ALIVE_COUNTER	(QLA82XX_CAM_RAM(0xb0))
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun #define QLA82XX_CAMRAM_DB1		(QLA82XX_CAM_RAM(0x1b8))
529*4882a593Smuzhiyun #define QLA82XX_CAMRAM_DB2		(QLA82XX_CAM_RAM(0x1bc))
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun #define HALT_STATUS_UNRECOVERABLE	0x80000000
532*4882a593Smuzhiyun #define HALT_STATUS_RECOVERABLE		0x40000000
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun /* Driver Coexistence Defines */
535*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_ACTIVE	     (QLA82XX_CAM_RAM(0x138))
536*4882a593Smuzhiyun #define QLA82XX_CRB_DEV_STATE	     (QLA82XX_CAM_RAM(0x140))
537*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_STATE	     (QLA82XX_CAM_RAM(0x144))
538*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_SCRATCH      (QLA82XX_CAM_RAM(0x148))
539*4882a593Smuzhiyun #define QLA82XX_CRB_DEV_PART_INFO    (QLA82XX_CAM_RAM(0x14c))
540*4882a593Smuzhiyun #define QLA82XX_CRB_DRV_IDC_VERSION  (QLA82XX_CAM_RAM(0x174))
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun /* Every driver should use these Device State */
543*4882a593Smuzhiyun #define QLA8XXX_DEV_COLD		1
544*4882a593Smuzhiyun #define QLA8XXX_DEV_INITIALIZING	2
545*4882a593Smuzhiyun #define QLA8XXX_DEV_READY		3
546*4882a593Smuzhiyun #define QLA8XXX_DEV_NEED_RESET		4
547*4882a593Smuzhiyun #define QLA8XXX_DEV_NEED_QUIESCENT	5
548*4882a593Smuzhiyun #define QLA8XXX_DEV_FAILED		6
549*4882a593Smuzhiyun #define QLA8XXX_DEV_QUIESCENT		7
550*4882a593Smuzhiyun #define	MAX_STATES			8 /* Increment if new state added */
551*4882a593Smuzhiyun #define QLA8XXX_BAD_VALUE		0xbad0bad0
552*4882a593Smuzhiyun 
553*4882a593Smuzhiyun #define QLA82XX_IDC_VERSION			1
554*4882a593Smuzhiyun #define QLA82XX_ROM_DEV_INIT_TIMEOUT		30
555*4882a593Smuzhiyun #define QLA82XX_ROM_DRV_RESET_ACK_TIMEOUT	10
556*4882a593Smuzhiyun 
557*4882a593Smuzhiyun #define QLA82XX_ROM_LOCK_ID		(QLA82XX_CAM_RAM(0x100))
558*4882a593Smuzhiyun #define QLA82XX_CRB_WIN_LOCK_ID		(QLA82XX_CAM_RAM(0x124))
559*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_MAJOR	(QLA82XX_CAM_RAM(0x150))
560*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_MINOR	(QLA82XX_CAM_RAM(0x154))
561*4882a593Smuzhiyun #define QLA82XX_FW_VERSION_SUB		(QLA82XX_CAM_RAM(0x158))
562*4882a593Smuzhiyun #define QLA82XX_PCIE_REG(reg)		(QLA82XX_CRB_PCIE + (reg))
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION		(0x12040)
565*4882a593Smuzhiyun #define PCIE_SETUP_FUNCTION2		(0x12048)
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun #define QLA82XX_PCIX_PS_REG(reg)	(QLA82XX_CRB_PCIX_MD + (reg))
568*4882a593Smuzhiyun #define QLA82XX_PCIX_PS2_REG(reg)	(QLA82XX_CRB_PCIE2 + (reg))
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun #define PCIE_SEM2_LOCK	     (0x1c010)	/* Flash lock	*/
571*4882a593Smuzhiyun #define PCIE_SEM2_UNLOCK     (0x1c014)	/* Flash unlock */
572*4882a593Smuzhiyun #define PCIE_SEM5_LOCK	     (0x1c028)	/* Coexistence lock   */
573*4882a593Smuzhiyun #define PCIE_SEM5_UNLOCK     (0x1c02c)	/* Coexistence unlock */
574*4882a593Smuzhiyun #define PCIE_SEM7_LOCK	     (0x1c038)	/* crb win lock */
575*4882a593Smuzhiyun #define PCIE_SEM7_UNLOCK     (0x1c03c)	/* crbwin unlock*/
576*4882a593Smuzhiyun 
577*4882a593Smuzhiyun /* Different drive state */
578*4882a593Smuzhiyun #define QLA82XX_DRVST_NOT_RDY		0
579*4882a593Smuzhiyun #define	QLA82XX_DRVST_RST_RDY		1
580*4882a593Smuzhiyun #define QLA82XX_DRVST_QSNT_RDY		2
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun /* Different drive active state */
583*4882a593Smuzhiyun #define QLA82XX_DRV_NOT_ACTIVE		0
584*4882a593Smuzhiyun #define QLA82XX_DRV_ACTIVE		1
585*4882a593Smuzhiyun 
586*4882a593Smuzhiyun /*
587*4882a593Smuzhiyun  * The PCI VendorID and DeviceID for our board.
588*4882a593Smuzhiyun  */
589*4882a593Smuzhiyun #define PCI_DEVICE_ID_QLOGIC_ISP8021		0x8021
590*4882a593Smuzhiyun #define PCI_DEVICE_ID_QLOGIC_ISP8044		0x8044
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun #define QLA82XX_MSIX_TBL_SPACE			8192
593*4882a593Smuzhiyun #define QLA82XX_PCI_REG_MSIX_TBL		0x44
594*4882a593Smuzhiyun #define QLA82XX_PCI_MSIX_CONTROL		0x40
595*4882a593Smuzhiyun 
596*4882a593Smuzhiyun struct crb_128M_2M_sub_block_map {
597*4882a593Smuzhiyun 	unsigned valid;
598*4882a593Smuzhiyun 	unsigned start_128M;
599*4882a593Smuzhiyun 	unsigned end_128M;
600*4882a593Smuzhiyun 	unsigned start_2M;
601*4882a593Smuzhiyun };
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun struct crb_128M_2M_block_map {
604*4882a593Smuzhiyun 	struct crb_128M_2M_sub_block_map sub_block[16];
605*4882a593Smuzhiyun };
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun struct crb_addr_pair {
608*4882a593Smuzhiyun 	long addr;
609*4882a593Smuzhiyun 	long data;
610*4882a593Smuzhiyun };
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun #define ADDR_ERROR ((unsigned long) 0xffffffff)
613*4882a593Smuzhiyun #define MAX_CTL_CHECK	1000
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun /***************************************************************************
616*4882a593Smuzhiyun  *		PCI related defines.
617*4882a593Smuzhiyun  **************************************************************************/
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun /*
620*4882a593Smuzhiyun  * Interrupt related defines.
621*4882a593Smuzhiyun  */
622*4882a593Smuzhiyun #define PCIX_TARGET_STATUS	(0x10118)
623*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F1	(0x10160)
624*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F2	(0x10164)
625*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F3	(0x10168)
626*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F4	(0x10360)
627*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F5	(0x10364)
628*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F6	(0x10368)
629*4882a593Smuzhiyun #define PCIX_TARGET_STATUS_F7	(0x1036c)
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun #define PCIX_TARGET_MASK	(0x10128)
632*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F1	(0x10170)
633*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F2	(0x10174)
634*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F3	(0x10178)
635*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F4	(0x10370)
636*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F5	(0x10374)
637*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F6	(0x10378)
638*4882a593Smuzhiyun #define PCIX_TARGET_MASK_F7	(0x1037c)
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun /*
641*4882a593Smuzhiyun  * Message Signaled Interrupts
642*4882a593Smuzhiyun  */
643*4882a593Smuzhiyun #define PCIX_MSI_F0		(0x13000)
644*4882a593Smuzhiyun #define PCIX_MSI_F1		(0x13004)
645*4882a593Smuzhiyun #define PCIX_MSI_F2		(0x13008)
646*4882a593Smuzhiyun #define PCIX_MSI_F3		(0x1300c)
647*4882a593Smuzhiyun #define PCIX_MSI_F4		(0x13010)
648*4882a593Smuzhiyun #define PCIX_MSI_F5		(0x13014)
649*4882a593Smuzhiyun #define PCIX_MSI_F6		(0x13018)
650*4882a593Smuzhiyun #define PCIX_MSI_F7		(0x1301c)
651*4882a593Smuzhiyun #define PCIX_MSI_F(FUNC)	(0x13000 + ((FUNC) * 4))
652*4882a593Smuzhiyun #define PCIX_INT_VECTOR		(0x10100)
653*4882a593Smuzhiyun #define PCIX_INT_MASK		(0x10104)
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun /*
656*4882a593Smuzhiyun  * Interrupt state machine and other bits.
657*4882a593Smuzhiyun  */
658*4882a593Smuzhiyun #define PCIE_MISCCFG_RC		(0x1206c)
659*4882a593Smuzhiyun 
660*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS \
661*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS))
662*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F1 \
663*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F1))
664*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F2 \
665*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F2))
666*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F3 \
667*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F3))
668*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F4 \
669*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F4))
670*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F5 \
671*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F5))
672*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F6 \
673*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F6))
674*4882a593Smuzhiyun #define ISR_INT_TARGET_STATUS_F7 \
675*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_STATUS_F7))
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK \
678*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK))
679*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F1 \
680*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F1))
681*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F2 \
682*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F2))
683*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F3 \
684*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F3))
685*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F4 \
686*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F4))
687*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F5 \
688*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F5))
689*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F6 \
690*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F6))
691*4882a593Smuzhiyun #define ISR_INT_TARGET_MASK_F7 \
692*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_TARGET_MASK_F7))
693*4882a593Smuzhiyun 
694*4882a593Smuzhiyun #define ISR_INT_VECTOR \
695*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_INT_VECTOR))
696*4882a593Smuzhiyun #define ISR_INT_MASK \
697*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_INT_MASK))
698*4882a593Smuzhiyun #define ISR_INT_STATE_REG \
699*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIE_MISCCFG_RC))
700*4882a593Smuzhiyun 
701*4882a593Smuzhiyun #define	ISR_MSI_INT_TRIGGER(FUNC) \
702*4882a593Smuzhiyun 	(QLA82XX_PCIX_PS_REG(PCIX_MSI_F(FUNC)))
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun #define	ISR_IS_LEGACY_INTR_IDLE(VAL)		(((VAL) & 0x300) == 0)
705*4882a593Smuzhiyun #define	ISR_IS_LEGACY_INTR_TRIGGERED(VAL)	(((VAL) & 0x300) == 0x200)
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun /*
708*4882a593Smuzhiyun  * PCI Interrupt Vector Values.
709*4882a593Smuzhiyun  */
710*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F0	0x0080
711*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F1	0x0100
712*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F2	0x0200
713*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F3	0x0400
714*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F4	0x0800
715*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F5	0x1000
716*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F6	0x2000
717*4882a593Smuzhiyun #define	PCIX_INT_VECTOR_BIT_F7	0x4000
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun struct qla82xx_legacy_intr_set {
720*4882a593Smuzhiyun 	uint32_t	int_vec_bit;
721*4882a593Smuzhiyun 	uint32_t	tgt_status_reg;
722*4882a593Smuzhiyun 	uint32_t	tgt_mask_reg;
723*4882a593Smuzhiyun 	uint32_t	pci_int_reg;
724*4882a593Smuzhiyun };
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun #define QLA82XX_LEGACY_INTR_CONFIG					\
727*4882a593Smuzhiyun {									\
728*4882a593Smuzhiyun 	{								\
729*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F0,		\
730*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS,		\
731*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK,		\
732*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(0) },	\
733*4882a593Smuzhiyun 									\
734*4882a593Smuzhiyun 	{								\
735*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F1,		\
736*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F1,	\
737*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F1,		\
738*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(1) },	\
739*4882a593Smuzhiyun 									\
740*4882a593Smuzhiyun 	{								\
741*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F2,		\
742*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F2,	\
743*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F2,		\
744*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(2) },	\
745*4882a593Smuzhiyun 									\
746*4882a593Smuzhiyun 	{								\
747*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F3,		\
748*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F3,	\
749*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F3,		\
750*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(3) },	\
751*4882a593Smuzhiyun 									\
752*4882a593Smuzhiyun 	{								\
753*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F4,		\
754*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F4,	\
755*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F4,		\
756*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(4) },	\
757*4882a593Smuzhiyun 									\
758*4882a593Smuzhiyun 	{								\
759*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F5,		\
760*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F5,	\
761*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F5,		\
762*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(5) },	\
763*4882a593Smuzhiyun 									\
764*4882a593Smuzhiyun 	{								\
765*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F6,		\
766*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F6,	\
767*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F6,		\
768*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(6) },	\
769*4882a593Smuzhiyun 									\
770*4882a593Smuzhiyun 	{								\
771*4882a593Smuzhiyun 		.int_vec_bit	=	PCIX_INT_VECTOR_BIT_F7,		\
772*4882a593Smuzhiyun 		.tgt_status_reg =	ISR_INT_TARGET_STATUS_F7,	\
773*4882a593Smuzhiyun 		.tgt_mask_reg	=	ISR_INT_TARGET_MASK_F7,		\
774*4882a593Smuzhiyun 		.pci_int_reg	=	ISR_MSI_INT_TRIGGER(7) },	\
775*4882a593Smuzhiyun }
776*4882a593Smuzhiyun 
777*4882a593Smuzhiyun #define BRDCFG_START		0x4000
778*4882a593Smuzhiyun #define	BOOTLD_START		0x10000
779*4882a593Smuzhiyun #define	IMAGE_START		0x100000
780*4882a593Smuzhiyun #define FLASH_ADDR_START	0x43000
781*4882a593Smuzhiyun 
782*4882a593Smuzhiyun /* Magic number to let user know flash is programmed */
783*4882a593Smuzhiyun #define QLA82XX_BDINFO_MAGIC	0x12345678
784*4882a593Smuzhiyun #define QLA82XX_FW_MAGIC_OFFSET	(BRDCFG_START + 0x128)
785*4882a593Smuzhiyun #define FW_SIZE_OFFSET		(0x3e840c)
786*4882a593Smuzhiyun #define QLA82XX_FW_MIN_SIZE	0x3fffff
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun /* UNIFIED ROMIMAGE START */
789*4882a593Smuzhiyun #define QLA82XX_URI_FW_MIN_SIZE			0xc8000
790*4882a593Smuzhiyun #define QLA82XX_URI_DIR_SECT_PRODUCT_TBL	0x0
791*4882a593Smuzhiyun #define QLA82XX_URI_DIR_SECT_BOOTLD		0x6
792*4882a593Smuzhiyun #define QLA82XX_URI_DIR_SECT_FW			0x7
793*4882a593Smuzhiyun 
794*4882a593Smuzhiyun /* Offsets */
795*4882a593Smuzhiyun #define QLA82XX_URI_CHIP_REV_OFF	10
796*4882a593Smuzhiyun #define QLA82XX_URI_FLAGS_OFF		11
797*4882a593Smuzhiyun #define QLA82XX_URI_BIOS_VERSION_OFF	12
798*4882a593Smuzhiyun #define QLA82XX_URI_BOOTLD_IDX_OFF	27
799*4882a593Smuzhiyun #define QLA82XX_URI_FIRMWARE_IDX_OFF	29
800*4882a593Smuzhiyun 
801*4882a593Smuzhiyun struct qla82xx_uri_table_desc{
802*4882a593Smuzhiyun 	__le32	findex;
803*4882a593Smuzhiyun 	__le32	num_entries;
804*4882a593Smuzhiyun 	__le32	entry_size;
805*4882a593Smuzhiyun 	__le32	reserved[5];
806*4882a593Smuzhiyun };
807*4882a593Smuzhiyun 
808*4882a593Smuzhiyun struct qla82xx_uri_data_desc{
809*4882a593Smuzhiyun 	__le32	findex;
810*4882a593Smuzhiyun 	__le32	size;
811*4882a593Smuzhiyun 	__le32	reserved[5];
812*4882a593Smuzhiyun };
813*4882a593Smuzhiyun 
814*4882a593Smuzhiyun /* UNIFIED ROMIMAGE END */
815*4882a593Smuzhiyun 
816*4882a593Smuzhiyun #define QLA82XX_UNIFIED_ROMIMAGE	3
817*4882a593Smuzhiyun #define QLA82XX_FLASH_ROMIMAGE		4
818*4882a593Smuzhiyun #define QLA82XX_UNKNOWN_ROMIMAGE	0xff
819*4882a593Smuzhiyun 
820*4882a593Smuzhiyun #define MIU_TEST_AGT_WRDATA_UPPER_LO		(0x0b0)
821*4882a593Smuzhiyun #define	MIU_TEST_AGT_WRDATA_UPPER_HI		(0x0b4)
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun /* Request and response queue size */
824*4882a593Smuzhiyun #define REQUEST_ENTRY_CNT_82XX		128	/* Number of request entries. */
825*4882a593Smuzhiyun #define RESPONSE_ENTRY_CNT_82XX		128	/* Number of response entries.*/
826*4882a593Smuzhiyun 
827*4882a593Smuzhiyun /*
828*4882a593Smuzhiyun  * ISP 8021 I/O Register Set structure definitions.
829*4882a593Smuzhiyun  */
830*4882a593Smuzhiyun struct device_reg_82xx {
831*4882a593Smuzhiyun 	__le32	req_q_out[64];		/* Request Queue out-Pointer (64 * 4) */
832*4882a593Smuzhiyun 	__le32	rsp_q_in[64];		/* Response Queue In-Pointer. */
833*4882a593Smuzhiyun 	__le32	rsp_q_out[64];		/* Response Queue Out-Pointer. */
834*4882a593Smuzhiyun 
835*4882a593Smuzhiyun 	__le16	mailbox_in[32];		/* Mailbox In registers */
836*4882a593Smuzhiyun 	__le16	unused_1[32];
837*4882a593Smuzhiyun 	__le32	hint;			/* Host interrupt register */
838*4882a593Smuzhiyun #define	HINT_MBX_INT_PENDING	BIT_0
839*4882a593Smuzhiyun 	__le16	unused_2[62];
840*4882a593Smuzhiyun 	__le16	mailbox_out[32];	/* Mailbox Out registers */
841*4882a593Smuzhiyun 	__le32	unused_3[48];
842*4882a593Smuzhiyun 
843*4882a593Smuzhiyun 	__le32	host_status;		/* host status */
844*4882a593Smuzhiyun #define HSRX_RISC_INT		BIT_15	/* RISC to Host interrupt. */
845*4882a593Smuzhiyun #define HSRX_RISC_PAUSED	BIT_8	/* RISC Paused. */
846*4882a593Smuzhiyun 	__le32	host_int;		/* Interrupt status. */
847*4882a593Smuzhiyun #define ISRX_NX_RISC_INT	BIT_0	/* RISC interrupt. */
848*4882a593Smuzhiyun };
849*4882a593Smuzhiyun 
850*4882a593Smuzhiyun struct fcp_cmnd {
851*4882a593Smuzhiyun 	struct scsi_lun lun;
852*4882a593Smuzhiyun 	uint8_t crn;
853*4882a593Smuzhiyun 	uint8_t task_attribute;
854*4882a593Smuzhiyun 	uint8_t task_management;
855*4882a593Smuzhiyun 	uint8_t additional_cdb_len;
856*4882a593Smuzhiyun 	uint8_t cdb[260]; /* 256 for CDB len and 4 for FCP_DL */
857*4882a593Smuzhiyun };
858*4882a593Smuzhiyun 
859*4882a593Smuzhiyun struct dsd_dma {
860*4882a593Smuzhiyun 	struct list_head list;
861*4882a593Smuzhiyun 	dma_addr_t dsd_list_dma;
862*4882a593Smuzhiyun 	void *dsd_addr;
863*4882a593Smuzhiyun };
864*4882a593Smuzhiyun 
865*4882a593Smuzhiyun #define QLA_DSDS_PER_IOCB	37
866*4882a593Smuzhiyun #define QLA_DSD_SIZE		12
867*4882a593Smuzhiyun struct ct6_dsd {
868*4882a593Smuzhiyun 	uint16_t fcp_cmnd_len;
869*4882a593Smuzhiyun 	dma_addr_t fcp_cmnd_dma;
870*4882a593Smuzhiyun 	struct fcp_cmnd *fcp_cmnd;
871*4882a593Smuzhiyun 	int dsd_use_cnt;
872*4882a593Smuzhiyun 	struct list_head dsd_list;
873*4882a593Smuzhiyun };
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun #define MBC_TOGGLE_INTERRUPT	0x10
876*4882a593Smuzhiyun #define MBC_SET_LED_CONFIG	0x125	/* FCoE specific LED control */
877*4882a593Smuzhiyun #define MBC_GET_LED_CONFIG	0x126	/* FCoE specific LED control */
878*4882a593Smuzhiyun 
879*4882a593Smuzhiyun /* Flash  offset */
880*4882a593Smuzhiyun #define FLT_REG_BOOTLOAD_82XX	0x72
881*4882a593Smuzhiyun #define FLT_REG_BOOT_CODE_82XX	0x78
882*4882a593Smuzhiyun #define FLT_REG_FW_82XX		0x74
883*4882a593Smuzhiyun #define FLT_REG_GOLD_FW_82XX	0x75
884*4882a593Smuzhiyun #define FLT_REG_VPD_8XXX	0x81
885*4882a593Smuzhiyun 
886*4882a593Smuzhiyun #define	FA_VPD_SIZE_82XX	0x400
887*4882a593Smuzhiyun 
888*4882a593Smuzhiyun #define FA_FLASH_LAYOUT_ADDR_82	0xFC400
889*4882a593Smuzhiyun 
890*4882a593Smuzhiyun /******************************************************************************
891*4882a593Smuzhiyun *
892*4882a593Smuzhiyun *    Definitions specific to M25P flash
893*4882a593Smuzhiyun *
894*4882a593Smuzhiyun *******************************************************************************
895*4882a593Smuzhiyun *   Instructions
896*4882a593Smuzhiyun */
897*4882a593Smuzhiyun #define M25P_INSTR_WREN		0x06
898*4882a593Smuzhiyun #define M25P_INSTR_WRDI		0x04
899*4882a593Smuzhiyun #define M25P_INSTR_RDID		0x9f
900*4882a593Smuzhiyun #define M25P_INSTR_RDSR		0x05
901*4882a593Smuzhiyun #define M25P_INSTR_WRSR		0x01
902*4882a593Smuzhiyun #define M25P_INSTR_READ		0x03
903*4882a593Smuzhiyun #define M25P_INSTR_FAST_READ	0x0b
904*4882a593Smuzhiyun #define M25P_INSTR_PP		0x02
905*4882a593Smuzhiyun #define M25P_INSTR_SE		0xd8
906*4882a593Smuzhiyun #define M25P_INSTR_BE		0xc7
907*4882a593Smuzhiyun #define M25P_INSTR_DP		0xb9
908*4882a593Smuzhiyun #define M25P_INSTR_RES		0xab
909*4882a593Smuzhiyun 
910*4882a593Smuzhiyun /* Minidump related */
911*4882a593Smuzhiyun 
912*4882a593Smuzhiyun /*
913*4882a593Smuzhiyun  * Version of the template
914*4882a593Smuzhiyun  * 4 Bytes
915*4882a593Smuzhiyun  * X.Major.Minor.RELEASE
916*4882a593Smuzhiyun  */
917*4882a593Smuzhiyun #define QLA82XX_MINIDUMP_VERSION         0x10101
918*4882a593Smuzhiyun 
919*4882a593Smuzhiyun /*
920*4882a593Smuzhiyun  * Entry Type Defines
921*4882a593Smuzhiyun  */
922*4882a593Smuzhiyun #define QLA82XX_RDNOP                   0
923*4882a593Smuzhiyun #define QLA82XX_RDCRB                   1
924*4882a593Smuzhiyun #define QLA82XX_RDMUX                   2
925*4882a593Smuzhiyun #define QLA82XX_QUEUE                   3
926*4882a593Smuzhiyun #define QLA82XX_BOARD                   4
927*4882a593Smuzhiyun #define QLA82XX_RDSRE                   5
928*4882a593Smuzhiyun #define QLA82XX_RDOCM                   6
929*4882a593Smuzhiyun #define QLA82XX_CACHE                  10
930*4882a593Smuzhiyun #define QLA82XX_L1DAT                  11
931*4882a593Smuzhiyun #define QLA82XX_L1INS                  12
932*4882a593Smuzhiyun #define QLA82XX_L2DTG                  21
933*4882a593Smuzhiyun #define QLA82XX_L2ITG                  22
934*4882a593Smuzhiyun #define QLA82XX_L2DAT                  23
935*4882a593Smuzhiyun #define QLA82XX_L2INS                  24
936*4882a593Smuzhiyun #define QLA82XX_RDROM                  71
937*4882a593Smuzhiyun #define QLA82XX_RDMEM                  72
938*4882a593Smuzhiyun #define QLA82XX_CNTRL                  98
939*4882a593Smuzhiyun #define QLA82XX_TLHDR                  99
940*4882a593Smuzhiyun #define QLA82XX_RDEND                  255
941*4882a593Smuzhiyun #define QLA8044_POLLRD			35
942*4882a593Smuzhiyun #define QLA8044_RDMUX2			36
943*4882a593Smuzhiyun #define QLA8044_L1DTG			8
944*4882a593Smuzhiyun #define QLA8044_L1ITG			9
945*4882a593Smuzhiyun #define QLA8044_POLLRDMWR		37
946*4882a593Smuzhiyun 
947*4882a593Smuzhiyun /*
948*4882a593Smuzhiyun  * Opcodes for Control Entries.
949*4882a593Smuzhiyun  * These Flags are bit fields.
950*4882a593Smuzhiyun  */
951*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_WR        0x01
952*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_RW        0x02
953*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_AND       0x04
954*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_OR        0x08
955*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_POLL      0x10
956*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_RDSTATE   0x20
957*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_WRSTATE   0x40
958*4882a593Smuzhiyun #define QLA82XX_DBG_OPCODE_MDSTATE   0x80
959*4882a593Smuzhiyun 
960*4882a593Smuzhiyun /*
961*4882a593Smuzhiyun  * Template Header and Entry Header definitions start here.
962*4882a593Smuzhiyun  */
963*4882a593Smuzhiyun 
964*4882a593Smuzhiyun /*
965*4882a593Smuzhiyun  * Template Header
966*4882a593Smuzhiyun  * Parts of the template header can be modified by the driver.
967*4882a593Smuzhiyun  * These include the saved_state_array, capture_debug_level, driver_timestamp
968*4882a593Smuzhiyun  */
969*4882a593Smuzhiyun 
970*4882a593Smuzhiyun #define QLA82XX_DBG_STATE_ARRAY_LEN        16
971*4882a593Smuzhiyun #define QLA82XX_DBG_CAP_SIZE_ARRAY_LEN     8
972*4882a593Smuzhiyun #define QLA82XX_DBG_RSVD_ARRAY_LEN         8
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun /*
975*4882a593Smuzhiyun  * Driver Flags
976*4882a593Smuzhiyun  */
977*4882a593Smuzhiyun #define QLA82XX_DBG_SKIPPED_FLAG	0x80	/* driver skipped this entry */
978*4882a593Smuzhiyun #define	QLA82XX_DEFAULT_CAP_MASK	0xFF	/* default capture mask */
979*4882a593Smuzhiyun 
980*4882a593Smuzhiyun struct qla82xx_md_template_hdr {
981*4882a593Smuzhiyun 	uint32_t entry_type;
982*4882a593Smuzhiyun 	uint32_t first_entry_offset;
983*4882a593Smuzhiyun 	uint32_t size_of_template;
984*4882a593Smuzhiyun 	uint32_t capture_debug_level;
985*4882a593Smuzhiyun 
986*4882a593Smuzhiyun 	uint32_t num_of_entries;
987*4882a593Smuzhiyun 	uint32_t version;
988*4882a593Smuzhiyun 	uint32_t driver_timestamp;
989*4882a593Smuzhiyun 	uint32_t template_checksum;
990*4882a593Smuzhiyun 
991*4882a593Smuzhiyun 	uint32_t driver_capture_mask;
992*4882a593Smuzhiyun 	uint32_t driver_info[3];
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun 	uint32_t saved_state_array[QLA82XX_DBG_STATE_ARRAY_LEN];
995*4882a593Smuzhiyun 	uint32_t capture_size_array[QLA82XX_DBG_CAP_SIZE_ARRAY_LEN];
996*4882a593Smuzhiyun 
997*4882a593Smuzhiyun 	/*  markers_array used to capture some special locations on board */
998*4882a593Smuzhiyun 	uint32_t markers_array[QLA82XX_DBG_RSVD_ARRAY_LEN];
999*4882a593Smuzhiyun 	uint32_t num_of_free_entries;	/* For internal use */
1000*4882a593Smuzhiyun 	uint32_t free_entry_offset;	/* For internal use */
1001*4882a593Smuzhiyun 	uint32_t total_table_size;	/*  For internal use */
1002*4882a593Smuzhiyun 	uint32_t bkup_table_offset;	/*  For internal use */
1003*4882a593Smuzhiyun } __packed;
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun /*
1006*4882a593Smuzhiyun  * Entry Header:  Common to All Entry Types
1007*4882a593Smuzhiyun  */
1008*4882a593Smuzhiyun 
1009*4882a593Smuzhiyun /*
1010*4882a593Smuzhiyun  * Driver Code is for driver to write some info about the entry.
1011*4882a593Smuzhiyun  * Currently not used.
1012*4882a593Smuzhiyun  */
1013*4882a593Smuzhiyun typedef struct qla82xx_md_entry_hdr {
1014*4882a593Smuzhiyun 	uint32_t entry_type;
1015*4882a593Smuzhiyun 	uint32_t entry_size;
1016*4882a593Smuzhiyun 	uint32_t entry_capture_size;
1017*4882a593Smuzhiyun 	struct {
1018*4882a593Smuzhiyun 		uint8_t entry_capture_mask;
1019*4882a593Smuzhiyun 		uint8_t entry_code;
1020*4882a593Smuzhiyun 		uint8_t driver_code;
1021*4882a593Smuzhiyun 		uint8_t driver_flags;
1022*4882a593Smuzhiyun 	} d_ctrl;
1023*4882a593Smuzhiyun } __packed qla82xx_md_entry_hdr_t;
1024*4882a593Smuzhiyun 
1025*4882a593Smuzhiyun /*
1026*4882a593Smuzhiyun  *  Read CRB entry header
1027*4882a593Smuzhiyun  */
1028*4882a593Smuzhiyun struct qla82xx_md_entry_crb {
1029*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1030*4882a593Smuzhiyun 	uint32_t addr;
1031*4882a593Smuzhiyun 	struct {
1032*4882a593Smuzhiyun 		uint8_t addr_stride;
1033*4882a593Smuzhiyun 		uint8_t state_index_a;
1034*4882a593Smuzhiyun 		uint16_t poll_timeout;
1035*4882a593Smuzhiyun 	} crb_strd;
1036*4882a593Smuzhiyun 
1037*4882a593Smuzhiyun 	uint32_t data_size;
1038*4882a593Smuzhiyun 	uint32_t op_count;
1039*4882a593Smuzhiyun 
1040*4882a593Smuzhiyun 	struct {
1041*4882a593Smuzhiyun 		uint8_t opcode;
1042*4882a593Smuzhiyun 		uint8_t state_index_v;
1043*4882a593Smuzhiyun 		uint8_t shl;
1044*4882a593Smuzhiyun 		uint8_t shr;
1045*4882a593Smuzhiyun 	} crb_ctrl;
1046*4882a593Smuzhiyun 
1047*4882a593Smuzhiyun 	uint32_t value_1;
1048*4882a593Smuzhiyun 	uint32_t value_2;
1049*4882a593Smuzhiyun 	uint32_t value_3;
1050*4882a593Smuzhiyun } __packed;
1051*4882a593Smuzhiyun 
1052*4882a593Smuzhiyun /*
1053*4882a593Smuzhiyun  * Cache entry header
1054*4882a593Smuzhiyun  */
1055*4882a593Smuzhiyun struct qla82xx_md_entry_cache {
1056*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1057*4882a593Smuzhiyun 
1058*4882a593Smuzhiyun 	uint32_t tag_reg_addr;
1059*4882a593Smuzhiyun 	struct {
1060*4882a593Smuzhiyun 		uint16_t tag_value_stride;
1061*4882a593Smuzhiyun 		uint16_t init_tag_value;
1062*4882a593Smuzhiyun 	} addr_ctrl;
1063*4882a593Smuzhiyun 
1064*4882a593Smuzhiyun 	uint32_t data_size;
1065*4882a593Smuzhiyun 	uint32_t op_count;
1066*4882a593Smuzhiyun 
1067*4882a593Smuzhiyun 	uint32_t control_addr;
1068*4882a593Smuzhiyun 	struct {
1069*4882a593Smuzhiyun 		uint16_t write_value;
1070*4882a593Smuzhiyun 		uint8_t poll_mask;
1071*4882a593Smuzhiyun 		uint8_t poll_wait;
1072*4882a593Smuzhiyun 	} cache_ctrl;
1073*4882a593Smuzhiyun 
1074*4882a593Smuzhiyun 	uint32_t read_addr;
1075*4882a593Smuzhiyun 	struct {
1076*4882a593Smuzhiyun 		uint8_t read_addr_stride;
1077*4882a593Smuzhiyun 		uint8_t read_addr_cnt;
1078*4882a593Smuzhiyun 		uint16_t rsvd_1;
1079*4882a593Smuzhiyun 	} read_ctrl;
1080*4882a593Smuzhiyun } __packed;
1081*4882a593Smuzhiyun 
1082*4882a593Smuzhiyun /*
1083*4882a593Smuzhiyun  * Read OCM
1084*4882a593Smuzhiyun  */
1085*4882a593Smuzhiyun struct qla82xx_md_entry_rdocm {
1086*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1087*4882a593Smuzhiyun 
1088*4882a593Smuzhiyun 	uint32_t rsvd_0;
1089*4882a593Smuzhiyun 	uint32_t rsvd_1;
1090*4882a593Smuzhiyun 	uint32_t data_size;
1091*4882a593Smuzhiyun 	uint32_t op_count;
1092*4882a593Smuzhiyun 
1093*4882a593Smuzhiyun 	uint32_t rsvd_2;
1094*4882a593Smuzhiyun 	uint32_t rsvd_3;
1095*4882a593Smuzhiyun 	uint32_t read_addr;
1096*4882a593Smuzhiyun 	uint32_t read_addr_stride;
1097*4882a593Smuzhiyun 	uint32_t read_addr_cntrl;
1098*4882a593Smuzhiyun } __packed;
1099*4882a593Smuzhiyun 
1100*4882a593Smuzhiyun /*
1101*4882a593Smuzhiyun  * Read Memory
1102*4882a593Smuzhiyun  */
1103*4882a593Smuzhiyun struct qla82xx_md_entry_rdmem {
1104*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1105*4882a593Smuzhiyun 	uint32_t rsvd[6];
1106*4882a593Smuzhiyun 	uint32_t read_addr;
1107*4882a593Smuzhiyun 	uint32_t read_data_size;
1108*4882a593Smuzhiyun } __packed;
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun /*
1111*4882a593Smuzhiyun  * Read ROM
1112*4882a593Smuzhiyun  */
1113*4882a593Smuzhiyun struct qla82xx_md_entry_rdrom {
1114*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1115*4882a593Smuzhiyun 	uint32_t rsvd[6];
1116*4882a593Smuzhiyun 	uint32_t read_addr;
1117*4882a593Smuzhiyun 	uint32_t read_data_size;
1118*4882a593Smuzhiyun } __packed;
1119*4882a593Smuzhiyun 
1120*4882a593Smuzhiyun struct qla82xx_md_entry_mux {
1121*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1122*4882a593Smuzhiyun 
1123*4882a593Smuzhiyun 	uint32_t select_addr;
1124*4882a593Smuzhiyun 	uint32_t rsvd_0;
1125*4882a593Smuzhiyun 	uint32_t data_size;
1126*4882a593Smuzhiyun 	uint32_t op_count;
1127*4882a593Smuzhiyun 
1128*4882a593Smuzhiyun 	uint32_t select_value;
1129*4882a593Smuzhiyun 	uint32_t select_value_stride;
1130*4882a593Smuzhiyun 	uint32_t read_addr;
1131*4882a593Smuzhiyun 	uint32_t rsvd_1;
1132*4882a593Smuzhiyun } __packed;
1133*4882a593Smuzhiyun 
1134*4882a593Smuzhiyun struct qla82xx_md_entry_queue {
1135*4882a593Smuzhiyun 	qla82xx_md_entry_hdr_t h;
1136*4882a593Smuzhiyun 
1137*4882a593Smuzhiyun 	uint32_t select_addr;
1138*4882a593Smuzhiyun 	struct {
1139*4882a593Smuzhiyun 		uint16_t queue_id_stride;
1140*4882a593Smuzhiyun 		uint16_t rsvd_0;
1141*4882a593Smuzhiyun 	} q_strd;
1142*4882a593Smuzhiyun 
1143*4882a593Smuzhiyun 	uint32_t data_size;
1144*4882a593Smuzhiyun 	uint32_t op_count;
1145*4882a593Smuzhiyun 	uint32_t rsvd_1;
1146*4882a593Smuzhiyun 	uint32_t rsvd_2;
1147*4882a593Smuzhiyun 
1148*4882a593Smuzhiyun 	uint32_t read_addr;
1149*4882a593Smuzhiyun 	struct {
1150*4882a593Smuzhiyun 		uint8_t read_addr_stride;
1151*4882a593Smuzhiyun 		uint8_t read_addr_cnt;
1152*4882a593Smuzhiyun 		uint16_t rsvd_3;
1153*4882a593Smuzhiyun 	} rd_strd;
1154*4882a593Smuzhiyun } __packed;
1155*4882a593Smuzhiyun 
1156*4882a593Smuzhiyun #define MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE 0x129
1157*4882a593Smuzhiyun #define RQST_TMPLT_SIZE	0x0
1158*4882a593Smuzhiyun #define RQST_TMPLT 0x1
1159*4882a593Smuzhiyun #define MD_DIRECT_ROM_WINDOW	0x42110030
1160*4882a593Smuzhiyun #define MD_DIRECT_ROM_READ_BASE	0x42150000
1161*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_CTRL		0x41000090
1162*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_ADDR_LO		0x41000094
1163*4882a593Smuzhiyun #define MD_MIU_TEST_AGT_ADDR_HI		0x41000098
1164*4882a593Smuzhiyun 
1165*4882a593Smuzhiyun extern const int MD_MIU_TEST_AGT_RDDATA[4];
1166*4882a593Smuzhiyun 
1167*4882a593Smuzhiyun #define CRB_NIU_XG_PAUSE_CTL_P0        0x1
1168*4882a593Smuzhiyun #define CRB_NIU_XG_PAUSE_CTL_P1        0x8
1169*4882a593Smuzhiyun 
1170*4882a593Smuzhiyun #define qla82xx_get_temp_val(x)          ((x) >> 16)
1171*4882a593Smuzhiyun #define qla82xx_get_temp_state(x)        ((x) & 0xffff)
1172*4882a593Smuzhiyun #define qla82xx_encode_temp(val, state)  (((val) << 16) | (state))
1173*4882a593Smuzhiyun 
1174*4882a593Smuzhiyun /*
1175*4882a593Smuzhiyun  * Temperature control.
1176*4882a593Smuzhiyun  */
1177*4882a593Smuzhiyun enum {
1178*4882a593Smuzhiyun 	QLA82XX_TEMP_NORMAL = 0x1, /* Normal operating range */
1179*4882a593Smuzhiyun 	QLA82XX_TEMP_WARN,	   /* Sound alert, temperature getting high */
1180*4882a593Smuzhiyun 	QLA82XX_TEMP_PANIC	   /* Fatal error, hardware has shut down. */
1181*4882a593Smuzhiyun };
1182*4882a593Smuzhiyun 
1183*4882a593Smuzhiyun #define LEG_INTR_PTR_OFFSET	0x38C0
1184*4882a593Smuzhiyun #define LEG_INTR_TRIG_OFFSET	0x38C4
1185*4882a593Smuzhiyun #define LEG_INTR_MASK_OFFSET	0x38C8
1186*4882a593Smuzhiyun #endif
1187