Home | History | Annotate | Line # | Download | only in include
cpuregs.h revision 1.10
      1  1.10  jonathan /*	$NetBSD: cpuregs.h,v 1.10 1997/06/16 07:41:08 jonathan Exp $	*/
      2   1.4       cgd 
      3   1.1   deraadt /*
      4   1.2     glass  * Copyright (c) 1992, 1993
      5   1.2     glass  *	The Regents of the University of California.  All rights reserved.
      6   1.1   deraadt  *
      7   1.1   deraadt  * This code is derived from software contributed to Berkeley by
      8   1.1   deraadt  * Ralph Campbell and Rick Macklem.
      9   1.1   deraadt  *
     10   1.1   deraadt  * Redistribution and use in source and binary forms, with or without
     11   1.1   deraadt  * modification, are permitted provided that the following conditions
     12   1.1   deraadt  * are met:
     13   1.1   deraadt  * 1. Redistributions of source code must retain the above copyright
     14   1.1   deraadt  *    notice, this list of conditions and the following disclaimer.
     15   1.1   deraadt  * 2. Redistributions in binary form must reproduce the above copyright
     16   1.1   deraadt  *    notice, this list of conditions and the following disclaimer in the
     17   1.1   deraadt  *    documentation and/or other materials provided with the distribution.
     18   1.1   deraadt  * 3. All advertising materials mentioning features or use of this software
     19   1.1   deraadt  *    must display the following acknowledgement:
     20   1.1   deraadt  *	This product includes software developed by the University of
     21   1.1   deraadt  *	California, Berkeley and its contributors.
     22   1.1   deraadt  * 4. Neither the name of the University nor the names of its contributors
     23   1.1   deraadt  *    may be used to endorse or promote products derived from this software
     24   1.1   deraadt  *    without specific prior written permission.
     25   1.1   deraadt  *
     26   1.1   deraadt  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     27   1.1   deraadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     28   1.1   deraadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     29   1.1   deraadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     30   1.1   deraadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     31   1.1   deraadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     32   1.1   deraadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     33   1.1   deraadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     34   1.1   deraadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     35   1.1   deraadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     36   1.1   deraadt  * SUCH DAMAGE.
     37   1.1   deraadt  *
     38   1.4       cgd  *	@(#)machConst.h	8.1 (Berkeley) 6/10/93
     39   1.1   deraadt  *
     40   1.1   deraadt  * machConst.h --
     41   1.1   deraadt  *
     42   1.1   deraadt  *	Machine dependent constants.
     43   1.1   deraadt  *
     44   1.1   deraadt  *	Copyright (C) 1989 Digital Equipment Corporation.
     45   1.1   deraadt  *	Permission to use, copy, modify, and distribute this software and
     46   1.1   deraadt  *	its documentation for any purpose and without fee is hereby granted,
     47   1.1   deraadt  *	provided that the above copyright notice appears in all copies.
     48   1.1   deraadt  *	Digital Equipment Corporation makes no representations about the
     49   1.1   deraadt  *	suitability of this software for any purpose.  It is provided "as is"
     50   1.1   deraadt  *	without express or implied warranty.
     51   1.1   deraadt  *
     52   1.1   deraadt  * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machConst.h,
     53   1.2     glass  *	v 9.2 89/10/21 15:55:22 jhh Exp  SPRITE (DECWRL)
     54   1.1   deraadt  * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAddrs.h,
     55   1.2     glass  *	v 1.2 89/08/15 18:28:21 rab Exp  SPRITE (DECWRL)
     56   1.1   deraadt  * from: Header: /sprite/src/kernel/vm/ds3100.md/RCS/vmPmaxConst.h,
     57   1.2     glass  *	v 9.1 89/09/18 17:33:00 shirriff Exp  SPRITE (DECWRL)
     58   1.1   deraadt  */
     59   1.1   deraadt 
     60  1.10  jonathan #ifndef _MIPS_CPUREGS_H_
     61  1.10  jonathan #define _MIPS_CPUREGS_H_
     62   1.1   deraadt 
     63   1.1   deraadt #define MACH_KUSEG_ADDR			0x0
     64   1.1   deraadt #define MACH_CACHED_MEMORY_ADDR		0x80000000
     65   1.1   deraadt #define MACH_UNCACHED_MEMORY_ADDR	0xa0000000
     66   1.1   deraadt #define MACH_KSEG2_ADDR			0xc0000000
     67   1.1   deraadt #define MACH_MAX_MEM_ADDR		0xbe000000
     68   1.1   deraadt #define	MACH_RESERVED_ADDR		0xbfc80000
     69   1.1   deraadt 
     70   1.1   deraadt #define	MACH_CACHED_TO_PHYS(x)	((unsigned)(x) & 0x1fffffff)
     71   1.1   deraadt #define	MACH_PHYS_TO_CACHED(x)	((unsigned)(x) | MACH_CACHED_MEMORY_ADDR)
     72   1.1   deraadt #define	MACH_UNCACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff)
     73   1.1   deraadt #define	MACH_PHYS_TO_UNCACHED(x) ((unsigned)(x) | MACH_UNCACHED_MEMORY_ADDR)
     74   1.1   deraadt 
     75   1.5  jonathan /* Map virtual address to index in r4k virtually-indexed cache */
     76   1.5  jonathan #define MIPS_R4K_VA_TO_CINDEX(x) \
     77   1.5  jonathan 		((unsigned)(x) & 0xffffff | MACH_CACHED_MEMORY_ADDR)
     78   1.5  jonathan 
     79   1.5  jonathan /* XXX compatibility with Pica port */
     80   1.5  jonathan #define MACH_VA_TO_CINDEX(x) MIPS_R4K_VA_TO_CINDEX(x)
     81   1.5  jonathan 
     82   1.5  jonathan 
     83   1.5  jonathan /*
     84   1.1   deraadt  * The bits in the cause register.
     85   1.1   deraadt  *
     86   1.5  jonathan  * Bits common to r3000 and r4000:
     87   1.5  jonathan  *
     88   1.1   deraadt  *	MACH_CR_BR_DELAY	Exception happened in branch delay slot.
     89   1.1   deraadt  *	MACH_CR_COP_ERR		Coprocessor error.
     90   1.5  jonathan  *	MACH_CR_IP		Interrupt pending bits defined below.
     91   1.5  jonathan  *				(same meaning as in CAUSE register).
     92   1.1   deraadt  *	MACH_CR_EXC_CODE	The exception type (see exception codes below).
     93   1.5  jonathan  *
     94   1.5  jonathan  * Differences:
     95   1.5  jonathan  *  r3k has 4 bits of execption type, r4k has 5 bits.
     96   1.1   deraadt  */
     97   1.1   deraadt #define MACH_CR_BR_DELAY	0x80000000
     98   1.1   deraadt #define MACH_CR_COP_ERR		0x30000000
     99   1.9  jonathan #define MIPS1_CR_EXC_CODE	0x0000003C	/* four bits */
    100   1.9  jonathan #define MIPS3_CR_EXC_CODE	0x0000007C	/* five bits */
    101   1.5  jonathan #define MACH_CR_IP		0x0000FF00
    102   1.1   deraadt #define MACH_CR_EXC_CODE_SHIFT	2
    103   1.1   deraadt 
    104   1.8    mhitch #ifdef MIPS3 /* XXX not used any more, only to satisfy regression tests */
    105   1.9  jonathan #define MACH_CR_EXC_CODE	MIPS3_CR_EXC_CODE
    106   1.8    mhitch #else
    107   1.9  jonathan #define MACH_CR_EXC_CODE	MIPS1_CR_EXC_CODE
    108   1.8    mhitch #endif	/* MIPs3 */
    109   1.5  jonathan 
    110   1.1   deraadt /*
    111   1.1   deraadt  * The bits in the status register.  All bits are active when set to 1.
    112   1.1   deraadt  *
    113   1.5  jonathan  *	R3000 status register fields:
    114   1.1   deraadt  *	MACH_SR_CO_USABILITY	Control the usability of the four coprocessors.
    115   1.1   deraadt  *	MACH_SR_BOOT_EXC_VEC	Use alternate exception vectors.
    116   1.1   deraadt  *	MACH_SR_TLB_SHUTDOWN	TLB disabled.
    117   1.5  jonathan  *
    118   1.5  jonathan  *	MIPS_SR_INT_IE		Master (current) interrupt enable bit.
    119   1.5  jonathan  *
    120   1.5  jonathan  * Differences:
    121   1.5  jonathan  *	r3k has cache control is via frobbing SR register bits, whereas the
    122   1.5  jonathan  *	r4k cache control is via explicit instructions.
    123   1.5  jonathan  *	r3k has a 3-entry stack of kernel/user bits, whereas the
    124   1.5  jonathan  *	r4k has kernel/supervisor/user.
    125   1.5  jonathan  */
    126   1.5  jonathan #define MACH_SR_COP_USABILITY	0xf0000000
    127   1.5  jonathan #define MACH_SR_COP_0_BIT	0x10000000
    128   1.5  jonathan #define MACH_SR_COP_1_BIT	0x20000000
    129   1.5  jonathan 
    130   1.5  jonathan 	/* r4k and r3k differences, see below */
    131   1.5  jonathan 
    132   1.5  jonathan #define MACH_SR_BOOT_EXC_VEC	0x00400000
    133   1.5  jonathan #define MACH_SR_TLB_SHUTDOWN	0x00200000
    134   1.5  jonathan 
    135   1.5  jonathan 	/* r4k and r3k differences, see below */
    136   1.5  jonathan 
    137   1.5  jonathan #define MIPS_SR_INT_IE		0x00000001
    138   1.5  jonathan /*#define MACH_SR_MBZ		0x0f8000c0*/	/* Never used, true for r3k */
    139   1.5  jonathan /*#define MACH_SR_INT_MASK	0x0000ff00*/
    140   1.5  jonathan 
    141   1.5  jonathan #define MACH_SR_INT_ENAB	MIPS_SR_INT_IE	/* backwards compatibility */
    142   1.5  jonathan #define MACH_SR_INT_ENA_CUR	MIPS_SR_INT_IE	/* backwards compatibility */
    143   1.5  jonathan 
    144   1.5  jonathan 
    145   1.5  jonathan 
    146   1.5  jonathan /*
    147   1.5  jonathan  * The R2000/R3000-specific status register bit definitions.
    148   1.5  jonathan  * all bits are active when set to 1.
    149   1.5  jonathan  *
    150   1.1   deraadt  *	MACH_SR_PARITY_ERR	Parity error.
    151   1.1   deraadt  *	MACH_SR_CACHE_MISS	Most recent D-cache load resulted in a miss.
    152   1.1   deraadt  *	MACH_SR_PARITY_ZERO	Zero replaces outgoing parity bits.
    153   1.1   deraadt  *	MACH_SR_SWAP_CACHES	Swap I-cache and D-cache.
    154   1.1   deraadt  *	MACH_SR_ISOL_CACHES	Isolate D-cache from main memory.
    155   1.1   deraadt  *				Interrupt enable bits defined below.
    156   1.1   deraadt  *	MACH_SR_KU_OLD		Old kernel/user mode bit. 1 => user mode.
    157   1.1   deraadt  *	MACH_SR_INT_ENA_OLD	Old interrupt enable bit.
    158   1.1   deraadt  *	MACH_SR_KU_PREV		Previous kernel/user mode bit. 1 => user mode.
    159   1.1   deraadt  *	MACH_SR_INT_ENA_PREV	Previous interrupt enable bit.
    160   1.1   deraadt  *	MACH_SR_KU_CUR		Current kernel/user mode bit. 1 => user mode.
    161   1.1   deraadt  */
    162   1.5  jonathan 
    163   1.5  jonathan #define MIPS_3K_PARITY_ERR      0x00100000
    164   1.5  jonathan #define MIPS_3K_CACHE_MISS      0x00080000
    165   1.5  jonathan #define MIPS_3K_PARITY_ZERO     0x00040000
    166   1.5  jonathan #define MIPS_3K_SWAP_CACHES     0x00020000
    167   1.5  jonathan #define MIPS_3K_ISOL_CACHES     0x00010000
    168   1.5  jonathan 
    169   1.5  jonathan #define MIPS_3K_SR_KU_OLD	0x00000020	/* 2nd stacked KU/IE*/
    170   1.5  jonathan #define MIPS_3K_SR_INT_ENA_OLD	0x00000010	/* 2nd stacked KU/IE*/
    171   1.9  jonathan #define MIPS1_SR_KU_PREV	0x00000008	/* 1st stacked KU/IE*/
    172   1.9  jonathan #define MIPS1_SR_INT_ENA_PREV	0x00000004	/* 1st stacked KU/IE*/
    173   1.5  jonathan #define MIPS_3K_SR_KU_CUR	0x00000002	/* current KU */
    174   1.5  jonathan 
    175   1.5  jonathan /* backwards compatibility */
    176   1.5  jonathan #define MACH_SR_PARITY_ERR	MIPS_3K_PARITY_ERR
    177   1.5  jonathan #define MACH_SR_CACHE_MISS	MIPS_3K_CACHE_MISS
    178   1.5  jonathan #define MACH_SR_PARITY_ZERO	MIPS_3K_PARITY_ZERO
    179   1.5  jonathan #define MACH_SR_SWAP_CACHES	MIPS_3K_SWAP_CACHES
    180   1.5  jonathan #define MACH_SR_ISOL_CACHES	MIPS_3K_ISOL_CACHES
    181   1.5  jonathan 
    182   1.5  jonathan #define MACH_SR_KU_OLD		MIPS_3K_SR_KU_OLD
    183   1.5  jonathan #define MACH_SR_INT_ENA_OLD	MIPS_3K_SR_INT_ENA_OLD
    184   1.9  jonathan #define MACH_SR_KU_PREV		MIPS1_SR_KU_PREV
    185   1.5  jonathan #define MACH_SR_KU_CUR		MIPS_3K_SR_KU_CUR
    186   1.9  jonathan #define MACH_SR_INT_ENA_PREV	MIPS1_SR_INT_ENA_PREV
    187   1.5  jonathan 
    188   1.5  jonathan /*
    189   1.5  jonathan  * R4000 status register bit definitons,
    190   1.5  jonathan  * where different from r2000/r3000.
    191   1.5  jonathan  */
    192   1.5  jonathan #define MIPS_4K_SR_RP   	0x08000000
    193   1.5  jonathan #define MIPS_4K_SR_FR_32	0x04000000
    194   1.5  jonathan #define MIPS_4K_SR_RE   	0x02000000
    195   1.5  jonathan 
    196   1.5  jonathan #define MIPS_4K_SR_SOFT_RESET	0x00100000
    197   1.5  jonathan #define MIPS_4K_SR_DIAG_CH	0x00040000
    198   1.5  jonathan #define MIPS_4K_SR_DIAG_CE	0x00020000
    199   1.5  jonathan #define MIPS_4K_SR_DIAG_PE	0x00010000
    200   1.5  jonathan #define MIPS_4K_SR_KX		0x00000080
    201   1.5  jonathan #define MIPS_4K_SR_SX		0x00000040
    202   1.5  jonathan #define MIPS_4K_SR_UX		0x00000020
    203   1.5  jonathan #define MIPS_4K_SR_KSU_MASK	0x00000018
    204   1.9  jonathan #define MIPS3_SR_KSU_USER	0x00000010
    205   1.5  jonathan #define MIPS_4K_SR_KSU_SUPER	0x00000008
    206   1.5  jonathan #define MIPS_4K_SR_KSU_KERNEL	0x00000000
    207   1.5  jonathan #define MIPS_4K_SR_ERL		0x00000004
    208   1.5  jonathan #define MIPS_4K_SR_EXL		0x00000002
    209   1.5  jonathan 
    210   1.5  jonathan /* backwards compatibility with names used in Pica port */
    211   1.5  jonathan #define MACH_SR_RP		MIPS_4K_SR_RP
    212   1.5  jonathan #define MACH_SR_FR_32		MIPS_4K_SR_FR_32
    213   1.5  jonathan #define MACH_SR_RE		MIPS_4K_SR_RE
    214   1.5  jonathan 
    215   1.5  jonathan #define MACH_SR_SOFT_RESET	MIPS_4K_SR_SOFT_RESET
    216   1.5  jonathan #define MACH_SR_DIAG_CH		MIPS_4K_SR_DIAG_CH
    217   1.5  jonathan #define MACH_SR_DIAG_CE		MIPS_4K_SR_DIAG_CE
    218   1.5  jonathan #define MACH_SR_DIAG_PE		MIPS_4K_SR_DIAG_PE
    219   1.5  jonathan #define MACH_SR_KX		MIPS_4K_SR_KX
    220   1.5  jonathan #define MACH_SR_SX		MIPS_4K_SR_SX
    221   1.5  jonathan #define MACH_SR_UX		MIPS_4K_SR_UX
    222   1.5  jonathan 
    223   1.5  jonathan #define MACH_SR_KSU_MASK	MIPS_4K_SR_KSU_MASK
    224   1.9  jonathan #define MACH_SR_KSU_USER	MIPS3_SR_KSU_USER
    225   1.5  jonathan #define MACH_SR_KSU_SUPER	MIPS_4K_SR_KSU_SUPER
    226   1.5  jonathan #define MACH_SR_KSU_KERNEL	MIPS_4K_SR_KSU_KERNEL
    227   1.5  jonathan #define MACH_SR_ERL		MIPS_4K_SR_ERL
    228   1.5  jonathan #define MACH_SR_EXL		MIPS_4K_SR_EXL
    229   1.5  jonathan 
    230   1.1   deraadt 
    231   1.1   deraadt /*
    232   1.1   deraadt  * The interrupt masks.
    233   1.1   deraadt  * If a bit in the mask is 1 then the interrupt is enabled (or pending).
    234   1.1   deraadt  */
    235   1.5  jonathan #define MIPS_INT_MASK		0xff00
    236   1.1   deraadt #define MACH_INT_MASK_5		0x8000
    237   1.1   deraadt #define MACH_INT_MASK_4		0x4000
    238   1.1   deraadt #define MACH_INT_MASK_3		0x2000
    239   1.1   deraadt #define MACH_INT_MASK_2		0x1000
    240   1.1   deraadt #define MACH_INT_MASK_1		0x0800
    241   1.1   deraadt #define MACH_INT_MASK_0		0x0400
    242   1.5  jonathan #define MIPS_HARD_INT_MASK	0xfc00
    243   1.1   deraadt #define MACH_SOFT_INT_MASK_1	0x0200
    244   1.1   deraadt #define MACH_SOFT_INT_MASK_0	0x0100
    245   1.6  jonathan 
    246   1.8    mhitch 
    247   1.6  jonathan /*
    248   1.6  jonathan  * nesting interrupt masks.
    249   1.6  jonathan  */
    250   1.6  jonathan #define MACH_INT_MASK_SPL_SOFT0	MACH_SOFT_INT_MASK_0
    251   1.7  jonathan #define MACH_INT_MASK_SPL_SOFT1	(MACH_SOFT_INT_MASK_1|MACH_INT_MASK_SPL_SOFT0)
    252   1.6  jonathan #define MACH_INT_MASK_SPL0	(MACH_INT_MASK_0|MACH_INT_MASK_SPL_SOFT1)
    253   1.6  jonathan #define MACH_INT_MASK_SPL1	(MACH_INT_MASK_1|MACH_INT_MASK_SPL0)
    254   1.6  jonathan #define MACH_INT_MASK_SPL2	(MACH_INT_MASK_2|MACH_INT_MASK_SPL1)
    255   1.6  jonathan #define MACH_INT_MASK_SPL3	(MACH_INT_MASK_3|MACH_INT_MASK_SPL2)
    256   1.6  jonathan #define MACH_INT_MASK_SPL4	(MACH_INT_MASK_4|MACH_INT_MASK_SPL3)
    257   1.6  jonathan #define MACH_INT_MASK_SPL5	(MACH_INT_MASK_5|MACH_INT_MASK_SPL4)
    258   1.6  jonathan 
    259   1.1   deraadt 
    260   1.8    mhitch #ifdef MIPS3
    261   1.5  jonathan /* r4000 has on-chip timer at INT_MASK_5 */
    262   1.5  jonathan #define MACH_INT_MASK		(MIPS_INT_MASK &  ~MACH_INT_MASK_5)
    263   1.5  jonathan #define MACH_HARD_INT_MASK	(MIPS_HARD_INT_MASK & ~MACH_INT_MASK_5)
    264   1.8    mhitch #else
    265   1.8    mhitch #define MACH_INT_MASK		MIPS_INT_MASK
    266   1.8    mhitch #define MACH_HARD_INT_MASK	MIPS_HARD_INT_MASK
    267   1.5  jonathan #endif
    268   1.5  jonathan 
    269   1.1   deraadt /*
    270   1.1   deraadt  * The bits in the context register.
    271   1.1   deraadt  */
    272   1.5  jonathan #define MIPS_3K_CNTXT_PTE_BASE  0xFFE00000
    273   1.5  jonathan #define MIPS_3K_CNTXT_BAD_VPN   0x001FFFFC
    274   1.5  jonathan 
    275   1.5  jonathan #define MIPS_4K_CNTXT_PTE_BASE	0xFF800000
    276   1.5  jonathan #define MIPS_4K_CNTXT_BAD_VPN2	0x007FFFF0
    277   1.5  jonathan 
    278   1.5  jonathan /*
    279   1.5  jonathan  * Backwards compatbility -- XXX more thought
    280   1.5  jonathan  */
    281   1.8    mhitch #ifdef MIPS3
    282   1.8    mhitch #define MACH_CNTXT_PTE_BASE	MIPS_4K_CNTXT_PTE_BASE
    283   1.8    mhitch #define MACH_CNTXT_BAD_VPN2	MIPS_4K_CNTXT_BAD_VPN2
    284   1.8    mhitch #else
    285   1.5  jonathan #define MACH_CNTXT_PTE_BASE	MIPS_3K_CNTXT_PTE_BASE
    286   1.5  jonathan #define MACH_CNTXT_BAD_VPN	MIPS_3K_CNTXT_BAD_VPN
    287   1.8    mhitch #endif
    288   1.1   deraadt 
    289   1.1   deraadt /*
    290   1.1   deraadt  * Location of exception vectors.
    291   1.5  jonathan  *
    292   1.5  jonathan  * Common vectors:  reset and UTLB miss.
    293   1.1   deraadt  */
    294   1.1   deraadt #define MACH_RESET_EXC_VEC	0xBFC00000
    295   1.1   deraadt #define MACH_UTLB_MISS_EXC_VEC	0x80000000
    296   1.5  jonathan 
    297   1.5  jonathan /*
    298   1.5  jonathan  * R3000 general exception vector (everything else)
    299   1.5  jonathan  */
    300   1.9  jonathan #define MIPS1_GEN_EXC_VEC	0x80000080
    301   1.5  jonathan 
    302   1.5  jonathan /*
    303   1.5  jonathan  * R4000 MIPS-III exception vectors
    304   1.5  jonathan  */
    305   1.5  jonathan #define MIPS_4K_XTLB_MISS_EXC_VEC	0x80000080
    306   1.5  jonathan #define MIPS_4K_CACHE_ERR_EXC_VEC	0x80000100
    307   1.9  jonathan #define MIPS3_GEN_EXC_VEC		0x80000180
    308   1.5  jonathan 
    309   1.5  jonathan /*
    310   1.1   deraadt  * Coprocessor 0 registers:
    311   1.1   deraadt  *
    312   1.1   deraadt  *	MACH_COP_0_TLB_INDEX	TLB index.
    313   1.1   deraadt  *	MACH_COP_0_TLB_RANDOM	TLB random.
    314   1.5  jonathan  *	MACH_COP_0_TLB_LOW	r3k TLB entry low.
    315   1.5  jonathan  *	MACH_COP_0_TLB_LO0	r4k TLB entry low.
    316   1.5  jonathan  *	MACH_COP_0_TLB_LO1	r4k TLB entry low, extended.
    317   1.1   deraadt  *	MACH_COP_0_TLB_CONTEXT	TLB context.
    318   1.1   deraadt  *	MACH_COP_0_BAD_VADDR	Bad virtual address.
    319   1.1   deraadt  *	MACH_COP_0_TLB_HI	TLB entry high.
    320   1.1   deraadt  *	MACH_COP_0_STATUS_REG	Status register.
    321   1.1   deraadt  *	MACH_COP_0_CAUSE_REG	Exception cause register.
    322   1.1   deraadt  *	MACH_COP_0_EXC_PC	Exception PC.
    323   1.1   deraadt  *	MACH_COP_0_PRID		Processor revision identifier.
    324   1.1   deraadt  */
    325   1.1   deraadt #define MACH_COP_0_TLB_INDEX	$0
    326   1.1   deraadt #define MACH_COP_0_TLB_RANDOM	$1
    327   1.5  jonathan 	/* Name and meaning of  TLB bits for $2 differ on r3k and r4k. */
    328   1.5  jonathan 
    329   1.1   deraadt #define MACH_COP_0_TLB_CONTEXT	$4
    330   1.5  jonathan 					/* $5 and $6 new with MIPS-III */
    331   1.1   deraadt #define MACH_COP_0_BAD_VADDR	$8
    332   1.1   deraadt #define MACH_COP_0_TLB_HI	$10
    333   1.1   deraadt #define MACH_COP_0_STATUS_REG	$12
    334   1.1   deraadt #define MACH_COP_0_CAUSE_REG	$13
    335   1.1   deraadt #define MACH_COP_0_EXC_PC	$14
    336   1.1   deraadt #define MACH_COP_0_PRID		$15
    337   1.1   deraadt 
    338   1.5  jonathan 
    339   1.5  jonathan /* r3k-specific */
    340   1.5  jonathan #define MACH_COP_0_TLB_LOW	$2
    341   1.5  jonathan 
    342   1.5  jonathan /* MIPS-III additions */
    343   1.5  jonathan #define MACH_COP_0_TLB_LO0	$2
    344   1.5  jonathan #define MACH_COP_0_TLB_LO1	$3
    345   1.5  jonathan 
    346   1.5  jonathan #define MACH_COP_0_TLB_PG_MASK	$5
    347   1.5  jonathan #define MACH_COP_0_TLB_WIRED	$6
    348   1.5  jonathan 
    349   1.5  jonathan #define MACH_COP_0_CONFIG	$16
    350   1.5  jonathan #define MACH_COP_0_LLADDR	$17
    351   1.5  jonathan #define MACH_COP_0_WATCH_LO	$18
    352   1.5  jonathan #define MACH_COP_0_WATCH_HI	$19
    353   1.5  jonathan #define MACH_COP_0_TLB_XCONTEXT	$20
    354   1.5  jonathan #define MACH_COP_0_ECC		$26
    355   1.5  jonathan #define MACH_COP_0_CACHE_ERR	$27
    356   1.5  jonathan #define MACH_COP_0_TAG_LO	$28
    357   1.5  jonathan #define MACH_COP_0_TAG_HI	$29
    358   1.5  jonathan #define MACH_COP_0_ERROR_PC	$30
    359   1.5  jonathan 
    360   1.5  jonathan 
    361   1.5  jonathan 
    362   1.1   deraadt /*
    363   1.1   deraadt  * Values for the code field in a break instruction.
    364   1.1   deraadt  */
    365   1.1   deraadt #define MACH_BREAK_INSTR	0x0000000d
    366   1.1   deraadt #define MACH_BREAK_VAL_MASK	0x03ff0000
    367   1.1   deraadt #define MACH_BREAK_VAL_SHIFT	16
    368   1.1   deraadt #define MACH_BREAK_KDB_VAL	512
    369   1.1   deraadt #define MACH_BREAK_SSTEP_VAL	513
    370   1.1   deraadt #define MACH_BREAK_BRKPT_VAL	514
    371   1.5  jonathan #define MACH_BREAK_SOVER_VAL	515
    372   1.1   deraadt #define MACH_BREAK_KDB		(MACH_BREAK_INSTR | \
    373   1.1   deraadt 				(MACH_BREAK_KDB_VAL << MACH_BREAK_VAL_SHIFT))
    374   1.1   deraadt #define MACH_BREAK_SSTEP	(MACH_BREAK_INSTR | \
    375   1.1   deraadt 				(MACH_BREAK_SSTEP_VAL << MACH_BREAK_VAL_SHIFT))
    376   1.1   deraadt #define MACH_BREAK_BRKPT	(MACH_BREAK_INSTR | \
    377   1.1   deraadt 				(MACH_BREAK_BRKPT_VAL << MACH_BREAK_VAL_SHIFT))
    378   1.5  jonathan #define MACH_BREAK_SOVER	(MACH_BREAK_INSTR | \
    379   1.5  jonathan 				(MACH_BREAK_SOVER_VAL << MACH_BREAK_VAL_SHIFT))
    380   1.1   deraadt 
    381   1.1   deraadt /*
    382   1.1   deraadt  * Mininum and maximum cache sizes.
    383   1.1   deraadt  */
    384   1.1   deraadt #define MACH_MIN_CACHE_SIZE	(16 * 1024)
    385   1.1   deraadt #define MACH_MAX_CACHE_SIZE	(256 * 1024)
    386   1.1   deraadt 
    387   1.1   deraadt /*
    388   1.1   deraadt  * The floating point version and status registers.
    389   1.1   deraadt  */
    390   1.1   deraadt #define	MACH_FPC_ID	$0
    391   1.1   deraadt #define	MACH_FPC_CSR	$31
    392   1.1   deraadt 
    393   1.1   deraadt /*
    394   1.1   deraadt  * The floating point coprocessor status register bits.
    395   1.1   deraadt  */
    396   1.1   deraadt #define MACH_FPC_ROUNDING_BITS		0x00000003
    397   1.1   deraadt #define MACH_FPC_ROUND_RN		0x00000000
    398   1.1   deraadt #define MACH_FPC_ROUND_RZ		0x00000001
    399   1.1   deraadt #define MACH_FPC_ROUND_RP		0x00000002
    400   1.1   deraadt #define MACH_FPC_ROUND_RM		0x00000003
    401   1.1   deraadt #define MACH_FPC_STICKY_BITS		0x0000007c
    402   1.1   deraadt #define MACH_FPC_STICKY_INEXACT		0x00000004
    403   1.1   deraadt #define MACH_FPC_STICKY_UNDERFLOW	0x00000008
    404   1.1   deraadt #define MACH_FPC_STICKY_OVERFLOW	0x00000010
    405   1.1   deraadt #define MACH_FPC_STICKY_DIV0		0x00000020
    406   1.1   deraadt #define MACH_FPC_STICKY_INVALID		0x00000040
    407   1.1   deraadt #define MACH_FPC_ENABLE_BITS		0x00000f80
    408   1.1   deraadt #define MACH_FPC_ENABLE_INEXACT		0x00000080
    409   1.1   deraadt #define MACH_FPC_ENABLE_UNDERFLOW	0x00000100
    410   1.1   deraadt #define MACH_FPC_ENABLE_OVERFLOW	0x00000200
    411   1.1   deraadt #define MACH_FPC_ENABLE_DIV0		0x00000400
    412   1.1   deraadt #define MACH_FPC_ENABLE_INVALID		0x00000800
    413   1.1   deraadt #define MACH_FPC_EXCEPTION_BITS		0x0003f000
    414   1.1   deraadt #define MACH_FPC_EXCEPTION_INEXACT	0x00001000
    415   1.1   deraadt #define MACH_FPC_EXCEPTION_UNDERFLOW	0x00002000
    416   1.1   deraadt #define MACH_FPC_EXCEPTION_OVERFLOW	0x00004000
    417   1.1   deraadt #define MACH_FPC_EXCEPTION_DIV0		0x00008000
    418   1.1   deraadt #define MACH_FPC_EXCEPTION_INVALID	0x00010000
    419   1.1   deraadt #define MACH_FPC_EXCEPTION_UNIMPL	0x00020000
    420   1.1   deraadt #define MACH_FPC_COND_BIT		0x00800000
    421   1.5  jonathan #define MACH_FPC_FLUSH_BIT		0x01000000	/* r4k,  MBZ on r3k */
    422   1.5  jonathan #define MIPS_3K_FPC_MBZ_BITS		0xff7c0000
    423   1.5  jonathan #define MIPS_4K_FPC_MBZ_BITS		0xfe7c0000
    424   1.5  jonathan 
    425   1.1   deraadt 
    426   1.1   deraadt /*
    427   1.1   deraadt  * Constants to determine if have a floating point instruction.
    428   1.1   deraadt  */
    429   1.1   deraadt #define MACH_OPCODE_SHIFT	26
    430   1.1   deraadt #define MACH_OPCODE_C1		0x11
    431   1.1   deraadt 
    432   1.5  jonathan 
    433   1.5  jonathan 
    434   1.1   deraadt /*
    435   1.1   deraadt  * The low part of the TLB entry.
    436   1.1   deraadt  */
    437   1.5  jonathan #define VMMACH_MIPS_3K_TLB_PHYS_PAGE_SHIFT	12
    438   1.5  jonathan #define VMMACH_MIPS_3K_TLB_PF_NUM		0xfffff000
    439   1.5  jonathan #define VMMACH_MIPS_3K_TLB_NON_CACHEABLE_BIT	0x00000800
    440   1.5  jonathan #define VMMACH_MIPS_3K_TLB_MOD_BIT		0x00000400
    441   1.5  jonathan #define VMMACH_MIPS_3K_TLB_VALID_BIT		0x00000200
    442   1.5  jonathan #define VMMACH_MIPS_3K_TLB_GLOBAL_BIT		0x00000100
    443   1.5  jonathan 
    444   1.5  jonathan #define VMMACH_MIPS_4K_TLB_PHYS_PAGE_SHIFT	6
    445   1.5  jonathan #define VMMACH_MIPS_4K_TLB_PF_NUM		0x3fffffc0
    446   1.5  jonathan #define VMMACH_MIPS_4K_TLB_ATTR_MASK		0x00000038
    447   1.5  jonathan #define VMMACH_MIPS_4K_TLB_MOD_BIT		0x00000004
    448   1.5  jonathan #define VMMACH_MIPS_4K_TLB_VALID_BIT		0x00000002
    449   1.5  jonathan #define VMMACH_MIPS_4K_TLB_GLOBAL_BIT		0x00000001
    450   1.5  jonathan 
    451   1.5  jonathan 
    452   1.8    mhitch #ifdef MIPS3
    453   1.8    mhitch #define VMMACH_TLB_PHYS_PAGE_SHIFT	VMMACH_MIPS_4K_TLB_PHYS_PAGE_SHIFT
    454   1.8    mhitch #define VMMACH_TLB_PF_NUM		VMMACH_MIPS_4K_TLB_PF_NUM
    455   1.8    mhitch #define VMMACH_TLB_ATTR_MASK		VMMACH_MIPS_4K_TLB_ATTR_MASK
    456   1.8    mhitch #define VMMACH_TLB_MOD_BIT		VMMACH_MIPS_4K_TLB_MOD_BIT
    457   1.8    mhitch #define VMMACH_TLB_VALID_BIT		VMMACH_MIPS_4K_TLB_VALID_BIT
    458   1.8    mhitch #define VMMACH_TLB_GLOBAL_BIT		VMMACH_MIPS_4K_TLB_GLOBAL_BIT
    459   1.8    mhitch #else
    460   1.5  jonathan #define VMMACH_TLB_PHYS_PAGE_SHIFT	VMMACH_MIPS_3K_TLB_PHYS_PAGE_SHIFT
    461   1.5  jonathan #define VMMACH_TLB_PF_NUM		VMMACH_MIPS_3K_TLB_PF_NUM
    462   1.5  jonathan #define VMMACH_TLB_NON_CACHEABLE_BIT	VMMACH_MIPS_3K_TLB_NON_CACHEABLE_BIT
    463   1.5  jonathan #define VMMACH_TLB_MOD_BIT		VMMACH_MIPS_3K_TLB_MOD_BIT
    464   1.5  jonathan #define VMMACH_TLB_VALID_BIT		VMMACH_MIPS_3K_TLB_VALID_BIT
    465   1.5  jonathan #define VMMACH_TLB_GLOBAL_BIT		VMMACH_MIPS_3K_TLB_GLOBAL_BIT
    466   1.8    mhitch #endif
    467   1.1   deraadt 
    468   1.1   deraadt /*
    469   1.1   deraadt  * The high part of the TLB entry.
    470   1.1   deraadt  */
    471   1.5  jonathan #define VMMACH_TLB_VIRT_PAGE_SHIFT		12
    472   1.5  jonathan 
    473   1.5  jonathan #define VMMACH_TLB_MIPS_3K_VIRT_PAGE_NUM	0xfffff000
    474   1.5  jonathan #define VMMACH_TLB_MIPS_3K_PID			0x00000fc0
    475   1.5  jonathan #define VMMACH_TLB_MIPS_3K_PID_SHIFT		6
    476   1.5  jonathan 
    477   1.5  jonathan #define VMMACH_TLB_MIPS_4K_VIRT_PAGE_NUM	0xffffe000
    478   1.5  jonathan #define VMMACH_TLB_MIPS_4K_PID			0x000000ff
    479   1.5  jonathan #define VMMACH_TLB_MIPS_4K_PID_SHIFT		0
    480   1.5  jonathan 
    481   1.5  jonathan /* XXX needs more thought */
    482   1.5  jonathan /*
    483   1.5  jonathan  * backwards XXX needs more thought, should support runtime decisions.
    484   1.5  jonathan  */
    485   1.5  jonathan 
    486   1.8    mhitch #ifdef MIPS3
    487   1.8    mhitch #define VMMACH_TLB_VIRT_PAGE_NUM	VMMACH_TLB_MIPS_4K_VIRT_PAGE_NUM
    488   1.8    mhitch #define VMMACH_TLB_PID			VMMACH_TLB_MIPS_4K_PID
    489   1.8    mhitch #define VMMACH_TLB_PID_SHIFT		VMMACH_TLB_MIPS_4K_PID_SHIFT
    490   1.8    mhitch #else
    491   1.5  jonathan #define VMMACH_TLB_VIRT_PAGE_NUM	VMMACH_TLB_MIPS_3K_VIRT_PAGE_NUM
    492   1.5  jonathan #define VMMACH_TLB_PID			VMMACH_TLB_MIPS_3K_PID
    493   1.5  jonathan #define VMMACH_TLB_PID_SHIFT		VMMACH_TLB_MIPS_3K_PID_SHIFT
    494   1.5  jonathan #endif
    495   1.5  jonathan 
    496   1.1   deraadt /*
    497   1.5  jonathan  * r3000: shift count to put the index in the right spot.
    498   1.5  jonathan  * (zero on r4000?)
    499   1.1   deraadt  */
    500   1.1   deraadt #define VMMACH_TLB_INDEX_SHIFT		8
    501   1.1   deraadt 
    502   1.5  jonathan 
    503   1.1   deraadt /*
    504   1.1   deraadt  * The number of TLB entries and the first one that write random hits.
    505   1.1   deraadt  */
    506   1.5  jonathan #define VMMACH_MIPS_3K_NUM_TLB_ENTRIES	64
    507   1.5  jonathan #define VMMACH_MIPS_3K_FIRST_RAND_ENTRY	8
    508   1.5  jonathan 
    509   1.5  jonathan #define VMMACH_MIPS_4K_NUM_TLB_ENTRIES	48
    510   1.5  jonathan #define VMMACH_MIPS_4K_WIRED_ENTRIES	8
    511   1.5  jonathan 
    512   1.5  jonathan /* compatibility with existing locore -- XXX more thought */
    513   1.8    mhitch #ifdef MIPS3
    514   1.8    mhitch #define VMMACH_NUM_TLB_ENTRIES		VMMACH_MIPS_4K_NUM_TLB_ENTRIES
    515   1.8    mhitch #define VMMACH_WIRED_ENTRIES	 	VMMACH_MIPS_4K_WIRED_ENTRIES
    516   1.8    mhitch #else
    517   1.5  jonathan #define VMMACH_NUM_TLB_ENTRIES		VMMACH_MIPS_3K_NUM_TLB_ENTRIES
    518   1.8    mhitch #endif
    519   1.5  jonathan #define VMMACH_FIRST_RAND_ENTRY 	VMMACH_MIPS_3K_FIRST_RAND_ENTRY
    520   1.1   deraadt 
    521   1.1   deraadt /*
    522   1.1   deraadt  * The number of process id entries.
    523   1.1   deraadt  */
    524   1.5  jonathan #define	VMMACH_MIPS_3K_NUM_PIDS			64
    525   1.5  jonathan #define	VMMACH_MIPS_4K_NUM_PIDS			256
    526   1.5  jonathan 
    527   1.8    mhitch #ifdef MIPS3
    528   1.8    mhitch #define	VMMACH_NUM_PIDS		VMMACH_MIPS_4K_NUM_PIDS
    529   1.8    mhitch #else
    530   1.5  jonathan #define	VMMACH_NUM_PIDS		VMMACH_MIPS_3K_NUM_PIDS
    531   1.8    mhitch #endif
    532   1.1   deraadt 
    533   1.1   deraadt /*
    534   1.1   deraadt  * TLB probe return codes.
    535   1.1   deraadt  */
    536   1.1   deraadt #define VMMACH_TLB_NOT_FOUND		0
    537   1.1   deraadt #define VMMACH_TLB_FOUND		1
    538   1.1   deraadt #define VMMACH_TLB_FOUND_WITH_PATCH	2
    539   1.1   deraadt #define VMMACH_TLB_PROBE_ERROR		3
    540   1.1   deraadt 
    541  1.10  jonathan #endif /* _MIPS_CPUREGS_H_ */
    542