Home | History | Annotate | Line # | Download | only in include
cpuregs.h revision 1.5
      1  1.5  jonathan /*	$NetBSD: cpuregs.h,v 1.5 1996/03/28 11:34:05 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.1   deraadt #ifndef _MACHCONST
     61  1.1   deraadt #define _MACHCONST
     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.5  jonathan  * XXX
     85  1.5  jonathan  * Port-specific constants:
     86  1.5  jonathan  * Kernel virtual address at which kernel is loaded, and
     87  1.5  jonathan  * Kernel virtual address for user page table entries
     88  1.5  jonathan  * (i.e., the address for the context register).
     89  1.5  jonathan  */
     90  1.5  jonathan #ifdef pmax
     91  1.1   deraadt #define MACH_CODE_START			0x80030000
     92  1.5  jonathan #define VMMACH_PTE_BASE			0xFFC00000
     93  1.5  jonathan #endif	/* pmax */
     94  1.5  jonathan 
     95  1.5  jonathan #ifdef pica
     96  1.5  jonathan #define MACH_CODE_START			0x80080000
     97  1.5  jonathan #define VMMACH_PTE_BASE			0xFF800000
     98  1.5  jonathan #endif	/* pica */
     99  1.5  jonathan 
    100  1.5  jonathan 
    101  1.1   deraadt 
    102  1.1   deraadt /*
    103  1.1   deraadt  * The bits in the cause register.
    104  1.1   deraadt  *
    105  1.5  jonathan  * Bits common to r3000 and r4000:
    106  1.5  jonathan  *
    107  1.1   deraadt  *	MACH_CR_BR_DELAY	Exception happened in branch delay slot.
    108  1.1   deraadt  *	MACH_CR_COP_ERR		Coprocessor error.
    109  1.5  jonathan  *	MACH_CR_IP		Interrupt pending bits defined below.
    110  1.5  jonathan  *				(same meaning as in CAUSE register).
    111  1.1   deraadt  *	MACH_CR_EXC_CODE	The exception type (see exception codes below).
    112  1.5  jonathan  *
    113  1.5  jonathan  * Differences:
    114  1.5  jonathan  *  r3k has 4 bits of execption type, r4k has 5 bits.
    115  1.1   deraadt  */
    116  1.1   deraadt #define MACH_CR_BR_DELAY	0x80000000
    117  1.1   deraadt #define MACH_CR_COP_ERR		0x30000000
    118  1.5  jonathan #define MIPS_3K_CR_EXC_CODE	0x0000003C
    119  1.5  jonathan #define MIPS_4K_CR_EXC_CODE	0x0000007C
    120  1.5  jonathan #define MACH_CR_IP		0x0000FF00
    121  1.1   deraadt #define MACH_CR_EXC_CODE_SHIFT	2
    122  1.1   deraadt 
    123  1.5  jonathan #ifdef pmax /* XXX not used any more, only to satisfy regression tests */
    124  1.5  jonathan #define MACH_CR_EXC_CODE	MIPS_3K_CR_EXC_CODE
    125  1.5  jonathan #endif	/* pmax */
    126  1.5  jonathan #ifdef pica
    127  1.5  jonathan #define MACH_CR_EXC_CODE	MIPS_4K_CR_EXC_CODE
    128  1.5  jonathan #endif	/* pica */
    129  1.5  jonathan 
    130  1.5  jonathan 
    131  1.1   deraadt /*
    132  1.1   deraadt  * The bits in the status register.  All bits are active when set to 1.
    133  1.1   deraadt  *
    134  1.5  jonathan  *	R3000 status register fields:
    135  1.1   deraadt  *	MACH_SR_CO_USABILITY	Control the usability of the four coprocessors.
    136  1.1   deraadt  *	MACH_SR_BOOT_EXC_VEC	Use alternate exception vectors.
    137  1.1   deraadt  *	MACH_SR_TLB_SHUTDOWN	TLB disabled.
    138  1.5  jonathan  *
    139  1.5  jonathan  *	MIPS_SR_INT_IE		Master (current) interrupt enable bit.
    140  1.5  jonathan  *
    141  1.5  jonathan  * Differences:
    142  1.5  jonathan  *	r3k has cache control is via frobbing SR register bits, whereas the
    143  1.5  jonathan  *	r4k cache control is via explicit instructions.
    144  1.5  jonathan  *	r3k has a 3-entry stack of kernel/user bits, whereas the
    145  1.5  jonathan  *	r4k has kernel/supervisor/user.
    146  1.5  jonathan  */
    147  1.5  jonathan #define MACH_SR_COP_USABILITY	0xf0000000
    148  1.5  jonathan #define MACH_SR_COP_0_BIT	0x10000000
    149  1.5  jonathan #define MACH_SR_COP_1_BIT	0x20000000
    150  1.5  jonathan 
    151  1.5  jonathan 	/* r4k and r3k differences, see below */
    152  1.5  jonathan 
    153  1.5  jonathan #define MACH_SR_BOOT_EXC_VEC	0x00400000
    154  1.5  jonathan #define MACH_SR_TLB_SHUTDOWN	0x00200000
    155  1.5  jonathan 
    156  1.5  jonathan 	/* r4k and r3k differences, see below */
    157  1.5  jonathan 
    158  1.5  jonathan #define MIPS_SR_INT_IE		0x00000001
    159  1.5  jonathan /*#define MACH_SR_MBZ		0x0f8000c0*/	/* Never used, true for r3k */
    160  1.5  jonathan /*#define MACH_SR_INT_MASK	0x0000ff00*/
    161  1.5  jonathan 
    162  1.5  jonathan #define MACH_SR_INT_ENAB	MIPS_SR_INT_IE	/* backwards compatibility */
    163  1.5  jonathan #define MACH_SR_INT_ENA_CUR	MIPS_SR_INT_IE	/* backwards compatibility */
    164  1.5  jonathan 
    165  1.5  jonathan 
    166  1.5  jonathan 
    167  1.5  jonathan /*
    168  1.5  jonathan  * The R2000/R3000-specific status register bit definitions.
    169  1.5  jonathan  * all bits are active when set to 1.
    170  1.5  jonathan  *
    171  1.1   deraadt  *	MACH_SR_PARITY_ERR	Parity error.
    172  1.1   deraadt  *	MACH_SR_CACHE_MISS	Most recent D-cache load resulted in a miss.
    173  1.1   deraadt  *	MACH_SR_PARITY_ZERO	Zero replaces outgoing parity bits.
    174  1.1   deraadt  *	MACH_SR_SWAP_CACHES	Swap I-cache and D-cache.
    175  1.1   deraadt  *	MACH_SR_ISOL_CACHES	Isolate D-cache from main memory.
    176  1.1   deraadt  *				Interrupt enable bits defined below.
    177  1.1   deraadt  *	MACH_SR_KU_OLD		Old kernel/user mode bit. 1 => user mode.
    178  1.1   deraadt  *	MACH_SR_INT_ENA_OLD	Old interrupt enable bit.
    179  1.1   deraadt  *	MACH_SR_KU_PREV		Previous kernel/user mode bit. 1 => user mode.
    180  1.1   deraadt  *	MACH_SR_INT_ENA_PREV	Previous interrupt enable bit.
    181  1.1   deraadt  *	MACH_SR_KU_CUR		Current kernel/user mode bit. 1 => user mode.
    182  1.1   deraadt  */
    183  1.5  jonathan 
    184  1.5  jonathan #define MIPS_3K_PARITY_ERR      0x00100000
    185  1.5  jonathan #define MIPS_3K_CACHE_MISS      0x00080000
    186  1.5  jonathan #define MIPS_3K_PARITY_ZERO     0x00040000
    187  1.5  jonathan #define MIPS_3K_SWAP_CACHES     0x00020000
    188  1.5  jonathan #define MIPS_3K_ISOL_CACHES     0x00010000
    189  1.5  jonathan 
    190  1.5  jonathan #define MIPS_3K_SR_KU_OLD	0x00000020	/* 2nd stacked KU/IE*/
    191  1.5  jonathan #define MIPS_3K_SR_INT_ENA_OLD	0x00000010	/* 2nd stacked KU/IE*/
    192  1.5  jonathan #define MIPS_3K_SR_KU_PREV	0x00000008	/* 1st stacked KU/IE*/
    193  1.5  jonathan #define MIPS_3K_SR_INT_ENA_PREV	0x00000004	/* 1st stacked KU/IE*/
    194  1.5  jonathan #define MIPS_3K_SR_KU_CUR	0x00000002	/* current KU */
    195  1.5  jonathan 
    196  1.5  jonathan /* backwards compatibility */
    197  1.5  jonathan #define MACH_SR_PARITY_ERR	MIPS_3K_PARITY_ERR
    198  1.5  jonathan #define MACH_SR_CACHE_MISS	MIPS_3K_CACHE_MISS
    199  1.5  jonathan #define MACH_SR_PARITY_ZERO	MIPS_3K_PARITY_ZERO
    200  1.5  jonathan #define MACH_SR_SWAP_CACHES	MIPS_3K_SWAP_CACHES
    201  1.5  jonathan #define MACH_SR_ISOL_CACHES	MIPS_3K_ISOL_CACHES
    202  1.5  jonathan 
    203  1.5  jonathan #define MACH_SR_KU_OLD		MIPS_3K_SR_KU_OLD
    204  1.5  jonathan #define MACH_SR_INT_ENA_OLD	MIPS_3K_SR_INT_ENA_OLD
    205  1.5  jonathan #define MACH_SR_KU_PREV		MIPS_3K_SR_KU_PREV
    206  1.5  jonathan #define MACH_SR_KU_CUR		MIPS_3K_SR_KU_CUR
    207  1.5  jonathan #define MACH_SR_INT_ENA_PREV	MIPS_3K_SR_INT_ENA_PREV
    208  1.5  jonathan 
    209  1.5  jonathan 
    210  1.5  jonathan /*
    211  1.5  jonathan  * R4000 status register bit definitons,
    212  1.5  jonathan  * where different from r2000/r3000.
    213  1.5  jonathan  */
    214  1.5  jonathan #define MIPS_4K_SR_RP   	0x08000000
    215  1.5  jonathan #define MIPS_4K_SR_FR_32	0x04000000
    216  1.5  jonathan #define MIPS_4K_SR_RE   	0x02000000
    217  1.5  jonathan 
    218  1.5  jonathan #define MIPS_4K_SR_SOFT_RESET	0x00100000
    219  1.5  jonathan #define MIPS_4K_SR_DIAG_CH	0x00040000
    220  1.5  jonathan #define MIPS_4K_SR_DIAG_CE	0x00020000
    221  1.5  jonathan #define MIPS_4K_SR_DIAG_PE	0x00010000
    222  1.5  jonathan #define MIPS_4K_SR_KX		0x00000080
    223  1.5  jonathan #define MIPS_4K_SR_SX		0x00000040
    224  1.5  jonathan #define MIPS_4K_SR_UX		0x00000020
    225  1.5  jonathan #define MIPS_4K_SR_KSU_MASK	0x00000018
    226  1.5  jonathan #define MIPS_4K_SR_KSU_USER	0x00000010
    227  1.5  jonathan #define MIPS_4K_SR_KSU_SUPER	0x00000008
    228  1.5  jonathan #define MIPS_4K_SR_KSU_KERNEL	0x00000000
    229  1.5  jonathan #define MIPS_4K_SR_ERL		0x00000004
    230  1.5  jonathan #define MIPS_4K_SR_EXL		0x00000002
    231  1.5  jonathan 
    232  1.5  jonathan /* backwards compatibility with names used in Pica port */
    233  1.5  jonathan #define MACH_SR_RP		MIPS_4K_SR_RP
    234  1.5  jonathan #define MACH_SR_FR_32		MIPS_4K_SR_FR_32
    235  1.5  jonathan #define MACH_SR_RE		MIPS_4K_SR_RE
    236  1.5  jonathan 
    237  1.5  jonathan #define MACH_SR_SOFT_RESET	MIPS_4K_SR_SOFT_RESET
    238  1.5  jonathan #define MACH_SR_DIAG_CH		MIPS_4K_SR_DIAG_CH
    239  1.5  jonathan #define MACH_SR_DIAG_CE		MIPS_4K_SR_DIAG_CE
    240  1.5  jonathan #define MACH_SR_DIAG_PE		MIPS_4K_SR_DIAG_PE
    241  1.5  jonathan #define MACH_SR_KX		MIPS_4K_SR_KX
    242  1.5  jonathan #define MACH_SR_SX		MIPS_4K_SR_SX
    243  1.5  jonathan #define MACH_SR_UX		MIPS_4K_SR_UX
    244  1.5  jonathan 
    245  1.5  jonathan #define MACH_SR_KSU_MASK	MIPS_4K_SR_KSU_MASK
    246  1.5  jonathan #define MACH_SR_KSU_USER	MIPS_4K_SR_KSU_USER
    247  1.5  jonathan #define MACH_SR_KSU_SUPER	MIPS_4K_SR_KSU_SUPER
    248  1.5  jonathan #define MACH_SR_KSU_KERNEL	MIPS_4K_SR_KSU_KERNEL
    249  1.5  jonathan #define MACH_SR_ERL		MIPS_4K_SR_ERL
    250  1.5  jonathan #define MACH_SR_EXL		MIPS_4K_SR_EXL
    251  1.5  jonathan 
    252  1.1   deraadt 
    253  1.1   deraadt /*
    254  1.1   deraadt  * The interrupt masks.
    255  1.1   deraadt  * If a bit in the mask is 1 then the interrupt is enabled (or pending).
    256  1.1   deraadt  */
    257  1.5  jonathan #define MIPS_INT_MASK		0xff00
    258  1.1   deraadt #define MACH_INT_MASK_5		0x8000
    259  1.1   deraadt #define MACH_INT_MASK_4		0x4000
    260  1.1   deraadt #define MACH_INT_MASK_3		0x2000
    261  1.1   deraadt #define MACH_INT_MASK_2		0x1000
    262  1.1   deraadt #define MACH_INT_MASK_1		0x0800
    263  1.1   deraadt #define MACH_INT_MASK_0		0x0400
    264  1.5  jonathan #define MIPS_HARD_INT_MASK	0xfc00
    265  1.1   deraadt #define MACH_SOFT_INT_MASK_1	0x0200
    266  1.1   deraadt #define MACH_SOFT_INT_MASK_0	0x0100
    267  1.1   deraadt 
    268  1.5  jonathan #ifdef pmax
    269  1.5  jonathan #define MACH_INT_MASK		MIPS_INT_MASK
    270  1.5  jonathan #define MACH_HARD_INT_MASK	MIPS_HARD_INT_MASK
    271  1.5  jonathan #endif
    272  1.5  jonathan 
    273  1.5  jonathan /* r4000 has on-chip timer at INT_MASK_5 */
    274  1.5  jonathan #ifdef pica
    275  1.5  jonathan #define MACH_INT_MASK		(MIPS_INT_MASK &  ~MACH_INT_MASK_5)
    276  1.5  jonathan #define MACH_HARD_INT_MASK	(MIPS_HARD_INT_MASK & ~MACH_INT_MASK_5)
    277  1.5  jonathan #endif
    278  1.5  jonathan 
    279  1.5  jonathan 
    280  1.5  jonathan 
    281  1.1   deraadt /*
    282  1.1   deraadt  * The bits in the context register.
    283  1.1   deraadt  */
    284  1.5  jonathan #define MIPS_3K_CNTXT_PTE_BASE  0xFFE00000
    285  1.5  jonathan #define MIPS_3K_CNTXT_BAD_VPN   0x001FFFFC
    286  1.5  jonathan 
    287  1.5  jonathan #define MIPS_4K_CNTXT_PTE_BASE	0xFF800000
    288  1.5  jonathan #define MIPS_4K_CNTXT_BAD_VPN2	0x007FFFF0
    289  1.5  jonathan 
    290  1.5  jonathan /*
    291  1.5  jonathan  * Backwards compatbility -- XXX more thought
    292  1.5  jonathan  */
    293  1.5  jonathan #ifdef pmax
    294  1.5  jonathan #define MACH_CNTXT_PTE_BASE	MIPS_3K_CNTXT_PTE_BASE
    295  1.5  jonathan #define MACH_CNTXT_BAD_VPN	MIPS_3K_CNTXT_BAD_VPN
    296  1.5  jonathan #endif	/* pmax */
    297  1.5  jonathan 
    298  1.5  jonathan #ifdef pica
    299  1.5  jonathan #define MACH_CNTXT_PTE_BASE	MIPS_4K_CNTXT_PTE_BASE
    300  1.5  jonathan #define MACH_CNTXT_BAD_VPN2	MIPS_4K_CNTXT_BAD_VPN2
    301  1.5  jonathan #endif	/* pica */
    302  1.5  jonathan 
    303  1.5  jonathan 
    304  1.1   deraadt 
    305  1.1   deraadt /*
    306  1.1   deraadt  * Location of exception vectors.
    307  1.5  jonathan  *
    308  1.5  jonathan  * Common vectors:  reset and UTLB miss.
    309  1.1   deraadt  */
    310  1.1   deraadt #define MACH_RESET_EXC_VEC	0xBFC00000
    311  1.1   deraadt #define MACH_UTLB_MISS_EXC_VEC	0x80000000
    312  1.5  jonathan 
    313  1.5  jonathan /*
    314  1.5  jonathan  * R3000 general exception vector (everything else)
    315  1.5  jonathan  */
    316  1.5  jonathan #define MIPS_3K_GEN_EXC_VEC	0x80000080
    317  1.5  jonathan 
    318  1.5  jonathan /*
    319  1.5  jonathan  * R4000 MIPS-III exception vectors
    320  1.5  jonathan  */
    321  1.5  jonathan #define MIPS_4K_XTLB_MISS_EXC_VEC	0x80000080
    322  1.5  jonathan #define MIPS_4K_CACHE_ERR_EXC_VEC	0x80000100
    323  1.5  jonathan #define MIPS_4K_GEN_EXC_VEC		0x80000180
    324  1.5  jonathan 
    325  1.5  jonathan /*
    326  1.5  jonathan  * Backwards compatbility -- XXX more thought
    327  1.5  jonathan  */
    328  1.5  jonathan #ifdef pmax
    329  1.5  jonathan #define MACH_GEN_EXC_VEC	MIPS_3K_GEN_EXC_VEC
    330  1.5  jonathan #endif	/* pmax */
    331  1.5  jonathan 
    332  1.5  jonathan #ifdef pica
    333  1.5  jonathan #define MACH_GEN_EXC_VEC	MIPS_4K_GEN_EXC_VEC
    334  1.5  jonathan #define MACH_TLB_MISS_EXC_VEC	MACH_UTLB_MISS_EXC_VEC	/* locore compat */
    335  1.5  jonathan #define MACH_XTLB_MISS_EXC_VEC	MIPS_4K_XTLB_MISS_EXC_VEC
    336  1.5  jonathan #define MACH_CACHE_ERR_EXC_VEC	MIPS_4K_CACHE_ERR_EXC_VEC
    337  1.5  jonathan #endif	/* pica */
    338  1.5  jonathan 
    339  1.5  jonathan 
    340  1.1   deraadt 
    341  1.1   deraadt /*
    342  1.1   deraadt  * Coprocessor 0 registers:
    343  1.1   deraadt  *
    344  1.1   deraadt  *	MACH_COP_0_TLB_INDEX	TLB index.
    345  1.1   deraadt  *	MACH_COP_0_TLB_RANDOM	TLB random.
    346  1.5  jonathan  *	MACH_COP_0_TLB_LOW	r3k TLB entry low.
    347  1.5  jonathan  *	MACH_COP_0_TLB_LO0	r4k TLB entry low.
    348  1.5  jonathan  *	MACH_COP_0_TLB_LO1	r4k TLB entry low, extended.
    349  1.1   deraadt  *	MACH_COP_0_TLB_CONTEXT	TLB context.
    350  1.1   deraadt  *	MACH_COP_0_BAD_VADDR	Bad virtual address.
    351  1.1   deraadt  *	MACH_COP_0_TLB_HI	TLB entry high.
    352  1.1   deraadt  *	MACH_COP_0_STATUS_REG	Status register.
    353  1.1   deraadt  *	MACH_COP_0_CAUSE_REG	Exception cause register.
    354  1.1   deraadt  *	MACH_COP_0_EXC_PC	Exception PC.
    355  1.1   deraadt  *	MACH_COP_0_PRID		Processor revision identifier.
    356  1.1   deraadt  */
    357  1.1   deraadt #define MACH_COP_0_TLB_INDEX	$0
    358  1.1   deraadt #define MACH_COP_0_TLB_RANDOM	$1
    359  1.5  jonathan 	/* Name and meaning of  TLB bits for $2 differ on r3k and r4k. */
    360  1.5  jonathan 
    361  1.1   deraadt #define MACH_COP_0_TLB_CONTEXT	$4
    362  1.5  jonathan 					/* $5 and $6 new with MIPS-III */
    363  1.1   deraadt #define MACH_COP_0_BAD_VADDR	$8
    364  1.1   deraadt #define MACH_COP_0_TLB_HI	$10
    365  1.1   deraadt #define MACH_COP_0_STATUS_REG	$12
    366  1.1   deraadt #define MACH_COP_0_CAUSE_REG	$13
    367  1.1   deraadt #define MACH_COP_0_EXC_PC	$14
    368  1.1   deraadt #define MACH_COP_0_PRID		$15
    369  1.1   deraadt 
    370  1.5  jonathan 
    371  1.5  jonathan /* r3k-specific */
    372  1.5  jonathan #define MACH_COP_0_TLB_LOW	$2
    373  1.5  jonathan 
    374  1.5  jonathan /* MIPS-III additions */
    375  1.5  jonathan #define MACH_COP_0_TLB_LO0	$2
    376  1.5  jonathan #define MACH_COP_0_TLB_LO1	$3
    377  1.5  jonathan 
    378  1.5  jonathan #define MACH_COP_0_TLB_PG_MASK	$5
    379  1.5  jonathan #define MACH_COP_0_TLB_WIRED	$6
    380  1.5  jonathan 
    381  1.5  jonathan #define MACH_COP_0_CONFIG	$16
    382  1.5  jonathan #define MACH_COP_0_LLADDR	$17
    383  1.5  jonathan #define MACH_COP_0_WATCH_LO	$18
    384  1.5  jonathan #define MACH_COP_0_WATCH_HI	$19
    385  1.5  jonathan #define MACH_COP_0_TLB_XCONTEXT	$20
    386  1.5  jonathan #define MACH_COP_0_ECC		$26
    387  1.5  jonathan #define MACH_COP_0_CACHE_ERR	$27
    388  1.5  jonathan #define MACH_COP_0_TAG_LO	$28
    389  1.5  jonathan #define MACH_COP_0_TAG_HI	$29
    390  1.5  jonathan #define MACH_COP_0_ERROR_PC	$30
    391  1.5  jonathan 
    392  1.5  jonathan 
    393  1.5  jonathan 
    394  1.1   deraadt /*
    395  1.1   deraadt  * Values for the code field in a break instruction.
    396  1.1   deraadt  */
    397  1.1   deraadt #define MACH_BREAK_INSTR	0x0000000d
    398  1.1   deraadt #define MACH_BREAK_VAL_MASK	0x03ff0000
    399  1.1   deraadt #define MACH_BREAK_VAL_SHIFT	16
    400  1.1   deraadt #define MACH_BREAK_KDB_VAL	512
    401  1.1   deraadt #define MACH_BREAK_SSTEP_VAL	513
    402  1.1   deraadt #define MACH_BREAK_BRKPT_VAL	514
    403  1.5  jonathan #define MACH_BREAK_SOVER_VAL	515
    404  1.1   deraadt #define MACH_BREAK_KDB		(MACH_BREAK_INSTR | \
    405  1.1   deraadt 				(MACH_BREAK_KDB_VAL << MACH_BREAK_VAL_SHIFT))
    406  1.1   deraadt #define MACH_BREAK_SSTEP	(MACH_BREAK_INSTR | \
    407  1.1   deraadt 				(MACH_BREAK_SSTEP_VAL << MACH_BREAK_VAL_SHIFT))
    408  1.1   deraadt #define MACH_BREAK_BRKPT	(MACH_BREAK_INSTR | \
    409  1.1   deraadt 				(MACH_BREAK_BRKPT_VAL << MACH_BREAK_VAL_SHIFT))
    410  1.5  jonathan #define MACH_BREAK_SOVER	(MACH_BREAK_INSTR | \
    411  1.5  jonathan 				(MACH_BREAK_SOVER_VAL << MACH_BREAK_VAL_SHIFT))
    412  1.1   deraadt 
    413  1.1   deraadt /*
    414  1.1   deraadt  * Mininum and maximum cache sizes.
    415  1.1   deraadt  */
    416  1.1   deraadt #define MACH_MIN_CACHE_SIZE	(16 * 1024)
    417  1.1   deraadt #define MACH_MAX_CACHE_SIZE	(256 * 1024)
    418  1.1   deraadt 
    419  1.1   deraadt /*
    420  1.1   deraadt  * The floating point version and status registers.
    421  1.1   deraadt  */
    422  1.1   deraadt #define	MACH_FPC_ID	$0
    423  1.1   deraadt #define	MACH_FPC_CSR	$31
    424  1.1   deraadt 
    425  1.1   deraadt /*
    426  1.1   deraadt  * The floating point coprocessor status register bits.
    427  1.1   deraadt  */
    428  1.1   deraadt #define MACH_FPC_ROUNDING_BITS		0x00000003
    429  1.1   deraadt #define MACH_FPC_ROUND_RN		0x00000000
    430  1.1   deraadt #define MACH_FPC_ROUND_RZ		0x00000001
    431  1.1   deraadt #define MACH_FPC_ROUND_RP		0x00000002
    432  1.1   deraadt #define MACH_FPC_ROUND_RM		0x00000003
    433  1.1   deraadt #define MACH_FPC_STICKY_BITS		0x0000007c
    434  1.1   deraadt #define MACH_FPC_STICKY_INEXACT		0x00000004
    435  1.1   deraadt #define MACH_FPC_STICKY_UNDERFLOW	0x00000008
    436  1.1   deraadt #define MACH_FPC_STICKY_OVERFLOW	0x00000010
    437  1.1   deraadt #define MACH_FPC_STICKY_DIV0		0x00000020
    438  1.1   deraadt #define MACH_FPC_STICKY_INVALID		0x00000040
    439  1.1   deraadt #define MACH_FPC_ENABLE_BITS		0x00000f80
    440  1.1   deraadt #define MACH_FPC_ENABLE_INEXACT		0x00000080
    441  1.1   deraadt #define MACH_FPC_ENABLE_UNDERFLOW	0x00000100
    442  1.1   deraadt #define MACH_FPC_ENABLE_OVERFLOW	0x00000200
    443  1.1   deraadt #define MACH_FPC_ENABLE_DIV0		0x00000400
    444  1.1   deraadt #define MACH_FPC_ENABLE_INVALID		0x00000800
    445  1.1   deraadt #define MACH_FPC_EXCEPTION_BITS		0x0003f000
    446  1.1   deraadt #define MACH_FPC_EXCEPTION_INEXACT	0x00001000
    447  1.1   deraadt #define MACH_FPC_EXCEPTION_UNDERFLOW	0x00002000
    448  1.1   deraadt #define MACH_FPC_EXCEPTION_OVERFLOW	0x00004000
    449  1.1   deraadt #define MACH_FPC_EXCEPTION_DIV0		0x00008000
    450  1.1   deraadt #define MACH_FPC_EXCEPTION_INVALID	0x00010000
    451  1.1   deraadt #define MACH_FPC_EXCEPTION_UNIMPL	0x00020000
    452  1.1   deraadt #define MACH_FPC_COND_BIT		0x00800000
    453  1.5  jonathan #define MACH_FPC_FLUSH_BIT		0x01000000	/* r4k,  MBZ on r3k */
    454  1.5  jonathan #define MIPS_3K_FPC_MBZ_BITS		0xff7c0000
    455  1.5  jonathan #define MIPS_4K_FPC_MBZ_BITS		0xfe7c0000
    456  1.5  jonathan 
    457  1.1   deraadt 
    458  1.1   deraadt /*
    459  1.1   deraadt  * Constants to determine if have a floating point instruction.
    460  1.1   deraadt  */
    461  1.1   deraadt #define MACH_OPCODE_SHIFT	26
    462  1.1   deraadt #define MACH_OPCODE_C1		0x11
    463  1.1   deraadt 
    464  1.5  jonathan 
    465  1.5  jonathan 
    466  1.1   deraadt /*
    467  1.1   deraadt  * The low part of the TLB entry.
    468  1.1   deraadt  */
    469  1.5  jonathan #define VMMACH_MIPS_3K_TLB_PHYS_PAGE_SHIFT	12
    470  1.5  jonathan #define VMMACH_MIPS_3K_TLB_PF_NUM		0xfffff000
    471  1.5  jonathan #define VMMACH_MIPS_3K_TLB_NON_CACHEABLE_BIT	0x00000800
    472  1.5  jonathan #define VMMACH_MIPS_3K_TLB_MOD_BIT		0x00000400
    473  1.5  jonathan #define VMMACH_MIPS_3K_TLB_VALID_BIT		0x00000200
    474  1.5  jonathan #define VMMACH_MIPS_3K_TLB_GLOBAL_BIT		0x00000100
    475  1.5  jonathan 
    476  1.5  jonathan #define VMMACH_MIPS_4K_TLB_PHYS_PAGE_SHIFT	6
    477  1.5  jonathan #define VMMACH_MIPS_4K_TLB_PF_NUM		0x3fffffc0
    478  1.5  jonathan #define VMMACH_MIPS_4K_TLB_ATTR_MASK		0x00000038
    479  1.5  jonathan #define VMMACH_MIPS_4K_TLB_MOD_BIT		0x00000004
    480  1.5  jonathan #define VMMACH_MIPS_4K_TLB_VALID_BIT		0x00000002
    481  1.5  jonathan #define VMMACH_MIPS_4K_TLB_GLOBAL_BIT		0x00000001
    482  1.5  jonathan 
    483  1.5  jonathan 
    484  1.5  jonathan #ifdef pmax /* XXX */
    485  1.5  jonathan #define VMMACH_TLB_PHYS_PAGE_SHIFT	VMMACH_MIPS_3K_TLB_PHYS_PAGE_SHIFT
    486  1.5  jonathan #define VMMACH_TLB_PF_NUM		VMMACH_MIPS_3K_TLB_PF_NUM
    487  1.5  jonathan #define VMMACH_TLB_NON_CACHEABLE_BIT	VMMACH_MIPS_3K_TLB_NON_CACHEABLE_BIT
    488  1.5  jonathan #define VMMACH_TLB_MOD_BIT		VMMACH_MIPS_3K_TLB_MOD_BIT
    489  1.5  jonathan #define VMMACH_TLB_VALID_BIT		VMMACH_MIPS_3K_TLB_VALID_BIT
    490  1.5  jonathan #define VMMACH_TLB_GLOBAL_BIT		VMMACH_MIPS_3K_TLB_GLOBAL_BIT
    491  1.5  jonathan #endif /* pmax */
    492  1.5  jonathan 
    493  1.5  jonathan #ifdef pica /*  XXX */
    494  1.5  jonathan #define VMMACH_TLB_PHYS_PAGE_SHIFT	VMMACH_MIPS_4K_TLB_PHYS_PAGE_SHIFT
    495  1.5  jonathan #define VMMACH_TLB_PF_NUM		VMMACH_MIPS_4K_TLB_PF_NUM
    496  1.5  jonathan #define VMMACH_TLB_ATTR_MASK		VMMACH_MIPS_4K_TLB_ATTR_MASK
    497  1.5  jonathan #define VMMACH_TLB_MOD_BIT		VMMACH_MIPS_4K_TLB_MOD_BIT
    498  1.5  jonathan #define VMMACH_TLB_VALID_BIT		VMMACH_MIPS_4K_TLB_VALID_BIT
    499  1.5  jonathan #define VMMACH_TLB_GLOBAL_BIT		VMMACH_MIPS_4K_TLB_GLOBAL_BIT
    500  1.5  jonathan #endif	/* pica */
    501  1.5  jonathan 
    502  1.1   deraadt 
    503  1.1   deraadt 
    504  1.1   deraadt /*
    505  1.1   deraadt  * The high part of the TLB entry.
    506  1.1   deraadt  */
    507  1.5  jonathan #define VMMACH_TLB_VIRT_PAGE_SHIFT		12
    508  1.5  jonathan 
    509  1.5  jonathan #define VMMACH_TLB_MIPS_3K_VIRT_PAGE_NUM	0xfffff000
    510  1.5  jonathan #define VMMACH_TLB_MIPS_3K_PID			0x00000fc0
    511  1.5  jonathan #define VMMACH_TLB_MIPS_3K_PID_SHIFT		6
    512  1.5  jonathan 
    513  1.5  jonathan #define VMMACH_TLB_MIPS_4K_VIRT_PAGE_NUM	0xffffe000
    514  1.5  jonathan #define VMMACH_TLB_MIPS_4K_PID			0x000000ff
    515  1.5  jonathan #define VMMACH_TLB_MIPS_4K_PID_SHIFT		0
    516  1.5  jonathan 
    517  1.5  jonathan /* XXX needs more thought */
    518  1.5  jonathan /*
    519  1.5  jonathan  * backwards XXX needs more thought, should support runtime decisions.
    520  1.5  jonathan  */
    521  1.5  jonathan 
    522  1.5  jonathan #ifdef pmax
    523  1.5  jonathan #define VMMACH_TLB_VIRT_PAGE_NUM	VMMACH_TLB_MIPS_3K_VIRT_PAGE_NUM
    524  1.5  jonathan #define VMMACH_TLB_PID			VMMACH_TLB_MIPS_3K_PID
    525  1.5  jonathan #define VMMACH_TLB_PID_SHIFT		VMMACH_TLB_MIPS_3K_PID_SHIFT
    526  1.5  jonathan #endif
    527  1.5  jonathan 
    528  1.5  jonathan #ifdef pica
    529  1.5  jonathan #define VMMACH_TLB_VIRT_PAGE_NUM	VMMACH_TLB_MIPS_4K_VIRT_PAGE_NUM
    530  1.5  jonathan #define VMMACH_TLB_PID			VMMACH_TLB_MIPS_4K_PID
    531  1.5  jonathan #define VMMACH_TLB_PID_SHIFT		VMMACH_TLB_MIPS_4K_PID_SHIFT
    532  1.5  jonathan #endif
    533  1.1   deraadt 
    534  1.1   deraadt /*
    535  1.5  jonathan  * r3000: shift count to put the index in the right spot.
    536  1.5  jonathan  * (zero on r4000?)
    537  1.1   deraadt  */
    538  1.1   deraadt #define VMMACH_TLB_INDEX_SHIFT		8
    539  1.1   deraadt 
    540  1.5  jonathan 
    541  1.1   deraadt /*
    542  1.1   deraadt  * The number of TLB entries and the first one that write random hits.
    543  1.1   deraadt  */
    544  1.5  jonathan #define VMMACH_MIPS_3K_NUM_TLB_ENTRIES	64
    545  1.5  jonathan #define VMMACH_MIPS_3K_FIRST_RAND_ENTRY	8
    546  1.5  jonathan 
    547  1.5  jonathan #define VMMACH_MIPS_4K_NUM_TLB_ENTRIES	48
    548  1.5  jonathan #define VMMACH_MIPS_4K_WIRED_ENTRIES	8
    549  1.5  jonathan 
    550  1.5  jonathan /* compatibility with existing locore -- XXX more thought */
    551  1.5  jonathan #ifdef pmax
    552  1.5  jonathan #define VMMACH_NUM_TLB_ENTRIES		VMMACH_MIPS_3K_NUM_TLB_ENTRIES
    553  1.5  jonathan #define VMMACH_FIRST_RAND_ENTRY 	VMMACH_MIPS_3K_FIRST_RAND_ENTRY
    554  1.5  jonathan #endif	/* pmax */
    555  1.5  jonathan 
    556  1.5  jonathan #ifdef pica
    557  1.5  jonathan #define VMMACH_NUM_TLB_ENTRIES		VMMACH_MIPS_4K_NUM_TLB_ENTRIES
    558  1.5  jonathan #define VMMACH_WIRED_ENTRIES	 	VMMACH_MIPS_4K_WIRED_ENTRIES
    559  1.5  jonathan #endif	/* pica */
    560  1.5  jonathan 
    561  1.1   deraadt 
    562  1.1   deraadt /*
    563  1.1   deraadt  * The number of process id entries.
    564  1.1   deraadt  */
    565  1.5  jonathan #define	VMMACH_MIPS_3K_NUM_PIDS			64
    566  1.5  jonathan #define	VMMACH_MIPS_4K_NUM_PIDS			256
    567  1.5  jonathan 
    568  1.5  jonathan #ifdef pmax
    569  1.5  jonathan #define	VMMACH_NUM_PIDS		VMMACH_MIPS_3K_NUM_PIDS
    570  1.5  jonathan #endif	/* pmax */
    571  1.5  jonathan #ifdef pica
    572  1.5  jonathan #define	VMMACH_NUM_PIDS		VMMACH_MIPS_4K_NUM_PIDS
    573  1.5  jonathan #endif	/* pica */
    574  1.5  jonathan 
    575  1.1   deraadt 
    576  1.1   deraadt /*
    577  1.1   deraadt  * TLB probe return codes.
    578  1.1   deraadt  */
    579  1.1   deraadt #define VMMACH_TLB_NOT_FOUND		0
    580  1.1   deraadt #define VMMACH_TLB_FOUND		1
    581  1.1   deraadt #define VMMACH_TLB_FOUND_WITH_PATCH	2
    582  1.1   deraadt #define VMMACH_TLB_PROBE_ERROR		3
    583  1.1   deraadt 
    584  1.1   deraadt #endif /* _MACHCONST */
    585