1*7532SSean.Ye@Sun.COM /*
2*7532SSean.Ye@Sun.COM  * CDDL HEADER START
3*7532SSean.Ye@Sun.COM  *
4*7532SSean.Ye@Sun.COM  * The contents of this file are subject to the terms of the
5*7532SSean.Ye@Sun.COM  * Common Development and Distribution License (the "License").
6*7532SSean.Ye@Sun.COM  * You may not use this file except in compliance with the License.
7*7532SSean.Ye@Sun.COM  *
8*7532SSean.Ye@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*7532SSean.Ye@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*7532SSean.Ye@Sun.COM  * See the License for the specific language governing permissions
11*7532SSean.Ye@Sun.COM  * and limitations under the License.
12*7532SSean.Ye@Sun.COM  *
13*7532SSean.Ye@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*7532SSean.Ye@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*7532SSean.Ye@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*7532SSean.Ye@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*7532SSean.Ye@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*7532SSean.Ye@Sun.COM  *
19*7532SSean.Ye@Sun.COM  * CDDL HEADER END
20*7532SSean.Ye@Sun.COM  */
21*7532SSean.Ye@Sun.COM 
22*7532SSean.Ye@Sun.COM /*
23*7532SSean.Ye@Sun.COM  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24*7532SSean.Ye@Sun.COM  * Use is subject to license terms.
25*7532SSean.Ye@Sun.COM  */
26*7532SSean.Ye@Sun.COM 
27*7532SSean.Ye@Sun.COM #ifndef _NB5000_H
28*7532SSean.Ye@Sun.COM #define	_NB5000_H
29*7532SSean.Ye@Sun.COM 
30*7532SSean.Ye@Sun.COM #ifdef __cplusplus
31*7532SSean.Ye@Sun.COM extern "C" {
32*7532SSean.Ye@Sun.COM #endif
33*7532SSean.Ye@Sun.COM 
34*7532SSean.Ye@Sun.COM #include <sys/cpu_module.h>
35*7532SSean.Ye@Sun.COM 
36*7532SSean.Ye@Sun.COM #define	NB_5000_MAX_MEM_CONTROLLERS	2
37*7532SSean.Ye@Sun.COM #define	NB_MAX_DIMMS_PER_CHANNEL	(nb_chipset == INTEL_NB_7300 ? 8 : 4)
38*7532SSean.Ye@Sun.COM #define	NB_MEM_BRANCH_SELECT		(nb_chipset == INTEL_NB_5400 ? 2 : 3)
39*7532SSean.Ye@Sun.COM #define	NB_MAX_MEM_BRANCH_SELECT	3
40*7532SSean.Ye@Sun.COM #define	NB_MEM_RANK_SELECT		(nb_chipset == INTEL_NB_7300 ? 7 : 5)
41*7532SSean.Ye@Sun.COM #define	NB_MAX_MEM_RANK_SELECT		7
42*7532SSean.Ye@Sun.COM #define	NB_RANKS_IN_SELECT		4
43*7532SSean.Ye@Sun.COM #define	NB_PCI_DEV			10
44*7532SSean.Ye@Sun.COM 
45*7532SSean.Ye@Sun.COM #define	NB_PCI_NFUNC	4
46*7532SSean.Ye@Sun.COM 
47*7532SSean.Ye@Sun.COM #define	DOCMD_PEX_MASK	0x00
48*7532SSean.Ye@Sun.COM #define	DOCMD_5400_PEX_MASK	0x000
49*7532SSean.Ye@Sun.COM #define	DOCMD_PEX	0xf0
50*7532SSean.Ye@Sun.COM #define	DOCMD_5400_PEX	0xff0
51*7532SSean.Ye@Sun.COM 
52*7532SSean.Ye@Sun.COM #define	SPD_BUSY	0x1000
53*7532SSean.Ye@Sun.COM #define	SPD_BUS_ERROR	0x2000
54*7532SSean.Ye@Sun.COM #define	SPD_READ_DATA_VALID	0x8000
55*7532SSean.Ye@Sun.COM #define	SPD_EEPROM_WRITE	0xa8000000
56*7532SSean.Ye@Sun.COM #define	SPD_ADDR(slave, addr) ((((slave) & 7) << 24) | (((addr) & 0xff) << 16))
57*7532SSean.Ye@Sun.COM 
58*7532SSean.Ye@Sun.COM #define	MC_MIRROR	0x10000
59*7532SSean.Ye@Sun.COM #define	MC_PATROL_SCRUB	0x80
60*7532SSean.Ye@Sun.COM #define	MC_DEMAND_SCRUB	0x40
61*7532SSean.Ye@Sun.COM 
62*7532SSean.Ye@Sun.COM #define	MCA_SCHDIMM	0x4000
63*7532SSean.Ye@Sun.COM 
64*7532SSean.Ye@Sun.COM #define	TLOW_MAX	0x100000000ULL
65*7532SSean.Ye@Sun.COM 
66*7532SSean.Ye@Sun.COM #define	MTR_PRESENT(mtr) \
67*7532SSean.Ye@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0400 : 0x0100))
68*7532SSean.Ye@Sun.COM #define	MTR_ETHROTTLE(mtr) \
69*7532SSean.Ye@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0200 : 0x0080))
70*7532SSean.Ye@Sun.COM #define	MTR_WIDTH(mtr) \
71*7532SSean.Ye@Sun.COM 	(((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0100 : 0x0040)) ? 8 : 4)
72*7532SSean.Ye@Sun.COM #define	MTR_NUMBANK(mtr) \
73*7532SSean.Ye@Sun.COM 	(((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0040 : 0x0020)) ? 8 : 4)
74*7532SSean.Ye@Sun.COM #define	MTR_NUMRANK(mtr) \
75*7532SSean.Ye@Sun.COM 	(((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0020 : 0x0010)) ? 2 : 1)
76*7532SSean.Ye@Sun.COM #define	MTR_NUMROW(mtr) ((((mtr) >> 2) & 3) + 13)
77*7532SSean.Ye@Sun.COM #define	MTR_NUMCOL(mtr) (((mtr) & 3) + 10)
78*7532SSean.Ye@Sun.COM 
79*7532SSean.Ye@Sun.COM #define	MTR_DIMMSIZE(mtr) 	((1ULL << (MTR_NUMCOL(mtr) + MTR_NUMROW(mtr))) \
80*7532SSean.Ye@Sun.COM 	* MTR_NUMRANK(mtr) * MTR_NUMBANK(mtr) * MTR_WIDTH(mtr))
81*7532SSean.Ye@Sun.COM 
82*7532SSean.Ye@Sun.COM /* FERR_GLOBAL and NERR_GLOBAL */
83*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB3_FATAL	0x800000000ULL	/* FSB3 Fatal Error */
84*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB2_FATAL	0x400000000ULL	/* FSB2 Fatal Error */
85*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB3_NF	0x200000000ULL	/* FSB3 Non-Fatal Error */
86*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB2_NF	0x100000000ULL	/* FSB2 Non-Fatal Error */
87*7532SSean.Ye@Sun.COM 
88*7532SSean.Ye@Sun.COM #define	GE_INT_FATAL	0x80000000	/* North Bridge Internal Error */
89*7532SSean.Ye@Sun.COM #define	GE_DMA_FATAL	0x40000000	/* DMA engine Fatal Error */
90*7532SSean.Ye@Sun.COM #define	GE_FSB1_FATAL	0x20000000	/* FSB1 Fatal Error */
91*7532SSean.Ye@Sun.COM #define	GE_FSB0_FATAL	0x10000000	/* FSB0 Fatal Error */
92*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD_FATAL	0x08000000	/* FBD channel Fatal Error */
93*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD3_FATAL	0x08000000	/* FBD3 channel Fatal Error */
94*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD2_FATAL	0x04000000	/* FBD2 channel Fatal Error */
95*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD1_FATAL	0x02000000	/* FBD1 channel Fatal Error */
96*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD0_FATAL	0x01000000	/* FBD0 channel Fatal Error */
97*7532SSean.Ye@Sun.COM #define	GE_FERR_THERMAL_FATAL	0x04000000	/* Thermal Fatal Error */
98*7532SSean.Ye@Sun.COM #define	GE_PCIEX9_FATAL	0x02000000	/* PCI Express device 9 Fatal Error */
99*7532SSean.Ye@Sun.COM #define	GE_PCIEX8_FATAL	0x01000000	/* PCI Express device 8 Fatal Error */
100*7532SSean.Ye@Sun.COM #define	GE_PCIEX7_FATAL	0x00800000	/* PCI Express device 7 Fatal Error */
101*7532SSean.Ye@Sun.COM #define	GE_PCIEX6_FATAL	0x00400000	/* PCI Express device 6 Fatal Error */
102*7532SSean.Ye@Sun.COM #define	GE_PCIEX5_FATAL	0x00200000	/* PCI Express device 5 Fatal Error */
103*7532SSean.Ye@Sun.COM #define	GE_PCIEX4_FATAL	0x00100000	/* PCI Express device 4 Fatal Error */
104*7532SSean.Ye@Sun.COM #define	GE_PCIEX3_FATAL	0x00080000	/* PCI Express device 3 Fatal Error */
105*7532SSean.Ye@Sun.COM #define	GE_PCIEX2_FATAL	0x00040000	/* PCI Express device 2 Fatal Error */
106*7532SSean.Ye@Sun.COM #define	GE_PCIEX1_FATAL	0x00020000	/* PCI Express device 1 Fatal Error */
107*7532SSean.Ye@Sun.COM #define	GE_ESI_FATAL	0x00010000	/* ESI Fatal Error */
108*7532SSean.Ye@Sun.COM #define	GE_INT_NF	0x00008000	/* North Bridge Internal Error */
109*7532SSean.Ye@Sun.COM #define	GE_DMA_NF	0x00004000	/* DMA engine Non-Fatal Error */
110*7532SSean.Ye@Sun.COM #define	GE_FSB1_NF	0x00002000	/* FSB1 Non-Fatal Error */
111*7532SSean.Ye@Sun.COM #define	GE_FSB0_NF	0x00001000	/* FSB0 Non-Fatal Error */
112*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD3_NF	0x00000800	/* FBD channel 3 Non-Fatal Error */
113*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD2_NF	0x00000400	/* FBD channel 2 Non-Fatal Error */
114*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD1_NF	0x00000200	/* FBD channel 1 Non-Fatal Error */
115*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD0_NF	0x00000100	/* FBD channel 0 Non-Fatal Error */
116*7532SSean.Ye@Sun.COM #define	GE_FERR_FBD_NF	0x00000800	/* FBD channel Non-Fatal Error */
117*7532SSean.Ye@Sun.COM #define	GE_FERR_THERMAL_NF 0x00000400	/* Thermal Non-Fatal Error */
118*7532SSean.Ye@Sun.COM #define	GE_PCIEX9_NF	0x00000200	/* PCI Express dev 9 Non-Fatal Error */
119*7532SSean.Ye@Sun.COM #define	GE_PCIEX8_NF	0x00000100	/* PCI Express dev 8 Non-Fatal Error */
120*7532SSean.Ye@Sun.COM #define	GE_PCIEX7_NF	0x00000080	/* PCI Express dev 7 Non-Fatal Error */
121*7532SSean.Ye@Sun.COM #define	GE_PCIEX6_NF	0x00000040	/* PCI Express dev 6 Non-Fatal Error */
122*7532SSean.Ye@Sun.COM #define	GE_PCIEX5_NF	0x00000020	/* PCI Express dev 5 Non-Fatal Error */
123*7532SSean.Ye@Sun.COM #define	GE_PCIEX4_NF	0x00000010	/* PCI Express dev 4 Non-Fatal Error */
124*7532SSean.Ye@Sun.COM #define	GE_PCIEX3_NF	0x00000008	/* PCI Express dev 3 Non-Fatal Error */
125*7532SSean.Ye@Sun.COM #define	GE_PCIEX2_NF	0x00000004	/* PCI Express dev 2 Non-Fatal Error */
126*7532SSean.Ye@Sun.COM #define	GE_PCIEX1_NF	0x00000002	/* PCI Express dev 1 Non-Fatal Error */
127*7532SSean.Ye@Sun.COM #define	GE_ESI_NF	0x00000001	/* ESI Non-Fatal Error */
128*7532SSean.Ye@Sun.COM 
129*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB2_FATAL	0x08000000 /* FSB2 Fatal Error */
130*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB3_FATAL	0x04000000 /* FSB3 Fatal Error */
131*7532SSean.Ye@Sun.COM #define	GE_NERR_FBD_FATAL	0x01000000 /* FBD channel Fatal Error */
132*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB2_NF		0x00000800 /* FSB2 Non-Fatal Error */
133*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB3_NF		0x00000400 /* FSB3 Non-Fatal Error */
134*7532SSean.Ye@Sun.COM #define	GE_NERR_FBD_NF		0x00000100 /* FBD channel Non-Fatal Error */
135*7532SSean.Ye@Sun.COM 
136*7532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F9		0x20	/* F9Msk FSB Protocol */
137*7532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F2		0x08	/* F2Msk Unsupported Bus Transaction */
138*7532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F1		0x01 	/* F1Msk Request/Address Parity */
139*7532SSean.Ye@Sun.COM 
140*7532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F7		0x04	/* F7Msk Detected MCERR */
141*7532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F8		0x02	/* F8Msk B-INIT */
142*7532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F6		0x01	/* F6Msk Data Parity */
143*7532SSean.Ye@Sun.COM 
144*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F1		0x0001 	/* F1Msk Request/Address Parity */
145*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F2		0x0002	/* F2Msk Unsupported Bus Transaction */
146*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F6		0x0020	/* F6Msk Data Parity */
147*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F7		0x0040	/* F7Msk Detected MCERR */
148*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F8		0x0080	/* F8Msk B-INIT */
149*7532SSean.Ye@Sun.COM #define	EMASK_FSB_F9		0x0100	/* F9Msk FSB Protocol */
150*7532SSean.Ye@Sun.COM 
151*7532SSean.Ye@Sun.COM #define	EMASK_FSB_FATAL		(EMASK_FSB_F1 | EMASK_FSB_F2 | EMASK_FSB_F9)
152*7532SSean.Ye@Sun.COM #define	EMASK_FSB_NF		(EMASK_FSB_F6 | EMASK_FSB_F7 | EMASK_FSB_F8)
153*7532SSean.Ye@Sun.COM 
154*7532SSean.Ye@Sun.COM #define	ERR_FBD_CH_SHIFT	28 /* channel index in fat_fbd and nf_fbd */
155*7532SSean.Ye@Sun.COM 
156*7532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M23	0x00400000	/* M23Err Non-Redundant Fast Reset */
157*7532SSean.Ye@Sun.COM 					/* Timeout */
158*7532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M3	0x00000004	/* M3Err >Tmid thermal event with */
159*7532SSean.Ye@Sun.COM 					/* intelligent throttling disabled */
160*7532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M2	0x00000002	/* M2Err memory or FBD configuration */
161*7532SSean.Ye@Sun.COM 					/* CRC read error */
162*7532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M1	0x00000001	/* M1Err memory write error on */
163*7532SSean.Ye@Sun.COM 					/* non-redundant retry or FBD */
164*7532SSean.Ye@Sun.COM 					/* configuration write error on retry */
165*7532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_MASK 0x007fffff
166*7532SSean.Ye@Sun.COM 
167*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M29	0x02000000	/* M29Err DIMM-Isolation Completed */
168*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M28	0x01000000	/* M28Err DIMM-Spare Copy Completed */
169*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M27	0x00800000	/* M27Err DIMM-Spare Copy Initiated */
170*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M26	0x00400000	/* M26Err Redundant Fast Reset */
171*7532SSean.Ye@Sun.COM 					/* Timeout */
172*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M25	0x00200000	/* M25Err Memory write error on */
173*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M24	0x00100000	/* M24Err refresh error */
174*7532SSean.Ye@Sun.COM 					/* redundant retry */
175*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M22	0x00040000	/* M22Err SPD protocol */
176*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M21	0x00020000	/* M21Err FBD Northbound parity on */
177*7532SSean.Ye@Sun.COM 					/* FBD sync status */
178*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M20	0x00010000	/* M20Err Correctable patrol data ECC */
179*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M19	0x00008000	/* M19Err Correctasble resilver or */
180*7532SSean.Ye@Sun.COM 					/* spare-copy data ECC */
181*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M18	0x00004000	/* M18Err Correctable Mirrored demand */
182*7532SSean.Ye@Sun.COM 					/* data ECC */
183*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M17	0x00002000	/* M17Err Correctable Non-mirrored */
184*7532SSean.Ye@Sun.COM 					/* demand data ECC */
185*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M16	0x00001000	/* M16Err channel failed over */
186*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M15	0x00000800	/* M15Err Memory or FBD configuration */
187*7532SSean.Ye@Sun.COM 					/* CRC read error */
188*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M14	0x00000400	/* M14Err FBD configuration write */
189*7532SSean.Ye@Sun.COM 					/* error on first attempt */
190*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M13	0x00000200	/* M13Err Memory write error on first */
191*7532SSean.Ye@Sun.COM 					/* attempt */
192*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M12	0x00000100	/* M12Err Non-Aliased uncorrectable */
193*7532SSean.Ye@Sun.COM 					/* patrol data ECC */
194*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M11	0x00000080	/* M11Err Non-Aliased uncorrectable */
195*7532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
196*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M10	0x00000040	/* M10Err Non-Aliased uncorrectable */
197*7532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
198*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M9	0x00000020	/* M9Err Non-Aliased uncorrectable */
199*7532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
200*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M8	0x00000010	/* M8Err Aliased uncorrectable */
201*7532SSean.Ye@Sun.COM 					/* patrol data ECC */
202*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M7	0x00000008	/* M7Err Aliased uncorrectable */
203*7532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
204*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M6	0x00000004	/* M6Err Aliased uncorrectable */
205*7532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
206*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M5	0x00000002	/* M5Err Aliased uncorrectable */
207*7532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
208*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M4	0x00000001	/* M4Err uncorrectable data ECC on */
209*7532SSean.Ye@Sun.COM 					/* replay */
210*7532SSean.Ye@Sun.COM 
211*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_MASK	0x01ffffff
212*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_ECC_UE	(ERR_NF_FBD_M12|ERR_NF_FBD_M11|ERR_NF_FBD_M10| \
213*7532SSean.Ye@Sun.COM     ERR_NF_FBD_M9|ERR_NF_FBD_M8|ERR_NF_FBD_M7|ERR_NF_FBD_M6|ERR_NF_FBD_M5| \
214*7532SSean.Ye@Sun.COM     ERR_NF_FBD_M4)
215*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_MA	(ERR_NF_FBD_M14)
216*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_ECC_CE	(ERR_NF_FBD_M20|ERR_NF_FBD_M19|ERR_NF_FBD_M18| \
217*7532SSean.Ye@Sun.COM     ERR_NF_FBD_M17|ERR_NF_FBD_M15|ERR_NF_FBD_M21)
218*7532SSean.Ye@Sun.COM #define	ERR_NF_FBD_SPARE (ERR_NF_FBD_M28|ERR_NF_FBD_M27)
219*7532SSean.Ye@Sun.COM 
220*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M29	0x10000000	/* M29Err DIMM-Isolation Completed */
221*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M28	0x08000000	/* M28Err DIMM-Spare Copy Completed */
222*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M27	0x04000000	/* M27Err DIMM-Spare Copy Initiated */
223*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M26	0x02000000	/* M26Err Redundant Fast Reset */
224*7532SSean.Ye@Sun.COM 					/* Timeout */
225*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M25	0x01000000	/* M25Err Memory write error on */
226*7532SSean.Ye@Sun.COM 					/* redundant retry */
227*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M24	0x00800000	/* M24Err refresh error */
228*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M23	0x00400000	/* M23Err Non-Redundant Fast Reset */
229*7532SSean.Ye@Sun.COM 					/* Timeout */
230*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M22	0x00200000	/* M22Err SPD protocol */
231*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M21	0x00100000	/* M21Err FBD Northbound parity on */
232*7532SSean.Ye@Sun.COM 					/* FBD sync status */
233*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M20	0x00080000	/* M20Err Correctable patrol data ECC */
234*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M19	0x00040000	/* M19Err Correctasble resilver or */
235*7532SSean.Ye@Sun.COM 					/* spare-copy data ECC */
236*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M18	0x00020000	/* M18Err Correctable Mirrored demand */
237*7532SSean.Ye@Sun.COM 					/* data ECC */
238*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M17	0x00010000	/* M17Err Correctable Non-mirrored */
239*7532SSean.Ye@Sun.COM 					/* demand data ECC */
240*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M16	0x00008000	/* M16Err channel failed over */
241*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M15	0x00004000	/* M15Err Memory or FBD configuration */
242*7532SSean.Ye@Sun.COM 					/* CRC read error */
243*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M14	0x00002000	/* M14Err FBD configuration write */
244*7532SSean.Ye@Sun.COM 					/* error on first attempt */
245*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M13	0x00001000	/* M13Err Memory write error on first */
246*7532SSean.Ye@Sun.COM 					/* attempt */
247*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M12	0x00000800	/* M12Err Non-Aliased uncorrectable */
248*7532SSean.Ye@Sun.COM 					/* patrol data ECC */
249*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M11	0x00000400	/* M11Err Non-Aliased uncorrectable */
250*7532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
251*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M10	0x00000200	/* M10Err Non-Aliased uncorrectable */
252*7532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
253*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M9	0x00000100	/* M9Err Non-Aliased uncorrectable */
254*7532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
255*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M8	0x00000080	/* M8Err Aliased uncorrectable */
256*7532SSean.Ye@Sun.COM 					/* patrol data ECC */
257*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M7	0x00000040	/* M7Err Aliased uncorrectable */
258*7532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
259*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M6	0x00000020	/* M6Err Aliased uncorrectable */
260*7532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
261*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M5	0x00000010	/* M5Err Aliased uncorrectable */
262*7532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
263*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M4	0x00000008	/* M4Err uncorrectable data ECC on */
264*7532SSean.Ye@Sun.COM 					/* replay */
265*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M3	0x00000004	/* M3Err >Tmid thermal event with */
266*7532SSean.Ye@Sun.COM 					/* intelligent throttling disabled */
267*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M2	0x00000002	/* M2Err memory or FBD configuration */
268*7532SSean.Ye@Sun.COM 					/* CRC read error */
269*7532SSean.Ye@Sun.COM #define	EMASK_FBD_M1	0x00000001	/* M1Err memory write error on */
270*7532SSean.Ye@Sun.COM 					/* non-redundant retry or FBD */
271*7532SSean.Ye@Sun.COM 					/* configuration write error on retry */
272*7532SSean.Ye@Sun.COM /* MCH 7300 errata 34 (reserved mask bits) */
273*7532SSean.Ye@Sun.COM #define	EMASK_5000_FBD_RES	(EMASK_FBD_M24|EMASK_FBD_M16)
274*7532SSean.Ye@Sun.COM #define	EMASK_FBD_RES	(nb_chipset == INTEL_NB_5400 ? 0 : EMASK_5000_FBD_RES)
275*7532SSean.Ye@Sun.COM 
276*7532SSean.Ye@Sun.COM #define	EMASK_FBD_FATAL	(EMASK_FBD_M23|EMASK_FBD_M3|EMASK_FBD_M2|EMASK_FBD_M1)
277*7532SSean.Ye@Sun.COM #define	EMASK_FBD_NF (EMASK_FBD_M28|EMASK_FBD_M27|EMASK_FBD_M26|EMASK_FBD_M25| \
278*7532SSean.Ye@Sun.COM 	EMASK_FBD_M22|EMASK_FBD_M21|EMASK_FBD_M20|EMASK_FBD_M19|EMASK_FBD_M18| \
279*7532SSean.Ye@Sun.COM 	EMASK_FBD_M17|EMASK_FBD_M15|EMASK_FBD_M14|EMASK_FBD_M13|EMASK_FBD_M12| \
280*7532SSean.Ye@Sun.COM 	EMASK_FBD_M11|EMASK_FBD_M10|EMASK_FBD_M9|EMASK_FBD_M8|EMASK_FBD_M7| \
281*7532SSean.Ye@Sun.COM 	EMASK_FBD_M6|EMASK_FBD_M5|EMASK_FBD_M4)
282*7532SSean.Ye@Sun.COM #define	EMASK_5400_FBD_FATAL	(EMASK_FBD_M23|EMASK_FBD_M2|EMASK_FBD_M1)
283*7532SSean.Ye@Sun.COM #define	EMASK_5400_FBD_NF (EMASK_FBD_M29|EMASK_FBD_M28|EMASK_FBD_M27| \
284*7532SSean.Ye@Sun.COM 	EMASK_FBD_M26|EMASK_FBD_M25|EMASK_FBD_M24|EMASK_FBD_M22|EMASK_FBD_M21| \
285*7532SSean.Ye@Sun.COM 	EMASK_FBD_M20|EMASK_FBD_M19|EMASK_FBD_M18|EMASK_FBD_M17|EMASK_FBD_M16| \
286*7532SSean.Ye@Sun.COM 	EMASK_FBD_M15|EMASK_FBD_M14|EMASK_FBD_M13|EMASK_FBD_M12| \
287*7532SSean.Ye@Sun.COM 	EMASK_FBD_M11|EMASK_FBD_M10|EMASK_FBD_M9|EMASK_FBD_M8|EMASK_FBD_M7| \
288*7532SSean.Ye@Sun.COM 	EMASK_FBD_M6|EMASK_FBD_M5|EMASK_FBD_M4)
289*7532SSean.Ye@Sun.COM 
290*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B14	0x0400	/* B14Msk SF Scrub DBE */
291*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B12	0x0100	/* B12Msk Parity Protected register */
292*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B25	0x0080	/* B25Msk illegal HISMM/TSEG access */
293*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B23	0x0040	/* B23Msk Vt Unaffiliated port error */
294*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B21	0x0020	/* B21Msk illegal way */
295*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B7	0x0010	/* B7Msk Multiple ECC error in any of */
296*7532SSean.Ye@Sun.COM 					/* the ways during SF lookup */
297*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B4	0x08	/* B4Msk Virtual pin port error */
298*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B3	0x04	/* B3Msk Coherency violation error for EWB */
299*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B2	0x02	/* B2Msk Multi-tag hit SF */
300*7532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B1	0x01	/* B1Msk DM parity error */
301*7532SSean.Ye@Sun.COM 
302*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B27	0x4000	/* B27Msk Request received when in S1 */
303*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B24	0x2000	/* B24Msk DFXERR */
304*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B19	0x1000	/* B19Msk scrub SBE (SF) */
305*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B18	0x0800	/* B18Msk perfmon task completion */
306*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B17	0x0400	/* B17Msk JTAG/TAP error status */
307*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B16	0x0200	/* B16Msk SMBus error status */
308*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B22	0x0080	/* B22Msk Victim ROM parity */
309*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B20	0x0040	/* B20Msk Configuration write abort */
310*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B11	0x0020	/* B11Msk Victim Ram parity error */
311*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B10	0x0010	/* B10Msk DM Parity */
312*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B9	0x0008	/* B9Msk illeagl access */
313*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B8	0x0004	/* B8Msk SF Coherency Error for BIL */
314*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B6	0x0002	/* B6Msk Single ECC error on SF lookup */
315*7532SSean.Ye@Sun.COM #define	ERR_NF_INT_B5	0x0001	/* B5Msk Address Map error */
316*7532SSean.Ye@Sun.COM 
317*7532SSean.Ye@Sun.COM #define	NERR_NF_5400_INT_B26	0x0004	/* B26Msk Illeagl Access to */
318*7532SSean.Ye@Sun.COM 				/* non-coherent address space */
319*7532SSean.Ye@Sun.COM 
320*7532SSean.Ye@Sun.COM #define	EMASK_INT_RES	0x02000000	/* Do not change */
321*7532SSean.Ye@Sun.COM #define	EMASK_INT_B25	0x01000000	/* B25Msk illegal HISMM/TSEG access */
322*7532SSean.Ye@Sun.COM #define	EMASK_INT_B23	0x00400000	/* B23Msk Vt Unaffiliated port error */
323*7532SSean.Ye@Sun.COM #define	EMASK_INT_B22	0x00200000	/* B22Msk Victim ROM parity */
324*7532SSean.Ye@Sun.COM #define	EMASK_INT_B21	0x00100000	/* B21Msk illegal way */
325*7532SSean.Ye@Sun.COM #define	EMASK_INT_B20	0x00080000	/* B20Msk Configuration write abort  */
326*7532SSean.Ye@Sun.COM #define	EMASK_INT_B19	0x00040000	/* B19Msk Scrub SBE */
327*7532SSean.Ye@Sun.COM #define	EMASK_INT_B14	0x00002000	/* B14Msk Scrub DBE */
328*7532SSean.Ye@Sun.COM #define	EMASK_INT_B12	0x00000800	/* B12Msk Parity Protected */
329*7532SSean.Ye@Sun.COM #define	EMASK_INT_B11	0x00000400	/* B11Msk Victim Ram parity error */
330*7532SSean.Ye@Sun.COM #define	EMASK_INT_B10	0x00000200	/* B10Msk DM Parity */
331*7532SSean.Ye@Sun.COM #define	EMASK_INT_B9	0x00000100	/* B9Msk Illegal Accesss */
332*7532SSean.Ye@Sun.COM 
333*7532SSean.Ye@Sun.COM #define	EMASK_INT_B8	0x80	/* B8Msk SF Coherency Error for BIL */
334*7532SSean.Ye@Sun.COM #define	EMASK_INT_B7	0x40	/* B7Msk Multiple ECC error in any of */
335*7532SSean.Ye@Sun.COM 				/* the ways during SF lookup */
336*7532SSean.Ye@Sun.COM #define	EMASK_INT_B6	0x20	/* B6Msk Single ECC error on SF lookup */
337*7532SSean.Ye@Sun.COM #define	EMASK_INT_B5	0x10	/* B5Msk Address Map error */
338*7532SSean.Ye@Sun.COM #define	EMASK_INT_B4	0x08	/* B4Msk Virtual pin port error */
339*7532SSean.Ye@Sun.COM #define	EMASK_INT_B3	0x04	/* B3Msk Coherency violation error for EWB */
340*7532SSean.Ye@Sun.COM #define	EMASK_INT_B2	0x02	/* B2Msk Multi-tag hit SF */
341*7532SSean.Ye@Sun.COM #define	EMASK_INT_B1	0x01	/* B1Msk DM parity error */
342*7532SSean.Ye@Sun.COM 
343*7532SSean.Ye@Sun.COM /* MCH 5000 errata 2 */
344*7532SSean.Ye@Sun.COM #define	EMASK_INT_5000	EMASK_INT_B1
345*7532SSean.Ye@Sun.COM /* MCH 7300 errata 17 & 20 */
346*7532SSean.Ye@Sun.COM #define	EMASK_INT_7300	(EMASK_INT_B3|EMASK_INT_B1)
347*7532SSean.Ye@Sun.COM /* MCH 7300 errata 17,20 & 21 */
348*7532SSean.Ye@Sun.COM #define	EMASK_INT_7300_STEP_0	(EMASK_INT_B7|EMASK_INT_B3|EMASK_INT_B1)
349*7532SSean.Ye@Sun.COM 
350*7532SSean.Ye@Sun.COM #define	EMASK_INT_FATAL (EMASK_INT_B7|EMASK_INT_B4|EMASK_INT_B3|EMASK_INT_B2| \
351*7532SSean.Ye@Sun.COM 	EMASK_INT_B1)
352*7532SSean.Ye@Sun.COM #define	EMASK_INT_NF	(EMASK_INT_B8|EMASK_INT_B6|EMASK_INT_B5)
353*7532SSean.Ye@Sun.COM #define	GE_FBD_FATAL ((nb_chipset == INTEL_NB_5400) ? GE_FERR_FBD_FATAL : \
354*7532SSean.Ye@Sun.COM 	(GE_FERR_FBD0_FATAL|GE_FERR_FBD1_FATAL|GE_FERR_FBD2_FATAL| \
355*7532SSean.Ye@Sun.COM 	GE_FERR_FBD3_FATAL))
356*7532SSean.Ye@Sun.COM #define	GE_FBD_NF ((nb_chipset == INTEL_NB_5400) ? GE_FERR_FBD_NF : \
357*7532SSean.Ye@Sun.COM 	(GE_FERR_FBD0_NF|GE_FERR_FBD1_NF|GE_FERR_FBD2_NF|GE_FERR_FBD3_NF))
358*7532SSean.Ye@Sun.COM 
359*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO18	0x00200000	/* ESI Reset timeout */
360*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO2	0x00100000	/* Received an unsupported */
361*7532SSean.Ye@Sun.COM 						/* request */
362*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO9	0x00040000	/* Malformed TLP Status */
363*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO10	0x00020000	/* Received buffer overflow */
364*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO8	0x00010000	/* unexpected completion */
365*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO7	0x00008000	/* completion abort */
366*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO6	0x00004000	/* completion timeout */
367*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO5	0x00002000	/* flow control protocol */
368*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO4	0x00001000	/* poisoned TLP */
369*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO19	0x00000020	/* surprise link down */
370*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO0	0x00000010	/* data link protocol */
371*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO3	0x00000001	/* training error */
372*7532SSean.Ye@Sun.COM 
373*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO20	0x00002000	/* Advisory Non Fatal */
374*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO16	0x00001000	/* replay timer timeout */
375*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO15	0x00000100	/* replay num pollover */
376*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO14	0x00000080	/* bad DLLP */
377*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO13	0x00000040	/* bad TLP */
378*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO12	0x00000001	/* receiver error mask */
379*7532SSean.Ye@Sun.COM 
380*7532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO1	0x00000004	/* fatal message detect */
381*7532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO11	0x00000002	/* uncorrectable message */
382*7532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO17	0x00000001	/* correctable message */
383*7532SSean.Ye@Sun.COM 
384*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO33	0x00002000	/* Link autonomous BW change */
385*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO32	0x00001000	/* Received CA Posted Req */
386*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO31	0x00000800	/* Received UR Posted Req */
387*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO30	0x00000400	/* VT-d internal HW */
388*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO29	0x00000200	/* MSI address */
389*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO28	0x00000100	/* Link BW change */
390*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO27	0x00000080	/* stop & scream */
391*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO26	0x00000040	/* Received CA response */
392*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO25	0x00000020	/* Received UR response */
393*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO24	0x00000010	/* Outbound poisoned data */
394*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO23	0x00000008	/* VTd fault */
395*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO22	0x00000004	/* internal header/ctl parity */
396*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO18	0x00000002	/* ESI reset timeout */
397*7532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_VPP	0x00000001	/* correctable message detect */
398*7532SSean.Ye@Sun.COM 
399*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO32	0x00800000	/* Received CA Posted Request */
400*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO31	0x00400000	/* Received UR Posted Request */
401*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO30	0x00200000	/* VT-d Internal HW */
402*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO29	0x00100000	/* MSI Address */
403*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO27	0x00040000	/* Stop & Scream */
404*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO26	0x00020000	/* Received CA Response */
405*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO25	0x00010000	/* Received UR Response */
406*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO24	0x00008000	/* Outbound poisoned TLP */
407*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO23	0x00004000	/* VT-d Fault */
408*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO22	0x00002000	/* Internal Header/Control */
409*7532SSean.Ye@Sun.COM 						/* Parity */
410*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO18	0x00001000	/* ESI reset timeout */
411*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO1	0x00000400	/* received fatal error msg */
412*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO2	0x00000200	/* received unsupported req  */
413*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO9	0x00000100	/* malformed TLP */
414*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO10	0x00000080	/* receiver buffer overflow */
415*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO8	0x00000040	/* unexpected completion */
416*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO7	0x00000020	/* completer abort */
417*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO6	0x00000010	/* completion timeout */
418*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO5	0x00000008	/* flow control protocol */
419*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO4	0x00000004	/* poisoned TLP */
420*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO19	0x00000002	/* surprise link down */
421*7532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO0	0x00000001	/* data link layer protocol */
422*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO19	0x00001000	/* surprise link down */
423*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO18	0x00000800	/* ESI reset timeout */
424*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO9	0x00000400	/* malformed TLP */
425*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO10	0x00000200	/* receiver buffer overflow */
426*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO8	0x00000100	/* unexpected completion */
427*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO7	0x00000080	/* completer abort */
428*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO6	0x00000040	/* completion timeout */
429*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO5	0x00000020	/* flow control protocol */
430*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO4	0x00000010	/* poisoned TLP */
431*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO3	0x00000008	/* training error */
432*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO2	0x00000004	/* received unsupported req  */
433*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO1	0x00000002	/* received fatal error message */
434*7532SSean.Ye@Sun.COM #define	PEX_FAT_IO0	0x00000001	/* data link layer protocol */
435*7532SSean.Ye@Sun.COM 
436*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO33	0x20000000	/* link autonomous bandwidth */
437*7532SSean.Ye@Sun.COM 						/* change (correctable) */
438*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO32	0x10000000	/* Received CA Posted Request */
439*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO31	0x08000000	/* Received UR Posted Request */
440*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO30	0x04000000	/* VT-d Internal HW */
441*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO29	0x02000000	/* MSI Address */
442*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO28	0x01000000	/* Link bandwidth change */
443*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO27	0x00800000	/* Stop & Scream */
444*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO26	0x00400000	/* Received CA Response */
445*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO25	0x00200000	/* Received UR Response */
446*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO24	0x00100000	/* Outbound poisoned TLP */
447*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO23	0x00080000	/* VT-d Fault */
448*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO11	0x00040000	/* received non fatal err msg */
449*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO17	0x00020000 	/* rec correctable error msg */
450*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO2		0x00008000	/* Received unsupported req */
451*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO9		0x00004000	/* Malformed TLP */
452*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO10	0x00002000	/* Received buffer overflow */
453*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO8		0x00001000	/* unexpected completion err */
454*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO7		0x00000800	/* completion abort */
455*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO6		0x00000400	/* completion timeout */
456*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO5		0x00000200	/* flow control protocol */
457*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO4		0x00000100	/* poisoned TLP */
458*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO19	0x00000080	/* surprise link down */
459*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO0		0x00000040	/* data link layer protocol */
460*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO20	0x00000020	/* Advisory Non Fatel */
461*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO16	0x00000010	/* replay timer timeout */
462*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO15	0x00000008	/* replay num pollover */
463*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO14	0x00000004	/* bad DLLP */
464*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO13	0x00000002	/* bad TLP */
465*7532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO12	0x00000001	/* receiver error mask */
466*7532SSean.Ye@Sun.COM #define	PEX_NF_IO19	0x00020000	/* surprise link down */
467*7532SSean.Ye@Sun.COM #define	PEX_NF_IO17	0x00010000	/* received correctable error message */
468*7532SSean.Ye@Sun.COM #define	PEX_NF_IO16	0x00008000	/* replay timer timeout */
469*7532SSean.Ye@Sun.COM #define	PEX_NF_IO15	0x00004000	/* replay num pollover */
470*7532SSean.Ye@Sun.COM #define	PEX_NF_IO14	0x00002000	/* bad DLLP */
471*7532SSean.Ye@Sun.COM #define	PEX_NF_IO13	0x00001000	/* bad TLP */
472*7532SSean.Ye@Sun.COM #define	PEX_NF_IO12	0x00000800	/* receiver error mask */
473*7532SSean.Ye@Sun.COM #define	PEX_NF_IO11	0x00000400	/* received non fatal error message */
474*7532SSean.Ye@Sun.COM #define	PEX_NF_IO10	0x00000200	/* Received buffer overflow */
475*7532SSean.Ye@Sun.COM #define	PEX_NF_IO9	0x00000100	/* Malformed TLP */
476*7532SSean.Ye@Sun.COM #define	PEX_NF_IO8	0x00000080
477*7532SSean.Ye@Sun.COM #define	PEX_NF_IO7	0x00000040
478*7532SSean.Ye@Sun.COM #define	PEX_NF_IO6	0x00000020	/* completion timeout */
479*7532SSean.Ye@Sun.COM #define	PEX_NF_IO5	0x00000010	/* flow control protocol */
480*7532SSean.Ye@Sun.COM #define	PEX_NF_IO4	0x00000008	/* poisoned TLP */
481*7532SSean.Ye@Sun.COM #define	PEX_NF_IO3	0x00000004
482*7532SSean.Ye@Sun.COM #define	PEX_NF_IO2	0x00000002
483*7532SSean.Ye@Sun.COM #define	PEX_NF_IO0	0x00000001	/* data link layer protocol */
484*7532SSean.Ye@Sun.COM 
485*7532SSean.Ye@Sun.COM #define	ERR_FAT_TH2	0x02	/* >tmid thermal event */
486*7532SSean.Ye@Sun.COM #define	ERR_FAT_TH1	0x01	/* Catastrophic on-die thermal event */
487*7532SSean.Ye@Sun.COM 
488*7532SSean.Ye@Sun.COM #define	ERR_NF_TH5	0x10	/* timeout on cooling update */
489*7532SSean.Ye@Sun.COM #define	ERR_NF_TH4	0x08	/* TSMAX update */
490*7532SSean.Ye@Sun.COM #define	ERR_NF_TH3	0x04	/* on-die throttling event */
491*7532SSean.Ye@Sun.COM 
492*7532SSean.Ye@Sun.COM #define	EMASK_TH5	0x0010 	/* TH5Msk timeout on cooling update */
493*7532SSean.Ye@Sun.COM #define	EMASK_TH4	0x0008 	/* TH4Msk TSMAX update */
494*7532SSean.Ye@Sun.COM #define	EMASK_TH3	0x0004 	/* TH3Msk on-die throttling event */
495*7532SSean.Ye@Sun.COM #define	EMASK_TH2	0x0002 	/* TH2Msk >tmid thermal event */
496*7532SSean.Ye@Sun.COM #define	EMASK_TH1	0x0001 	/* TH1Msk Catastrophic on-die thermal event */
497*7532SSean.Ye@Sun.COM 
498*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB(ferr) ( \
499*7532SSean.Ye@Sun.COM 	((ferr) & (GE_FSB0_FATAL|GE_FSB0_NF)) ? 0 : \
500*7532SSean.Ye@Sun.COM 	((ferr) & (GE_FSB1_FATAL|GE_FSB1_NF)) ? 1 : \
501*7532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300) && \
502*7532SSean.Ye@Sun.COM 	((ferr) & (GE_FERR_FSB2_FATAL|GE_FERR_FSB2_NF)) ? 2 : \
503*7532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300) && \
504*7532SSean.Ye@Sun.COM 	((ferr) & (GE_FERR_FSB3_FATAL|GE_FERR_FSB3_NF)) ? 3 : \
505*7532SSean.Ye@Sun.COM 	-1)
506*7532SSean.Ye@Sun.COM 
507*7532SSean.Ye@Sun.COM #define	GE_NERR_TO_FERR_FSB(nerr) \
508*7532SSean.Ye@Sun.COM 	((((nerr) & GE_NERR_FSB3_FATAL) ? GE_FERR_FSB3_FATAL : 0) | \
509*7532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB2_FATAL) ? GE_FERR_FSB2_FATAL : 0) | \
510*7532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB1_FATAL) ? GE_FSB1_FATAL : 0) | \
511*7532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB0_FATAL) ? GE_FSB0_FATAL : 0) | \
512*7532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB3_NF) ? GE_FERR_FSB3_NF : 0) | \
513*7532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB2_NF) ? GE_FERR_FSB2_NF : 0) | \
514*7532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB1_NF) ? GE_FSB1_NF : 0) | \
515*7532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB0_NF) ? GE_FSB0_NF : 0))
516*7532SSean.Ye@Sun.COM 
517*7532SSean.Ye@Sun.COM #define	GE_ERR_PEX(ferr) ( \
518*7532SSean.Ye@Sun.COM 	((ferr) & (GE_ESI_FATAL|GE_ESI_NF)) ? 0 : \
519*7532SSean.Ye@Sun.COM 	((nb_chipset == INTEL_NB_7300 || nb_chipset == INTEL_NB_5400) && \
520*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX1_FATAL|GE_PCIEX1_NF))) ? 1 : \
521*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX2_FATAL|GE_PCIEX2_NF)) ? 2 : \
522*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX3_FATAL|GE_PCIEX3_NF)) ? 3 : \
523*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX4_FATAL|GE_PCIEX4_NF)) ? 4 : \
524*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX5_FATAL|GE_PCIEX5_NF)) ? 5 : \
525*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX6_FATAL|GE_PCIEX6_NF)) ? 6 : \
526*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX7_FATAL|GE_PCIEX7_NF)) ? 7 : \
527*7532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_5400) && \
528*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX8_FATAL|GE_PCIEX8_NF)) ? 8 : \
529*7532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX9_FATAL|GE_PCIEX9_NF)) ? 9 : \
530*7532SSean.Ye@Sun.COM 	-1)
531*7532SSean.Ye@Sun.COM 
532*7532SSean.Ye@Sun.COM #define	GE_FERR_FATAL	((nb_chipset == INTEL_NB_7300) ? \
533*7532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FERR_FSB3_FATAL|GE_FERR_FSB2_FATAL| \
534*7532SSean.Ye@Sun.COM 	GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL|GE_PCIEX7_FATAL| \
535*7532SSean.Ye@Sun.COM 	GE_PCIEX6_FATAL| GE_PCIEX5_FATAL|GE_PCIEX4_FATAL|GE_PCIEX3_FATAL| \
536*7532SSean.Ye@Sun.COM 	GE_PCIEX2_FATAL| GE_ESI_FATAL) :  \
537*7532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL| \
538*7532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL|GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL| \
539*7532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX2_FATAL|GE_ESI_FATAL))
540*7532SSean.Ye@Sun.COM 
541*7532SSean.Ye@Sun.COM #define	GE_NERR_FATAL	((nb_chipset == INTEL_NB_7300) ? \
542*7532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_NERR_FSB3_FATAL|GE_NERR_FSB2_FATAL| \
543*7532SSean.Ye@Sun.COM 	GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL|GE_PCIEX7_FATAL| \
544*7532SSean.Ye@Sun.COM 	GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL|GE_PCIEX3_FATAL| \
545*7532SSean.Ye@Sun.COM 	GE_PCIEX2_FATALGE_ESI_FATAL) :  \
546*7532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL| \
547*7532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL|GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL| \
548*7532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX2_FATAL|GE_ESI_FATAL))
549*7532SSean.Ye@Sun.COM 
550*7532SSean.Ye@Sun.COM #define	GE_PCIEX_FATAL	(GE_ESI_FATAL|GE_PCIEX1_FATAL|GE_PCIEX2_FATAL| \
551*7532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX4_FATAL|GE_PCIEX5_FATAL|GE_PCIEX6_FATAL| \
552*7532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL)
553*7532SSean.Ye@Sun.COM #define	GE_PCIEX_NF	(GE_ESI_NF|GE_PCIEX1_NF|GE_PCIEX2_NF|GE_PCIEX3_NF| \
554*7532SSean.Ye@Sun.COM 	GE_PCIEX4_NF|GE_PCIEX5_NF|GE_PCIEX6_NF|GE_PCIEX7_NF)
555*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB_FATAL	((nb_chipset == INTEL_NB_7300) ? \
556*7532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL|GE_FERR_FSB2_FATAL|GE_FERR_FSB3_FATAL) : \
557*7532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL))
558*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB_FATAL	((nb_chipset == INTEL_NB_7300) ? \
559*7532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL|GE_NERR_FSB2_FATAL|GE_NERR_FSB3_FATAL) : \
560*7532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL))
561*7532SSean.Ye@Sun.COM #define	GE_FERR_FSB_NF	((nb_chipset == INTEL_NB_7300) ? \
562*7532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF|GE_FERR_FSB2_NF|GE_FERR_FSB3_NF) : \
563*7532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF))
564*7532SSean.Ye@Sun.COM #define	GE_NERR_FSB_NF	((nb_chipset == INTEL_NB_7300) ? \
565*7532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF|GE_NERR_FSB2_NF|GE_NERR_FSB3_NF) : \
566*7532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF))
567*7532SSean.Ye@Sun.COM 
568*7532SSean.Ye@Sun.COM #define	FERR_FBD_CHANNEL(reg)	((reg)>>28 & 3)
569*7532SSean.Ye@Sun.COM 
570*7532SSean.Ye@Sun.COM #define	NB5000_STEPPING()	nb_pci_getw(0, 0, 0, 8, 0)
571*7532SSean.Ye@Sun.COM 
572*7532SSean.Ye@Sun.COM #define	FERR_GLOBAL_RD()	((nb_chipset == INTEL_NB_7300) ? \
573*7532SSean.Ye@Sun.COM 				    ((uint64_t)nb_pci_getl(0, 16, 2, \
574*7532SSean.Ye@Sun.COM 				    0x48, 0) << 32) | nb_pci_getl(0, 16, 2, \
575*7532SSean.Ye@Sun.COM 				    0x40, 0) : \
576*7532SSean.Ye@Sun.COM 				    (uint64_t)nb_pci_getl(0, 16, 2, 0x40, 0))
577*7532SSean.Ye@Sun.COM #define	NERR_GLOBAL_RD()	nb_pci_getl(0, 16, 2, 0x44, 0)
578*7532SSean.Ye@Sun.COM #define	FERR_FAT_FSB_RD(fsb, ip)	((nb_chipset == INTEL_NB_7300) ? \
579*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc0 : 0x40, ip) : \
580*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x480 : 0x180, ip))
581*7532SSean.Ye@Sun.COM #define	FERR_NF_FSB_RD(fsb, ip)	((nb_chipset == INTEL_NB_7300) ? \
582*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc1 : 0x41, ip) : \
583*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x481 : 0x181, ip))
584*7532SSean.Ye@Sun.COM #define	NERR_FAT_FSB_RD(fsb, ip) ((nb_chipset == INTEL_NB_7300) ? \
585*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc2 : 0x42, ip) : \
586*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x482 : 0x182, ip))
587*7532SSean.Ye@Sun.COM #define	NERR_NF_FSB_RD(fsb, ip) ((nb_chipset == INTEL_NB_7300) ? \
588*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc3 : 0x43, ip) : \
589*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x483 : 0x183, ip))
590*7532SSean.Ye@Sun.COM 
591*7532SSean.Ye@Sun.COM #define	NRECFSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
592*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc4 : 0x44, 0) : \
593*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x484 : 0x184, 0))
594*7532SSean.Ye@Sun.COM #define	NRECFSB_WR(fsb)	\
595*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
596*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc4 : 0x44, \
597*7532SSean.Ye@Sun.COM 		    0); \
598*7532SSean.Ye@Sun.COM 	} else { \
599*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x484 : 0x184, 0); \
600*7532SSean.Ye@Sun.COM 	}
601*7532SSean.Ye@Sun.COM #define	RECFSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
602*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc8 : 0x48, 0) : \
603*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x488 : 0x188, 0))
604*7532SSean.Ye@Sun.COM #define	RECFSB_WR(fsb) \
605*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
606*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc8 : 0x48, \
607*7532SSean.Ye@Sun.COM 		    0); \
608*7532SSean.Ye@Sun.COM 	} else { \
609*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x488 : 0x188, 0); \
610*7532SSean.Ye@Sun.COM 	}
611*7532SSean.Ye@Sun.COM #define	NRECADDR_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
612*7532SSean.Ye@Sun.COM 	((uint64_t)(nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, \
613*7532SSean.Ye@Sun.COM 	(fsb & 1) ? 0xd0 : 0x50, 0)) << 32) | \
614*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xcc : 0x4c, 0) : \
615*7532SSean.Ye@Sun.COM 	((uint64_t)(nb_pci_getb(0, 16, 0, fsb ? 0x490 : 0x190, 0)) << 32) | \
616*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x48c : 0x18c, 0))
617*7532SSean.Ye@Sun.COM #define	NRECADDR_WR(fsb) \
618*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
619*7532SSean.Ye@Sun.COM 		nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd0 : 0x50, \
620*7532SSean.Ye@Sun.COM 		    0); \
621*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xcc : 0x4c, \
622*7532SSean.Ye@Sun.COM 		    0); \
623*7532SSean.Ye@Sun.COM 	} else { \
624*7532SSean.Ye@Sun.COM 		nb_pci_putb(0, 16, 0, fsb ? 0x490 : 0x190, 0); \
625*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x48c : 0x18c, 0); \
626*7532SSean.Ye@Sun.COM 	}
627*7532SSean.Ye@Sun.COM #define	EMASK_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
628*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd2 : 0x52, 0) : \
629*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x492 : 0x192, 0))
630*7532SSean.Ye@Sun.COM #define	ERR0_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
631*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd4 : 0x54, 0) : \
632*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x494 : 0x194, 0))
633*7532SSean.Ye@Sun.COM #define	ERR1_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
634*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd6 : 0x56, 0) : \
635*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x496 : 0x196, 0))
636*7532SSean.Ye@Sun.COM #define	ERR2_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
637*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd8 : 0x58, 0) : \
638*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x498 : 0x198, 0))
639*7532SSean.Ye@Sun.COM #define	MCERR_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
640*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xda : 0x5a, 0) : \
641*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x49a : 0x19a, 0))
642*7532SSean.Ye@Sun.COM 
643*7532SSean.Ye@Sun.COM #define	FERR_GLOBAL_WR(val) \
644*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) \
645*7532SSean.Ye@Sun.COM 	{ \
646*7532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x48, (uint32_t)(val >> 32)); \
647*7532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x40, (uint32_t)val); \
648*7532SSean.Ye@Sun.COM 	} else { \
649*7532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x40, (uint32_t)val); \
650*7532SSean.Ye@Sun.COM 	}
651*7532SSean.Ye@Sun.COM #define	NERR_GLOBAL_WR(val)	nb_pci_putl(0, 16, 2, 0x44, val)
652*7532SSean.Ye@Sun.COM #define	FERR_FAT_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
653*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc0 : 0x40, val) : \
654*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x480 : 0x180, val))
655*7532SSean.Ye@Sun.COM #define	FERR_NF_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
656*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc1 : 0x41, val) : \
657*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x481 : 0x181, val))
658*7532SSean.Ye@Sun.COM #define	NERR_FAT_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
659*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc2 : 0x42, val) : \
660*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x482 : 0x182, val))
661*7532SSean.Ye@Sun.COM #define	NERR_NF_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
662*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc3 : 0x43, val) : \
663*7532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x483 : 0x183, val))
664*7532SSean.Ye@Sun.COM #define	EMASK_FSB_WR(fsb, val) \
665*7532SSean.Ye@Sun.COM 	{ \
666*7532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
667*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, ((fsb) & 2) ? 3 : 0, \
668*7532SSean.Ye@Sun.COM 			    ((fsb) & 1) ? 0xd2 : 0x52, val); \
669*7532SSean.Ye@Sun.COM 		else \
670*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x492 : 0x192, val); \
671*7532SSean.Ye@Sun.COM 	}
672*7532SSean.Ye@Sun.COM #define	ERR0_FSB_WR(fsb, val) \
673*7532SSean.Ye@Sun.COM 	{ \
674*7532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
675*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
676*7532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd4 : 0x54, val); \
677*7532SSean.Ye@Sun.COM 		else \
678*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x494 : 0x194, val); \
679*7532SSean.Ye@Sun.COM 	}
680*7532SSean.Ye@Sun.COM #define	ERR1_FSB_WR(fsb, val) \
681*7532SSean.Ye@Sun.COM 	{ \
682*7532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
683*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
684*7532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd6 : 0x56, val); \
685*7532SSean.Ye@Sun.COM 		else \
686*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x496 : 0x196, val); \
687*7532SSean.Ye@Sun.COM 	}
688*7532SSean.Ye@Sun.COM #define	ERR2_FSB_WR(fsb, val) \
689*7532SSean.Ye@Sun.COM 	{ \
690*7532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
691*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
692*7532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd8 : 0x58, val); \
693*7532SSean.Ye@Sun.COM 		else \
694*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x498 : 0x198, val); \
695*7532SSean.Ye@Sun.COM 	}
696*7532SSean.Ye@Sun.COM #define	MCERR_FSB_WR(fsb, val) \
697*7532SSean.Ye@Sun.COM 	{ \
698*7532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
699*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
700*7532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xda : 0x5a, val); \
701*7532SSean.Ye@Sun.COM 		else \
702*7532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x49a : 0x19a, val); \
703*7532SSean.Ye@Sun.COM 	}
704*7532SSean.Ye@Sun.COM 
705*7532SSean.Ye@Sun.COM #define	NRECSF_RD()	(nb_chipset == INTEL_NB_5000X || \
706*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) ? ((uint64_t)( \
707*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb4, 0)) << 32) | \
708*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb0, 0) : 0LL
709*7532SSean.Ye@Sun.COM #define	RECSF_RD()	(nb_chipset == INTEL_NB_5000X || \
710*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) ? ((uint64_t)( \
711*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xbc, 0)) << 32) | \
712*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb8, 0) : 0LL
713*7532SSean.Ye@Sun.COM 
714*7532SSean.Ye@Sun.COM #define	NRECSF_WR()	if (nb_chipset == INTEL_NB_5000X || \
715*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) { \
716*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xbc, 0); \
717*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xb0, 0); \
718*7532SSean.Ye@Sun.COM 	}
719*7532SSean.Ye@Sun.COM #define	RECSF_WR()	if (nb_chipset == INTEL_NB_5000X || \
720*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) { \
721*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xbc, 0); \
722*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xb8, 0); \
723*7532SSean.Ye@Sun.COM 	}
724*7532SSean.Ye@Sun.COM 
725*7532SSean.Ye@Sun.COM #define	FERR_FAT_INT_RD(ip)	(((nb_chipset == INTEL_NB_5400) ? \
726*7532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc1, ip) << 8) : (uint16_t)0) | \
727*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc0, ip))
728*7532SSean.Ye@Sun.COM #define	FERR_NF_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
729*7532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc3, ip) << 8) | \
730*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc2, ip) : \
731*7532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc1, ip))
732*7532SSean.Ye@Sun.COM #define	NERR_FAT_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
733*7532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc4, ip) << 8) | \
734*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc5, ip) : \
735*7532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc2, ip))
736*7532SSean.Ye@Sun.COM #define	NERR_NF_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
737*7532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc6, ip) << 8) | \
738*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc7, ip) : \
739*7532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc3, ip))
740*7532SSean.Ye@Sun.COM #define	EMASK_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
741*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd0, 0) : nb_pci_getb(0, 16, 2, 0xcc, 0))
742*7532SSean.Ye@Sun.COM #define	ERR0_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
743*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd4, 0) : nb_pci_getb(0, 16, 2, 0xd0, 0))
744*7532SSean.Ye@Sun.COM #define	ERR1_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
745*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd8, 0) : nb_pci_getb(0, 16, 2, 0xd1, 0))
746*7532SSean.Ye@Sun.COM #define	ERR2_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
747*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xdc, 0) : nb_pci_getb(0, 16, 2, 0xd2, 0))
748*7532SSean.Ye@Sun.COM #define	MCERR_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
749*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xe0, 0) : nb_pci_getb(0, 16, 2, 0xd3, 0))
750*7532SSean.Ye@Sun.COM 
751*7532SSean.Ye@Sun.COM #define	FERR_FAT_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
752*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc0,  \
753*7532SSean.Ye@Sun.COM 					    val & 0xff); \
754*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc1, val >> 8); \
755*7532SSean.Ye@Sun.COM 				} else { \
756*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc0, val); \
757*7532SSean.Ye@Sun.COM 				}
758*7532SSean.Ye@Sun.COM #define	FERR_NF_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
759*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc2,  \
760*7532SSean.Ye@Sun.COM 					    val & 0xff); \
761*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc3, val >> 8); \
762*7532SSean.Ye@Sun.COM 				} else { \
763*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc1, val); \
764*7532SSean.Ye@Sun.COM 				}
765*7532SSean.Ye@Sun.COM #define	NERR_FAT_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
766*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc4,  \
767*7532SSean.Ye@Sun.COM 					    val & 0xff); \
768*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc5, val >> 8); \
769*7532SSean.Ye@Sun.COM 				} else { \
770*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc2, val); \
771*7532SSean.Ye@Sun.COM 				}
772*7532SSean.Ye@Sun.COM #define	NERR_NF_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
773*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc6,  \
774*7532SSean.Ye@Sun.COM 					    val & 0xff); \
775*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc7, val >> 8); \
776*7532SSean.Ye@Sun.COM 				} else { \
777*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc3, val); \
778*7532SSean.Ye@Sun.COM 				}
779*7532SSean.Ye@Sun.COM #define	EMASK_5000_INT_WR(val)	nb_pci_putb(0, 16, 2, 0xcc, val)
780*7532SSean.Ye@Sun.COM #define	EMASK_5400_INT_WR(val)	nb_pci_putl(0, 16, 2, 0xd0, val)
781*7532SSean.Ye@Sun.COM #define	EMASK_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
782*7532SSean.Ye@Sun.COM 					EMASK_5400_INT_WR(val); \
783*7532SSean.Ye@Sun.COM 				} else { \
784*7532SSean.Ye@Sun.COM 					EMASK_5000_INT_WR(val); \
785*7532SSean.Ye@Sun.COM 				}
786*7532SSean.Ye@Sun.COM #define	ERR0_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
787*7532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xd4, val); \
788*7532SSean.Ye@Sun.COM 				} else { \
789*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd0, val); \
790*7532SSean.Ye@Sun.COM 				}
791*7532SSean.Ye@Sun.COM #define	ERR1_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
792*7532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xd8, val); \
793*7532SSean.Ye@Sun.COM 				} else { \
794*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd1, val); \
795*7532SSean.Ye@Sun.COM 				}
796*7532SSean.Ye@Sun.COM #define	ERR2_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
797*7532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xdc, val); \
798*7532SSean.Ye@Sun.COM 				} else { \
799*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd2, val); \
800*7532SSean.Ye@Sun.COM 				}
801*7532SSean.Ye@Sun.COM #define	MCERR_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
802*7532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xe0, val); \
803*7532SSean.Ye@Sun.COM 				} else { \
804*7532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd3, val); \
805*7532SSean.Ye@Sun.COM 				}
806*7532SSean.Ye@Sun.COM 
807*7532SSean.Ye@Sun.COM #define	NRECINT_RD()		nb_pci_getl(0, 16, 2, 0xc4, 0)
808*7532SSean.Ye@Sun.COM #define	RECINT_RD()		nb_pci_getl(0, 16, 2, 0xc8, 0)
809*7532SSean.Ye@Sun.COM 
810*7532SSean.Ye@Sun.COM #define	NRECINT_WR()		nb_pci_putl(0, 16, 2, 0xc4, 0)
811*7532SSean.Ye@Sun.COM #define	RECINT_WR()		nb_pci_putl(0, 16, 2, 0xc8, 0)
812*7532SSean.Ye@Sun.COM 
813*7532SSean.Ye@Sun.COM #define	FERR_FAT_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0x98, ip)
814*7532SSean.Ye@Sun.COM #define	NERR_FAT_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0x9c, ip)
815*7532SSean.Ye@Sun.COM #define	FERR_NF_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0xa0, ip)
816*7532SSean.Ye@Sun.COM #define	NERR_NF_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0xa4, ip)
817*7532SSean.Ye@Sun.COM #define	EMASK_FBD_RD()		nb_pci_getl(0, 16, 1, 0xa8, 0)
818*7532SSean.Ye@Sun.COM #define	ERR0_FBD_RD()		nb_pci_getl(0, 16, 1, 0xac, 0)
819*7532SSean.Ye@Sun.COM #define	ERR1_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb0, 0)
820*7532SSean.Ye@Sun.COM #define	ERR2_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb4, 0)
821*7532SSean.Ye@Sun.COM #define	MCERR_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb8, 0)
822*7532SSean.Ye@Sun.COM 
823*7532SSean.Ye@Sun.COM #define	FERR_FAT_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0x98, val)
824*7532SSean.Ye@Sun.COM #define	NERR_FAT_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0x9c, val)
825*7532SSean.Ye@Sun.COM #define	FERR_NF_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa0, val)
826*7532SSean.Ye@Sun.COM #define	NERR_NF_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa4, val)
827*7532SSean.Ye@Sun.COM #define	EMASK_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa8, val)
828*7532SSean.Ye@Sun.COM #define	ERR0_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xac, val)
829*7532SSean.Ye@Sun.COM #define	ERR1_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb0, val)
830*7532SSean.Ye@Sun.COM #define	ERR2_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb4, val)
831*7532SSean.Ye@Sun.COM #define	MCERR_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb8, val)
832*7532SSean.Ye@Sun.COM 
833*7532SSean.Ye@Sun.COM #define	NRECMEMA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
834*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, (branch) ? 22 : 21, 1, 0xbe, 0) : \
835*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 1, 0xbe, 0))
836*7532SSean.Ye@Sun.COM #define	NRECMEMB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
837*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc0, 0) : \
838*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xc0, 0))
839*7532SSean.Ye@Sun.COM #define	NRECFGLOG_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
840*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x74, 0) : \
841*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xc4, 0))
842*7532SSean.Ye@Sun.COM #define	NRECFBDA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
843*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc4, 0) : \
844*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xc4 : 0xc8, 0))
845*7532SSean.Ye@Sun.COM #define	NRECFBDB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
846*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc8, 0) : \
847*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xc8 : 0xcc, 0))
848*7532SSean.Ye@Sun.COM #define	NRECFBDC_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
849*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xcc, 0) : \
850*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xcc : 0xd0, 0))
851*7532SSean.Ye@Sun.COM #define	NRECFBDD_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
852*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd0, 0) : \
853*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xd0 : 0xd4, 0))
854*7532SSean.Ye@Sun.COM #define	NRECFBDE_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
855*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd4, 0) : \
856*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xd4 : 0xd8, 0))
857*7532SSean.Ye@Sun.COM #define	NRECFBDF_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
858*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd8, 0) : \
859*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ? nb_pci_getw(0, 16, 1, 0xd8, 0) : 0)
860*7532SSean.Ye@Sun.COM #define	REDMEMB_RD()	(nb_chipset == INTEL_NB_5400 ? \
861*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x7c, 0) : \
862*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0x7c, 0))
863*7532SSean.Ye@Sun.COM #define	RECMEMA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
864*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe0, 0) & 0xffffff : \
865*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe0 : 0xe2, 0))
866*7532SSean.Ye@Sun.COM #define	RECMEMB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
867*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe4, 0) : \
868*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xe4, 0))
869*7532SSean.Ye@Sun.COM #define	RECFGLOG_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
870*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x78, 0) : \
871*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ?  nb_pci_getl(0, 16, 1, 0x78, 0) : \
872*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xe8, 0))
873*7532SSean.Ye@Sun.COM #define	RECFBDA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
874*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe8, 0) : \
875*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe8 : 0xec, 0))
876*7532SSean.Ye@Sun.COM #define	RECFBDB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
877*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xec, 0) : \
878*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xec : 0xf0, 0))
879*7532SSean.Ye@Sun.COM #define	RECFBDC_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
880*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf0, 0) : \
881*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf0 : 0xf4, 0))
882*7532SSean.Ye@Sun.COM #define	RECFBDD_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
883*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf4, 0) : \
884*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf4 : 0xf8, 0))
885*7532SSean.Ye@Sun.COM #define	RECFBDE_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
886*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf8, 0) : \
887*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf8 : 0xfc, 0))
888*7532SSean.Ye@Sun.COM #define	RECFBDF_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
889*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xfc, 0) : \
890*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ? nb_pci_getw(0, 16, 1, 0xfc, 0) : 0)
891*7532SSean.Ye@Sun.COM #define	NRECMEMA_WR(branch)	(nb_chipset == INTEL_NB_5400 ? \
892*7532SSean.Ye@Sun.COM 	nb_pci_putw(0, (branch) ? 22 : 21, 1, 0xbe, 0) : \
893*7532SSean.Ye@Sun.COM 	nb_pci_putw(0, 16, 1, 0xbe, 0))
894*7532SSean.Ye@Sun.COM #define	NRECMEMB_WR(branch)	(nb_chipset == INTEL_NB_5400 ? \
895*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc0, 0) : \
896*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 16, 1, 0xc0, 0))
897*7532SSean.Ye@Sun.COM #define	NRECFGLOG_WR(branch) \
898*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
899*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x74, 0); \
900*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
901*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x74, 0); \
902*7532SSean.Ye@Sun.COM 	else \
903*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc4, 0)
904*7532SSean.Ye@Sun.COM #define	NRECFBDA_WR(branch) \
905*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
906*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc4, 0); \
907*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
908*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc4, 0); \
909*7532SSean.Ye@Sun.COM 	else \
910*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc8, 0)
911*7532SSean.Ye@Sun.COM #define	NRECFBDB_WR(branch) \
912*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
913*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc8, 0); \
914*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
915*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc8, 0); \
916*7532SSean.Ye@Sun.COM 	else \
917*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xcc, 0)
918*7532SSean.Ye@Sun.COM #define	NRECFBDC_WR(branch) \
919*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
920*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xcc, 0); \
921*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
922*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xcc, 0); \
923*7532SSean.Ye@Sun.COM 	else \
924*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd0, 0)
925*7532SSean.Ye@Sun.COM #define	NRECFBDD_WR(branch) \
926*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
927*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd0, 0); \
928*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
929*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd0, 0); \
930*7532SSean.Ye@Sun.COM 	else \
931*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd4, 0)
932*7532SSean.Ye@Sun.COM #define	NRECFBDE_WR(branch) \
933*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
934*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd4, 0); \
935*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
936*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd4, 0); \
937*7532SSean.Ye@Sun.COM 	else \
938*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd8, 0)
939*7532SSean.Ye@Sun.COM #define	NRECFBDF_WR(branch) \
940*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
941*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd8, 0); \
942*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
943*7532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, 0xd8, 0);
944*7532SSean.Ye@Sun.COM #define	REDMEMB_WR(branch) \
945*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
946*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x7c, 0); \
947*7532SSean.Ye@Sun.COM 	else \
948*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x7c, 0)
949*7532SSean.Ye@Sun.COM #define	RECMEMA_WR(branch) \
950*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
951*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe0, 0); \
952*7532SSean.Ye@Sun.COM 	else \
953*7532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe0 : \
954*7532SSean.Ye@Sun.COM 		    0xe2, 0)
955*7532SSean.Ye@Sun.COM #define	RECMEMB_WR(branch) \
956*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
957*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe4, 0); \
958*7532SSean.Ye@Sun.COM 	else \
959*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe4, 0)
960*7532SSean.Ye@Sun.COM #define	RECFGLOG_WR(branch) \
961*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
962*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x78, 0); \
963*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
964*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x78, 0); \
965*7532SSean.Ye@Sun.COM 	else \
966*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe8, 0)
967*7532SSean.Ye@Sun.COM #define	RECFBDA_WR(branch) \
968*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
969*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe8, 0); \
970*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
971*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe8, 0); \
972*7532SSean.Ye@Sun.COM 	else \
973*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xec, 0)
974*7532SSean.Ye@Sun.COM #define	RECFBDB_WR(branch) \
975*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
976*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xec, 0); \
977*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
978*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xec, 0); \
979*7532SSean.Ye@Sun.COM 	else \
980*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf0, 0)
981*7532SSean.Ye@Sun.COM #define	RECFBDC_WR(branch) \
982*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
983*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf0, 0); \
984*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
985*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf0, 0); \
986*7532SSean.Ye@Sun.COM 	else \
987*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf4, 0)
988*7532SSean.Ye@Sun.COM #define	RECFBDD_WR(branch) \
989*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
990*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf4, 0); \
991*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
992*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf4, 0); \
993*7532SSean.Ye@Sun.COM 	else \
994*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf8, 0)
995*7532SSean.Ye@Sun.COM #define	RECFBDE_WR(branch) \
996*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
997*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf8, 0); \
998*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
999*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf8, 0); \
1000*7532SSean.Ye@Sun.COM 	else \
1001*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xfc, 0)
1002*7532SSean.Ye@Sun.COM #define	RECFBDF_WR(branch) \
1003*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
1004*7532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xfc, 0); \
1005*7532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
1006*7532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, 0xf8, 0); \
1007*7532SSean.Ye@Sun.COM 
1008*7532SSean.Ye@Sun.COM #define	MC_RD()		nb_pci_getl(0, 16, 1, 0x40, 0)
1009*7532SSean.Ye@Sun.COM #define	MC_WR(val)	nb_pci_putl(0, 16, 1, 0x40, val)
1010*7532SSean.Ye@Sun.COM #define	MCA_RD()	nb_pci_getl(0, 16, 1, 0x58, 0)
1011*7532SSean.Ye@Sun.COM #define	TOLM_RD()	nb_pci_getw(0, 16, 1, 0x6c, 0)
1012*7532SSean.Ye@Sun.COM 
1013*7532SSean.Ye@Sun.COM #define	MTR_RD(branch, dimm) (nb_chipset == INTEL_NB_5400 ? \
1014*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, (branch) == 0 ? 21 : 22, 0, 0x80 + dimm * 2, 0) : \
1015*7532SSean.Ye@Sun.COM 	((branch) == 0) ? \
1016*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, \
1017*7532SSean.Ye@Sun.COM 	dimm >= 4 ? 0x82 + (dimm & 3) * 4 : 0x80 + dimm * 4, 0) : \
1018*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1019*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, \
1020*7532SSean.Ye@Sun.COM 	dimm >= 4 ? 0x82 + (dimm & 3) * 4 : 0x80 + dimm * 4, 0) : 0)
1021*7532SSean.Ye@Sun.COM #define	MIR_RD(reg)	nb_pci_getw(0, 16, 1, 0x80 + ((reg)*4), 0)
1022*7532SSean.Ye@Sun.COM 
1023*7532SSean.Ye@Sun.COM #define	DMIR_RD(branch, reg) \
1024*7532SSean.Ye@Sun.COM 	((branch) == 0) ? nb_pci_getl(0, 21, 0, 0x90 + ((reg)*4), 0) : \
1025*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1026*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0x90 + ((reg)*4), 0) : 0
1027*7532SSean.Ye@Sun.COM 
1028*7532SSean.Ye@Sun.COM #define	SPCPC_RD(branch) (nb_chipset == INTEL_NB_5000P || \
1029*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1030*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? \
1031*7532SSean.Ye@Sun.COM 	(((branch) == 0) ? \
1032*7532SSean.Ye@Sun.COM 	(uint32_t)nb_pci_getb(0, 21, 0, 0x40, 0) : \
1033*7532SSean.Ye@Sun.COM 	    (nb_number_memory_controllers == 2) ? \
1034*7532SSean.Ye@Sun.COM 	    (uint32_t)nb_pci_getb(0, 22, 0, 0x40, 0) : 0) : \
1035*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, ((branch) == 0) ? 21 : 22, 0, 0x40, 0))
1036*7532SSean.Ye@Sun.COM 
1037*7532SSean.Ye@Sun.COM #define	SPCPC_SPARE_ENABLE (nb_chipset == INTEL_NB_5000P || \
1038*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1039*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 1 : 0x20)
1040*7532SSean.Ye@Sun.COM #define	SPCPC_SPRANK(spcpc) (nb_chipset == INTEL_NB_5000P || \
1041*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1042*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? \
1043*7532SSean.Ye@Sun.COM 	(((spcpc) >> 1) & 7) : ((spcpc) & 0xf))
1044*7532SSean.Ye@Sun.COM 
1045*7532SSean.Ye@Sun.COM #define	SPCPS_RD(branch) ((branch) == 0) ? \
1046*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 21, 0, nb_chipset == INTEL_NB_5000P || \
1047*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1048*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0) : \
1049*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1050*7532SSean.Ye@Sun.COM 	nb_pci_getb(0, 22, 0, nb_chipset == INTEL_NB_5000P || \
1051*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1052*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0) : 0
1053*7532SSean.Ye@Sun.COM 
1054*7532SSean.Ye@Sun.COM #define	SPCPS_WR(branch) \
1055*7532SSean.Ye@Sun.COM 	if ((branch) == 0) { \
1056*7532SSean.Ye@Sun.COM 		nb_pci_putb(0, 21, 0, nb_chipset == INTEL_NB_5000P || \
1057*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000X || \
1058*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000V || \
1059*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0); \
1060*7532SSean.Ye@Sun.COM 	} else if (nb_number_memory_controllers == 2) { \
1061*7532SSean.Ye@Sun.COM 		nb_pci_putb(0, 22, 0, nb_chipset == INTEL_NB_5000P || \
1062*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000X || \
1063*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000V || \
1064*7532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0); \
1065*7532SSean.Ye@Sun.COM 	}
1066*7532SSean.Ye@Sun.COM 
1067*7532SSean.Ye@Sun.COM #define	SPCPS_SPARE_DEPLOYED (nb_chipset == INTEL_NB_5000P || \
1068*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1069*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x11 : 0x60)
1070*7532SSean.Ye@Sun.COM #define	SPCPS_FAILED_RANK(spcps) (nb_chipset == INTEL_NB_5000P || \
1071*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1072*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? (((spcps) >> 1) & 7) : ((spcps) & 0xf))
1073*7532SSean.Ye@Sun.COM 
1074*7532SSean.Ye@Sun.COM #define	UERRCNT_RD(branch) ((branch) == 0) ? \
1075*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xa4, 0) : \
1076*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1077*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xa4, 0) : 0
1078*7532SSean.Ye@Sun.COM #define	CERRCNT_RD(branch) ((branch) == 0) ? \
1079*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xa8, 0) : \
1080*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1081*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xa8, 0) : 0
1082*7532SSean.Ye@Sun.COM #define	CERRCNTA_RD(branch, channel) \
1083*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
1084*7532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe0 : 0xf0, 0)
1085*7532SSean.Ye@Sun.COM #define	CERRCNTB_RD(branch, channel) \
1086*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
1087*7532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe4 : 0xf4, 0)
1088*7532SSean.Ye@Sun.COM #define	CERRCNTC_RD(branch, channel) \
1089*7532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300 ? \
1090*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
1091*7532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe8 : 0xf8, 0) : 0)
1092*7532SSean.Ye@Sun.COM #define	CERRCNTD_RD(branch, channel) \
1093*7532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300 ? \
1094*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
1095*7532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xec : 0xfc, 0) : 0)
1096*7532SSean.Ye@Sun.COM #define	BADRAMA_RD(branch) ((branch) == 0) ? \
1097*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xac, 0) : \
1098*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1099*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xac, 0) : 0
1100*7532SSean.Ye@Sun.COM #define	BADRAMB_RD(branch) ((branch) == 0) ? \
1101*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, 0xb0, 0) : \
1102*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1103*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, 0xb0, 0) : 0
1104*7532SSean.Ye@Sun.COM #define	BADCNT_RD(branch) ((branch) == 0) ? \
1105*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xb4, 0) : \
1106*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1107*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xb4, 0) : 0
1108*7532SSean.Ye@Sun.COM 
1109*7532SSean.Ye@Sun.COM #define	UERRCNT_WR(branch, val)	((branch) == 0) ? \
1110*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xa4, val) : \
1111*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1112*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xa4, val) \
1113*7532SSean.Ye@Sun.COM 					: 0
1114*7532SSean.Ye@Sun.COM #define	CERRCNT_WR(branch, val)	((branch) == 0) ? \
1115*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xa8, val) : \
1116*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1117*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xa8, val) : 0
1118*7532SSean.Ye@Sun.COM #define	BADRAMA_WR(branch, val)	((branch) == 0) ? \
1119*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xac, val) : \
1120*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1121*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xac, val) : 0
1122*7532SSean.Ye@Sun.COM #define	BADRAMB_WR(branch, val)	((branch) == 0) ? \
1123*7532SSean.Ye@Sun.COM 	nb_pci_putw(0, 21, 0, 0xb0, val) : \
1124*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1125*7532SSean.Ye@Sun.COM 	nb_pci_putw(0, 22, 0, 0xb0) : 0
1126*7532SSean.Ye@Sun.COM #define	BADCNT_WR(branch, val) ((branch) == 0) ? \
1127*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xb4, val) : \
1128*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1129*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xb4, val) : 0
1130*7532SSean.Ye@Sun.COM 
1131*7532SSean.Ye@Sun.COM #define	SPD_RD(branch, channel)	((branch) == 0) ? \
1132*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, 0x74 + ((channel) * 2), 0) : \
1133*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1134*7532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, 0x74 + ((channel) * 2), 0) : 0
1135*7532SSean.Ye@Sun.COM #define	SPDCMDRD(branch, channel) ((branch) == 0) ? \
1136*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0x78 + ((channel) * 4), 0) : \
1137*7532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
1138*7532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0x78 + ((channel) * 4), 0) : 0
1139*7532SSean.Ye@Sun.COM 
1140*7532SSean.Ye@Sun.COM #define	SPDCMD1_1_WR(val)	nb_pci_putl(0, 21, 0, 0x7c, val)
1141*7532SSean.Ye@Sun.COM #define	SPDCMD_WR(branch, channel, val)	\
1142*7532SSean.Ye@Sun.COM 	if ((branch) == 0) \
1143*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0x78 + ((channel) * 4), val); \
1144*7532SSean.Ye@Sun.COM 	else if (nb_number_memory_controllers == 2) \
1145*7532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0x78 + ((channel) * 4), val)
1146*7532SSean.Ye@Sun.COM 
1147*7532SSean.Ye@Sun.COM #define	UNCERRSTS_RD(pex)		nb_pci_getl(0, pex, 0, 0x104, 0)
1148*7532SSean.Ye@Sun.COM #define	UNCERRMSK_RD(pex) nb_pci_getl(0, pex, 0, 0x108, 0)
1149*7532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x154, 0)
1150*7532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x15c, 0)
1151*7532SSean.Ye@Sun.COM #define	PEX_NF_FERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x158, 0)
1152*7532SSean.Ye@Sun.COM #define	PEX_NF_NERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x160, 0)
1153*7532SSean.Ye@Sun.COM #define	PEX_ERR_DOCMD_RD(pex)	((nb_chipset == INTEL_NB_5400) ? \
1154*7532SSean.Ye@Sun.COM     nb_pci_getw(0, pex, 0, 0x144, 0) : nb_pci_getl(0, pex, 0, 0x144, 0))
1155*7532SSean.Ye@Sun.COM #define	PEX_ERR_PIN_MASK_RD(pex)	nb_pci_getw(0, pex, 0, 0x146, 0)
1156*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x148, 0)
1157*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x14c, 0)
1158*7532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x150, 0)
1159*7532SSean.Ye@Sun.COM 
1160*7532SSean.Ye@Sun.COM #define	UNCERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x104, val)
1161*7532SSean.Ye@Sun.COM #define	UNCERRMSK_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x108, val)
1162*7532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_ESI_WR(val) nb_pci_putl(0, 0, 0, 0x154, val)
1163*7532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_ESI_WR(val) nb_pci_putl(0, 0, 0, 0x15c, val)
1164*7532SSean.Ye@Sun.COM #define	PEX_NF_FERR_ESI_WR(val)	nb_pci_putl(0, 0, 0, 0x158, val)
1165*7532SSean.Ye@Sun.COM #define	PEX_NF_NERR_ESI_WR(val)	nb_pci_putl(0, 0, 0, 0x160, val)
1166*7532SSean.Ye@Sun.COM #define	PEX_ERR_DOCMD_WR(pex, val)	((nb_chipset == INTEL_NB_5400) ? \
1167*7532SSean.Ye@Sun.COM     nb_pci_putw(0, pex, 0, 0x144, val) : nb_pci_putl(0, pex, 0, 0x144, val))
1168*7532SSean.Ye@Sun.COM #define	PEX_ERR_PIN_MASK_WR(pex, val)	nb_pci_putw(0, pex, 0, 0x146, val)
1169*7532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x148, val)
1170*7532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x14c, val)
1171*7532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x150, val)
1172*7532SSean.Ye@Sun.COM 
1173*7532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x154, ip)
1174*7532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x15c, ip)
1175*7532SSean.Ye@Sun.COM #define	PEX_NF_FERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x158, ip)
1176*7532SSean.Ye@Sun.COM #define	PEX_NF_NERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x160, ip)
1177*7532SSean.Ye@Sun.COM #define	UNCERRSEV_RD(pex)	nb_pci_getl(0, pex, 0, 0x10c, 0)
1178*7532SSean.Ye@Sun.COM #define	CORERRSTS_RD(pex)	nb_pci_getl(0, pex, 0, 0x110, 0)
1179*7532SSean.Ye@Sun.COM #define	RPERRSTS_RD(pex)	nb_pci_getl(0, pex, 0, 0x130, 0)
1180*7532SSean.Ye@Sun.COM #define	RPERRSID_RD(pex)	nb_pci_getl(0, pex, 0, 0x134, 0)
1181*7532SSean.Ye@Sun.COM #define	AERRCAPCTRL_RD(pex)	nb_pci_getl(0, pex, 0, 0x118, 0)
1182*7532SSean.Ye@Sun.COM #define	PEXDEVSTS_RD(pex)	nb_pci_getw(0, pex, 0, 0x76, 0)
1183*7532SSean.Ye@Sun.COM #define	PEXROOTCTL_RD(pex)	nb_pci_getw(0, pex, 0, 0x88, 0)
1184*7532SSean.Ye@Sun.COM 
1185*7532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_WR(pex, val) nb_pci_putl(0, pex, 0, 0x154, val)
1186*7532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_WR(pex, val) nb_pci_putl(0, pex, 0, 0x15c, val)
1187*7532SSean.Ye@Sun.COM #define	PEX_NF_FERR_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x158, val)
1188*7532SSean.Ye@Sun.COM #define	PEX_NF_NERR_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x160, val)
1189*7532SSean.Ye@Sun.COM #define	CORERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x110, val)
1190*7532SSean.Ye@Sun.COM #define	UNCERRSEV_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x10c, val)
1191*7532SSean.Ye@Sun.COM #define	RPERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x130, val)
1192*7532SSean.Ye@Sun.COM #define	PEXDEVSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x76, val)
1193*7532SSean.Ye@Sun.COM #define	PEXROOTCTL_WR(pex, val)	nb_pci_putw(0, pex, 0, 0x88, val)
1194*7532SSean.Ye@Sun.COM 
1195*7532SSean.Ye@Sun.COM #define	PCISTS_RD(ip)		nb_pci_getw(0, 8, 0, 0x6, ip)
1196*7532SSean.Ye@Sun.COM #define	PCIDEVSTS_RD()		nb_pci_getw(0, 8, 0, 0x76, 0)
1197*7532SSean.Ye@Sun.COM #define	PCISTS_WR(val)		nb_pci_putw(0, 8, 0, 0x6, val)
1198*7532SSean.Ye@Sun.COM #define	PCIDEVSTS_WR(val)	nb_pci_putw(0, 8, 0, 0x76, val)
1199*7532SSean.Ye@Sun.COM 
1200*7532SSean.Ye@Sun.COM #define	RANK_MASK	(nb_chipset != INTEL_NB_7300 ? 7 : 0xf)
1201*7532SSean.Ye@Sun.COM #define	CAS_MASK	(nb_chipset == INTEL_NB_5000P || \
1202*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1203*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0xfff : 0x1fff)
1204*7532SSean.Ye@Sun.COM #define	RAS_MASK	(nb_chipset == INTEL_NB_5000P || \
1205*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
1206*7532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x7fff : 0xffff)
1207*7532SSean.Ye@Sun.COM #define	BANK_MASK	7
1208*7532SSean.Ye@Sun.COM 
1209*7532SSean.Ye@Sun.COM #define	DMIR_RANKS(dmir, rank0, rank1, rank2, rank3) \
1210*7532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5000P || nb_chipset == INTEL_NB_5000X || \
1211*7532SSean.Ye@Sun.COM 	    nb_chipset == INTEL_NB_5000V || nb_chipset == INTEL_NB_5000Z) { \
1212*7532SSean.Ye@Sun.COM 		rank0 = (dmir) & 3; \
1213*7532SSean.Ye@Sun.COM 		rank1 = ((dmir) >> 3) & 3; \
1214*7532SSean.Ye@Sun.COM 		rank2 = ((dmir) >> 6) & 3; \
1215*7532SSean.Ye@Sun.COM 		rank3 = ((dmir) >> 9) & 3; \
1216*7532SSean.Ye@Sun.COM 	} else { \
1217*7532SSean.Ye@Sun.COM 		rank0 = (dmir) & 0xf; \
1218*7532SSean.Ye@Sun.COM 		rank1 = ((dmir) >> 4) & 0xf; \
1219*7532SSean.Ye@Sun.COM 		rank2 = ((dmir) >> 8) & 0xf; \
1220*7532SSean.Ye@Sun.COM 		rank3 = ((dmir) >> 12) & 0xf; \
1221*7532SSean.Ye@Sun.COM 	}
1222*7532SSean.Ye@Sun.COM 
1223*7532SSean.Ye@Sun.COM #define	FERR_FAT_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf0, ip)
1224*7532SSean.Ye@Sun.COM #define	FERR_NF_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf1, ip)
1225*7532SSean.Ye@Sun.COM #define	NERR_FAT_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf2, ip)
1226*7532SSean.Ye@Sun.COM #define	NERR_NF_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf3, ip)
1227*7532SSean.Ye@Sun.COM #define	EMASK_THR_RD(ip)	nb_pci_getw(0, 16, 2, 0xf6, ip)
1228*7532SSean.Ye@Sun.COM #define	ERR0_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xf8, ip)
1229*7532SSean.Ye@Sun.COM #define	ERR1_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xfa, ip)
1230*7532SSean.Ye@Sun.COM #define	ERR2_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xfc, ip)
1231*7532SSean.Ye@Sun.COM #define	MCERR_THR_RD(ip)	nb_pci_getw(0, 16, 2, 0xfe, ip)
1232*7532SSean.Ye@Sun.COM #define	CTSTS_RD()		nb_pci_getb(0, 16, 4, 0xee, 0)
1233*7532SSean.Ye@Sun.COM #define	THRTSTS_RD()		nb_pci_getw(0, 16, 3, 0x68, 0)
1234*7532SSean.Ye@Sun.COM 
1235*7532SSean.Ye@Sun.COM #define	FERR_FAT_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf0, val)
1236*7532SSean.Ye@Sun.COM #define	FERR_NF_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf1, val)
1237*7532SSean.Ye@Sun.COM #define	NERR_FAT_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf2, val)
1238*7532SSean.Ye@Sun.COM #define	NERR_NF_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf3, val)
1239*7532SSean.Ye@Sun.COM #define	EMASK_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xf6, val)
1240*7532SSean.Ye@Sun.COM #define	ERR0_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xf8, val)
1241*7532SSean.Ye@Sun.COM #define	ERR1_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfa, val)
1242*7532SSean.Ye@Sun.COM #define	ERR2_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfc, val)
1243*7532SSean.Ye@Sun.COM #define	MCERR_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfe, val)
1244*7532SSean.Ye@Sun.COM #define	CTSTS_WR(val)		nb_pci_putb(0, 16, 4, 0xee, val)
1245*7532SSean.Ye@Sun.COM #define	THRTSTS_WR(val)		nb_pci_putw(0, 16, 3, 0x68, val)
1246*7532SSean.Ye@Sun.COM 
1247*7532SSean.Ye@Sun.COM #define	ERR_FAT_THR_F2	0x02	/* >tnid thermal event with intelligent */
1248*7532SSean.Ye@Sun.COM 				/* throttling disabled */
1249*7532SSean.Ye@Sun.COM #define	ERR_FAT_THR_F1	0x01	/* catastrophic on-die thermal event */
1250*7532SSean.Ye@Sun.COM 
1251*7532SSean.Ye@Sun.COM #define	ERR_NF_THR_F5	0x10	/* deadman timeout on cooling update */
1252*7532SSean.Ye@Sun.COM #define	ERR_NF_THR_F4	0x08	/* TSMAX Updated */
1253*7532SSean.Ye@Sun.COM #define	ERR_NF_THR_F3	0x04	/* On-die throttling event */
1254*7532SSean.Ye@Sun.COM 
1255*7532SSean.Ye@Sun.COM #define	EMASK_THR_FATAL	(ERR_FAT_THR_F2|ERR_FAT_THR_F1)
1256*7532SSean.Ye@Sun.COM #define	EMASK_THR_NF	(ERR_NF_THR_F5|ERR_NF_THR_F4|ERR_NF_THR_F3)
1257*7532SSean.Ye@Sun.COM 
1258*7532SSean.Ye@Sun.COM #define	EMASK_THR_F5	0x0010	/* deadman timeout on cooling update */
1259*7532SSean.Ye@Sun.COM #define	EMASK_THR_F4	0x0008	/* TSMAX Updated */
1260*7532SSean.Ye@Sun.COM #define	EMASK_THR_F3	0x0004	/* On-die throttling event */
1261*7532SSean.Ye@Sun.COM #define	EMASK_THR_F2	0x0002	/* >tnid thermal event with intelligent */
1262*7532SSean.Ye@Sun.COM 				/* throttling disabled */
1263*7532SSean.Ye@Sun.COM #define	EMASK_THR_F1	0x0001	/* catastrophic on-die thermal event */
1264*7532SSean.Ye@Sun.COM 
1265*7532SSean.Ye@Sun.COM #ifdef __cplusplus
1266*7532SSean.Ye@Sun.COM }
1267*7532SSean.Ye@Sun.COM #endif
1268*7532SSean.Ye@Sun.COM 
1269*7532SSean.Ye@Sun.COM #endif /* _NB5000_H */
1270