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