1/* $OpenBSD: mcpciareg.h,v 1.1 2007/03/16 21:22:27 robert Exp $ */
2/* $NetBSD: mcpciareg.h,v 1.7 2006/05/17 21:32:59 drochner Exp $ */
3
4/*
5 * Copyright (c) 1998 by Matthew Jacob
6 * NASA AMES Research Center.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice immediately at the beginning of the file, without modification,
14 *    this list of conditions, and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 *    derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34/*
35 * Taken from:
36 *
37 *	``RAWHIDE Systems Programmer's Manual, Revision 1.4''
38 */
39
40#define	REGVAL(r)	(*(volatile int32_t *)ALPHA_PHYS_TO_K0SEG(r))
41
42/*
43 * There are 4 possible PCI busses per MCBUS.
44 *
45 * (from mcpcia.h, Digital Unix 4.0E):
46 *
47 * I/O Space Per PCI Node (8GBytes per)
48 * ------------------------------------
49 * (8+x)8 0000 0000 - (8+x)9 FFFF FFFF  - I/O Space for PCI0
50 * (8+x)A 0000 0000 - (8+x)B FFFF FFFF  - I/O Space for PCI1
51 * (8+x)C 0000 0000 - (8+x)D FFFF FFFF  - I/O Space for PCI2
52 * (8+x)E 0000 0000 - (8+x)F FFFF FFFF  - I/O Space for PCI3
53 *
54 * CPU to PCI Address Mapping:
55 * ---------------------------
56 *
57 * +---+-------+-------+--+--+--+--+--+--+---------------+----------+-----+
58 * | 1 |  GID  |  MID  |  |  |  |  |  |  | Byte Aligned  | Byte Len | Zero|
59 * |   |       |       |  |  |  |  |  |  | I/O Address   |   Field  |     |
60 * +---+-------+-------+--+--+--+--+--+--+---------------+----------+-----+
61 *  39  38   36 35   33 32 31 30 29 28 27 26            5 4        3  2  0
62 *
63 * <39> - I/O Select (Always 1 for direct I/O access)
64 *
65 * <38-36> - Global Bus slot # (MCBUS #)
66 *      GID slot #0->7 (MCBUS #0->7)
67 *
68 * <35-33> - MCBUS Slot #
69 *      MCBUS slot 0->7
70 *
71 * <32-27> - PCI Address Space
72 *      0.xxxxx = Sparse Memory Space   (  4GB on MCBUS; 128MB on PCI)
73 *      1.0xxxx = Dense Memory Space    (  2GB on MCBUS;   2GB on PCI)
74 *      1.10xxx = Sparse IO Space       (  1GB on MCBUS;  32MB on PCI)
75 *      1.110xx = Sparse Config Space   (512MB on MCBUS;  16MB on PCI)
76 *      1.1110x = PCI Bridge CSR Space  (256MB on MCBUS) -- Sparse-mapped!
77 *      1.11110 = Interrupt Acknowledge (128MB on MCBUS)
78 *      1.11111 = Unused                (128MB on MCBUS)
79 *
80 * ------------------------------------------------------------
81 * CPU to PCI Address Mapping for MCBUS-PCIy Bridge on MCBUS x:
82 * ------------------------------------------------------------
83 *
84 * CPU Address Range            PCI Address Range       PCI Address Space
85 * ------------------------     ---------------------   ------------------------
86 * (8+x)(8+y*2).0000.0000       0000.0000 - 00FF.FFFF   PCIy Sparse Memory Space
87 * - (8+x)(8+y*2).1FFF.FFFF                              (fixed, lower 16MB)
88 *
89 * (8+x)(8+y*2).2000.0000       0100.0000 - 07FF.FFFF   PCIy Sparse Memory Space
90 * - (8+x)(8+y*2).FFFF.FFFF                              (variable, offset = 0)
91 *
92 * (8+x)(9+y*2).0000.0000       0000.0000 - 7FFF.FFFF   PCIy Dense Memory Space
93 * - (8+x)(9+y*2).7FFF.FFFF  or 8000.0000 - FFFF.FFFF      if HAE_DENSE_MEM = 1
94 *
95 * (8+x)(9+y*2).8000.0000       0000.0000 - 0000.FFFF   PCIy Sparse IO Space
96 * - (8+x)(9+y*2).801F.FFFF                              (fixed, lower 64K)
97 *
98 * (8+x)(9+y*2).8020.0000       0001.0000 - 01FF.FFFF   PCIy Sparse IO Space
99 * - (8+x)(9+y*2).BFFF.FFFF                              (variable, offset = 0)
100 *
101 * (8+x)(9+y*2).C000.0000       0000.0000 - 0FFF.FFFF   PCIy Config Space (16MB)
102 * - (8+x)(9+y*2).DFFF.FFFF
103 *
104 * (8+x)(9+y*2).E000.0000               N/A             PCIy-Bridge CSR Space
105 *							(8MB)
106 * - (8+x)(9+y*2).EFFF.FFFF
107 *
108 * (8+x)(9+y*2).F000.0000               N/A             Unused
109 * - (8+x)(9+y*2).F000.3EFF
110 *
111 * (8+x)(9+y*2).F000.3F00,              N/A             PCIy Interrupt ACK0
112 * (8+x)(9+y*2).F000.3F40                               PCIy INteruppt ACK1
113 *
114 * (8+x)(9+y*2).F000.3F80               N/A             Unused
115 * - (8+x)(9+y*2).FFFF.FFFF
116 *
117 */
118
119/*
120 * MC-PCI Bus Bridge CSRs
121 *
122 * Address Map Overview:
123 *
124 * Offset                Selected Space
125 * ----------------      -------------------------------------------------
126 * 0x00000000            General config, control, diag, error logging regs.
127 * 0x00001000            PCI Error Status
128 * 0x00001300            PCI Scatter/Gather Regs.
129 * 0x00001800            Scatter/Gather TLB Regs.
130 * 0x00004000            MDPA Error Status & Diagnostic Control
131 * 0x00008000            MDPB Error Status & Diagnostic Control
132 * 0x000E0000 -          Flash Rom Space --
133 * 0x000FFFFF            offset address into PCI Dense Mem Space
134 * 0x10003F00            Interrupt Acknowledge
135 *
136 */
137
138
139/*
140 * Address Space Cookies
141 */
142
143#define	MCPCIA_PCI_SPARSE	0x000000000UL
144#define	MCPCIA_PCI_DENSE	0x100000000UL
145#define	MCPCIA_PCI_IOSPACE	0x180000000UL
146#define	MCPCIA_PCI_CONF		0x1C0000000UL
147#define	MCPCIA_PCI_BRIDGE	0x1E0000000UL
148#define	MCPCIA_PCI_IACK		0x1F0000000UL
149
150/*
151 * MCPCIA Bus Bridge Registers
152 *
153 * These are offsets that don't include GBUS, MID, or address space offsets.
154 */
155
156#define	_MCPCIA_PCI_REV		0x000000000	/* PCI Revision Register (R) */
157#define	_MCPCIA_WHOAMI		0x000000040	/* PCI Who Am I (R) */
158#define	_MCPCIA_PCI_LAT		0x000000080	/* PCI Latency Timer (RW) */
159#define	_MCPCIA_CAP_CTRL	0x000000100	/* PCI Bridge Control (RW) */
160#define	_MCPCIA_HAE_MEM		0x000000400	/* PCI HAE Sparse Memory (RW) */
161#define	_MCPCIA_HAE_IO		0x000000440	/* PCI HAE Sparse I/O (RW) */
162#define	_MCPCIA_IACK_SC		0x000000480	/* PCI Special Cycle Ack */
163#define	_MCPCIA_HAE_DENSE	0x0000004C0	/* PCI HAE Dense Memory (RW) */
164
165#define	_MCPCIA_INT_CTL		0x000000500	/* PCI Interrupt Control */
166#define	_MCPCIA_INT_REQ		0x000000540	/* PCI Interrupt Request */
167#define	_MCPCIA_INT_TARG	0x000000580	/* PCI Int Tgt Devices */
168#define	_MCPCIA_INT_ADR		0x0000005C0	/* PCI Int Tgt Address */
169#define	_MCPCIA_INT_ADR_EXT	0x000000600	/* PCI Int Tgt Addr Ext */
170#define	_MCPCIA_INT_MASK0	0x000000640	/* PCI Int Mask 0 */
171#define	_MCPCIA_INT_MASK1	0x000000680	/* PCI Int Mask 1 */
172
173#define	_MCPCIA_INT_ACK0	0x100003F00	/* PCI Int Ack 0 */
174#define	_MCPCIA_INT_ACK1	0x100003F40	/* PCI Int Ack 1 */
175
176#define	_MCPCIA_PERF_MON	0x000000300	/* PCI Perf Monitor */
177#define	_MCPCIA_PERF_CONT	0x000000340	/* PCI Perf Monitor Control */
178
179#define	_MCPCIA_CAP_DIAG	0x000000700	/* MC-PCI Diagnostic Control */
180#define	_MCPCIA_SCRATCH0	0x000000740	/* Diag General */
181#define	_MCPCIA_SCRATCH1	0x000000780	/* Diag General */
182#define	_MCPCIA_TOM		0x0000007C0	/* Top Of Memory */
183#define	_MCPCIA_MC_ERR0		0x000000800	/* MC Err Info 0 */
184#define	_MCPCIA_MC_ERR1		0x000000840	/* MC Err Info 1 */
185#define	_MCPCIA_CAP_ERR		0x000000880	/* CAP Error Register */
186
187#define	_MCPCIA_PCI_ERR1	0x000001040	/* PCI Error Status */
188
189#define	_MCPCIA_MDPA_STAT	0x000004000	/* MDPA Status */
190#define	_MCPCIA_MDPA_SYN	0x000004040	/* MDPA Syndrome */
191#define	_MCPCIA_MDPA_DIAG	0x000004080	/* Diag Check MDPA */
192
193#define	_MCPCIA_MDPB_STAT	0x000008000	/* MDPB Status */
194#define	_MCPCIA_MDPB_SYN	0x000008040	/* MDPB Syndrome */
195#define	_MCPCIA_MDPB_DIAG	0x000008080	/* Diag Check MDPB */
196
197#define	_MCPCIA_SG_TBIA		0x000001300	/* Scatter/Gather TBIA */
198#define	_MCPCIA_HBASE		0x000001340	/* PC "Hole" Compatibility */
199#define	_MCPCIA_W0_BASE		0x000001400	/* Window Base 0 */
200#define	_MCPCIA_W0_MASK		0x000001440	/* Window Mask 0 */
201#define	_MCPCIA_T0_BASE		0x000001480	/* Translated Base 0 */
202#define	_MCPCIA_W1_BASE		0x000001500	/* Window Base 1 */
203#define	_MCPCIA_W1_MASK		0x000001540	/* Window Mask 1 */
204#define	_MCPCIA_T1_BASE		0x000001580	/* Translated Base 1 */
205#define	_MCPCIA_W2_BASE		0x000001600	/* Window Base 2 */
206#define	_MCPCIA_W2_MASK		0x000001640	/* Window Mask 2 */
207#define	_MCPCIA_T2_BASE		0x000001680	/* Translated Base 2 */
208#define	_MCPCIA_W3_BASE		0x000001700	/* Window Base 3 */
209#define	_MCPCIA_W3_MASK		0x000001740	/* Window Mask 3 */
210#define	_MCPCIA_T3_BASE		0x000001780	/* Translated Base 3 */
211#define	_MCPCIA_W_DAC		0x0000017C0	/* Window DAC Base */
212
213
214/*
215 * Handier defines- uses precalculated offset in softc.
216 */
217#define	_SYBRIDGE(ccp)	((ccp)->cc_sysbase | MCPCIA_PCI_BRIDGE)
218
219#define	MCPCIA_PCI_REV(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_PCI_REV)
220#define	MCPCIA_WHOAMI(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_WHOAMI)
221#define	MCPCIA_PCI_LAT(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_PCI_LAT)
222#define	MCPCIA_CAP_CTRL(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_CAP_CTRL)
223#define	MCPCIA_HAE_MEM(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_HAE_MEM)
224#define	MCPCIA_HAE_IO(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_HAE_IO)
225#define	MCPCIA_IACK_SC(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_IACK_SC)
226#define	MCPCIA_HAE_DENSE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_HAE_DENSE)
227#define	MCPCIA_INT_CTL(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_CTL)
228#define	MCPCIA_INT_REQ(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_REQ)
229#define	MCPCIA_INT_TARG(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_TARG)
230#define	MCPCIA_INT_ADR(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_ADR)
231#define	MCPCIA_INT_ADR_EXT(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_ADR_EXT)
232#define	MCPCIA_INT_MASK0(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_MASK0)
233#define	MCPCIA_INT_MASK1(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_MASK1)
234#define	MCPCIA_INT_ACK0(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_ACK0)
235#define	MCPCIA_INT_ACK1(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_INT_ACK1)
236#define	MCPCIA_PERF_MON(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_PERF_MON)
237#define	MCPCIA_PERF_CONT(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_PERF_CONT)
238#define	MCPCIA_CAP_DIAG(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_CAP_DIAG)
239#define	MCPCIA_SCRATCH0(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_SCRATCH0)
240#define	MCPCIA_SCRATCH1(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_SCRATCH1)
241#define	MCPCIA_TOM(ccp)		(_SYBRIDGE(ccp) | _MCPCIA_TOM)
242#define	MCPCIA_MC_ERR0(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MC_ERR0)
243#define	MCPCIA_MC_ERR1(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MC_ERR1)
244#define	MCPCIA_CAP_ERR(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_CAP_ERR)
245#define	MCPCIA_PCI_ERR1(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_PCI_ERR1)
246#define	MCPCIA_MDPA_STAT(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPA_STAT)
247#define	MCPCIA_MDPA_SYN(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPA_SYN)
248#define	MCPCIA_MDPA_DIAG(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPA_DIAG)
249#define	MCPCIA_MDPB_STAT(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPB_STAT)
250#define	MCPCIA_MDPB_SYN(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPB_SYN)
251#define	MCPCIA_MDPB_DIAG(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_MDPB_DIAG)
252#define	MCPCIA_SG_TBIA(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_SG_TBIA)
253#define	MCPCIA_HBASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_HBASE)
254#define	MCPCIA_W0_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W0_BASE)
255#define	MCPCIA_W0_MASK(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W0_MASK)
256#define	MCPCIA_T0_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_T0_BASE)
257#define	MCPCIA_W1_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W1_BASE)
258#define	MCPCIA_W1_MASK(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W1_MASK)
259#define	MCPCIA_T1_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_T1_BASE)
260#define	MCPCIA_W2_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W2_BASE)
261#define	MCPCIA_W2_MASK(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W2_MASK)
262#define	MCPCIA_T2_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_T2_BASE)
263#define	MCPCIA_W3_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W3_BASE)
264#define	MCPCIA_W3_MASK(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W3_MASK)
265#define	MCPCIA_T3_BASE(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_T3_BASE)
266#define	MCPCIA_W_DAC(ccp)	(_SYBRIDGE(ccp) | _MCPCIA_W_DAC)
267
268/*
269 * This is here for what error handling will get as a collected subpacket.
270 */
271
272struct mcpcia_iodsnap {
273	u_int64_t	base_addr;
274	u_int32_t	whami;
275	u_int32_t	rsvd0;
276	u_int32_t	pci_rev;
277	u_int32_t	cap_ctrl;
278	u_int32_t	hae_mem;
279	u_int32_t	hae_io;
280	u_int32_t	int_ctl;
281	u_int32_t	int_reg;
282	u_int32_t	int_mask0;
283	u_int32_t	int_mask1;
284	u_int32_t	mc_err0;
285	u_int32_t	mc_err1;
286	u_int32_t	cap_err;
287	u_int32_t	sys_env;
288	u_int32_t	pci_err1;
289	u_int32_t	mdpa_stat;
290	u_int32_t	mdpa_syn;
291	u_int32_t	mdpb_stat;
292	u_int32_t	mdpb_syn;
293	u_int32_t	rsvd2;
294	u_int32_t	rsvd3;
295	u_int32_t	rsvd4;
296};
297
298/*
299 * PCI_REV Register definitions
300 */
301#define	CAP_REV(reg)		((reg) & 0xf)
302#define	HORSE_REV(reg)		(((reg) >> 4) & 0xf)
303#define	SADDLE_REV(reg)		(((reg) >> 8) & 0xf)
304#define	SADDLE_TYPE(reg)	(((reg) >> 12) & 0x3)
305#define	EISA_PRESENT(reg)	((reg) & (1 << 15))
306#define	IS_MCPCIA_MAGIC(reg)	(((reg) & 0xffff0000) == 0x6000000)
307
308
309/*
310 * WHOAMI Register definitions
311 *
312 * The Device ID is an echo of the MID of the CPU reading this register-
313 * cheezy way to figure out who you are (ask someone else!).
314 */
315#define	MCBUS_CPU_MID(x)		((x) & 0x7)
316#define	MCBUS_CPU_INFO(x)		(((x) >> 6) & 0xff)
317#define		CPU_Fill_Err	0x80
318#define		CPU_DTAG_Perr	0x40
319#define		CPU_RevMask	0x38
320#define		CPU_RevShift	3
321#define		CPU_BCacheMask	0x3
322#define			CPU_BCache_0MB	0
323#define			CPU_BCache_1MB	1
324#define			CPU_BCache_2MB	2
325#define			CPU_BCache_4MB	3
326
327/*
328 * PCI Latency Register Definitions
329 */
330#define	PCI_LAT_SHIFT	8	/* it's in the 2nd byte. */
331
332/*
333 * CAP Control Register Definitions
334 */
335#define	CAP_LED_ON	0x00000001	/* Selftest LED passed */
336#define	CAP_EV56_BW_EN	0x00000002	/* BW Enables (EV56, EV6 only) */
337#define	CAP_DLY_RD_EN	0x00000010	/* PCI Delayed Reads Enabled */
338#define	CAP_MEM_EN	0x00000020	/* Respond to PCI transactions */
339#define	CAP_REQ64_EN	0x00000040	/* Request 64 bit data transactions */
340#define	CAP_ACK64_EN	0x00000080	/* Respond to 64 bit data "" */
341#define	CAP_ADR_PAR_EN	0x00000100	/* Check PCI address Parity */
342#define	CAP_MC_CA_PAR	0x00000200	/* Check MC bus CMD/Address Parity */
343#define	CAP_MC_NXM_EN	0x00000400	/* Check for MC NXM */
344#define	CAP_BUS_MON	0x00000800	/* Check for PCI errs (as bystander) */
345/* bits 19:16 control number of pending write transactions */
346#define		SHORT	0
347#define		MED	1
348#define		LONG	2
349#define	CAP_MEMRD_PREFETCH_SHIFT	20
350#define	CAP_MEMRDLN_PREFETCH_SHIFT	22
351#define	CAP_MEMRDMULT_PREFETCH_SHIFT	24
352#define	CAP_PARTIAL_WRITE	(1 << 26)
353
354#define	CAP_ARB_BPRI	0x00000000	/* Bridge Priority Arb */
355#define	CAP_ARB_RROBIN	0x40000000	/* "" Round Robin */
356#define	CAP_ARB_RROBIN1	0x80000000	/* "" Round Robin #1 */
357
358/*
359 * Diagnostic Register Bits
360 */
361/* CAP_DIAG register */
362#define	CAP_DIAG_PCIRESET	0x1	/*
363					 * WriteOnly. Assert 1 for 100usec min.,
364					 * then write zero. NOTE: deadlocks
365					 * exist in h/w if anything but this
366					 * register is accessed while reset
367					 * is asserted.
368					 */
369#define	CAP_DIAG_MC_ADRPE	(1<<30)	/* Invert MC Bus Address/Parity */
370#define	CAP_DIAG_PCI_ADRPE	(1<<31)	/* Force bad PCI parity (low 32) */
371
372/* MDPA_DIAG or MDPB_DIAG registers */
373#define	MDPX_ECC_ENA		(1<<28)	/* Enable ECC on MC Bus (default 1) */
374#define	MDPX_PAR_ENA		(1<<29)	/* Enable Parity on PCI (default 0) */
375#define	MDPX_DIAG_FPE_PCI	(1<<30)	/* Force PCI parity error */
376#define	MDPX_DIAG_USE_CHK	(1<<31)	/*
377					 * When set, DMA write cycles use the
378					 * value in the low 8 bits of this
379					 * register (MDPA or MDPB) as ECC
380					 * sent onto main memory.
381					 */
382
383/*
384 * Interrupt Specific bits...
385 *
386 * Mostly we don't have to mess with any of the interrupt specific registers
387 * as the SRM has set most of this pretty complex stuff up for us.
388 *
389 * However, to enable specific interrupts, we need to set some bits
390 * in imask0 if we want to have them vectored to PALcode for appropriate
391 * dispatch.
392 */
393
394/*
395 * bits 0-15 correspond to 4 slots (time 4 buspins) for each PCI bus.
396 * bit 16 is the NCR810 onboard SCSI interrupt.
397 * bits 19-20 are reserved.
398 */
399
400#define	MCPCIA_I2C_CTRL_INTR		(1<<17)
401#define	MCPCIA_I2C_CTRL_BUS_ERR		(1<<18)
402
403#define	MCPCIA_8259_NMI_INTR		(1<<21)
404#define	MCPCIA_SOFT_ERR_INTR		(1<<22)
405#define	MCPCIA_HARD_ERR_INTR		(1<<23)
406
407#ifdef	YET
408#define	MCPCIA_GEN_IENABL	\
409	(MCPCIA_I2C_CTRL_BUS_ERR|MCPCIA_SOFT_ERR_INTR|MCPCIA_HARD_ERR_INTR)
410#else
411#define	MCPCIA_GEN_IENABL	\
412	(MCPCIA_SOFT_ERR_INTR|MCPCIA_HARD_ERR_INTR)
413#endif
414
415/*
416 * DMA Address Specific bits...
417 */
418
419#define	MCPCIA_WBASE_EN			0x1
420#define	MCPCIA_WBASE_SG			0x2
421#define	MCPCIA_WBASE_DAC		0x8
422#define	MCPCIA_WBASE_BSHIFT		20
423
424#define	MCPCIA_WMASK_1M			0x00000000
425#define	MCPCIA_WMASK_2M			0x00100000
426#define	MCPCIA_WMASK_4M			0x00300000
427#define	MCPCIA_WMASK_8M			0x00700000
428#define	MCPCIA_WMASK_16M		0x00f00000
429#define	MCPCIA_WMASK_32M		0x01f00000
430#define	MCPCIA_WMASK_64M		0x03f00000
431#define	MCPCIA_WMASK_128M		0x07f00000
432#define	MCPCIA_WMASK_256M		0x0ff00000
433#define	MCPCIA_WMASK_512M		0x1ff00000
434#define	MCPCIA_WMASK_1G			0x3ff00000
435#define	MCPCIA_WMASK_2G			0x7ff00000
436#define	MCPCIA_WMASK_4G			0xfff00000
437
438/*
439 * The WBASEX register contains bits 39:10 of a physical address
440 * shifted to bits 31:2 of this 32 bit register. Namely, shifted
441 * right by 8 bits.
442 */
443#define	MCPCIA_TBASEX_SHIFT		8
444