Home | History | Annotate | Line # | Download | only in include
cpuregs.h revision 1.12
      1  1.12  jonathan /*	$NetBSD: cpuregs.h,v 1.12 1997/06/22 03:17:40 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.1   deraadt /*
    105   1.1   deraadt  * The bits in the status register.  All bits are active when set to 1.
    106   1.1   deraadt  *
    107   1.5  jonathan  *	R3000 status register fields:
    108   1.1   deraadt  *	MACH_SR_CO_USABILITY	Control the usability of the four coprocessors.
    109   1.1   deraadt  *	MACH_SR_BOOT_EXC_VEC	Use alternate exception vectors.
    110   1.1   deraadt  *	MACH_SR_TLB_SHUTDOWN	TLB disabled.
    111   1.5  jonathan  *
    112   1.5  jonathan  *	MIPS_SR_INT_IE		Master (current) interrupt enable bit.
    113   1.5  jonathan  *
    114   1.5  jonathan  * Differences:
    115   1.5  jonathan  *	r3k has cache control is via frobbing SR register bits, whereas the
    116   1.5  jonathan  *	r4k cache control is via explicit instructions.
    117   1.5  jonathan  *	r3k has a 3-entry stack of kernel/user bits, whereas the
    118   1.5  jonathan  *	r4k has kernel/supervisor/user.
    119   1.5  jonathan  */
    120   1.5  jonathan #define MACH_SR_COP_USABILITY	0xf0000000
    121   1.5  jonathan #define MACH_SR_COP_0_BIT	0x10000000
    122   1.5  jonathan #define MACH_SR_COP_1_BIT	0x20000000
    123   1.5  jonathan 
    124   1.5  jonathan 	/* r4k and r3k differences, see below */
    125   1.5  jonathan 
    126   1.5  jonathan #define MACH_SR_BOOT_EXC_VEC	0x00400000
    127   1.5  jonathan #define MACH_SR_TLB_SHUTDOWN	0x00200000
    128   1.5  jonathan 
    129   1.5  jonathan 	/* r4k and r3k differences, see below */
    130   1.5  jonathan 
    131   1.5  jonathan #define MIPS_SR_INT_IE		0x00000001
    132   1.5  jonathan /*#define MACH_SR_MBZ		0x0f8000c0*/	/* Never used, true for r3k */
    133   1.5  jonathan /*#define MACH_SR_INT_MASK	0x0000ff00*/
    134   1.5  jonathan 
    135   1.5  jonathan #define MACH_SR_INT_ENAB	MIPS_SR_INT_IE	/* backwards compatibility */
    136   1.5  jonathan #define MACH_SR_INT_ENA_CUR	MIPS_SR_INT_IE	/* backwards compatibility */
    137   1.5  jonathan 
    138   1.5  jonathan 
    139   1.5  jonathan 
    140   1.5  jonathan /*
    141   1.5  jonathan  * The R2000/R3000-specific status register bit definitions.
    142   1.5  jonathan  * all bits are active when set to 1.
    143   1.5  jonathan  *
    144   1.1   deraadt  *	MACH_SR_PARITY_ERR	Parity error.
    145   1.1   deraadt  *	MACH_SR_CACHE_MISS	Most recent D-cache load resulted in a miss.
    146   1.1   deraadt  *	MACH_SR_PARITY_ZERO	Zero replaces outgoing parity bits.
    147   1.1   deraadt  *	MACH_SR_SWAP_CACHES	Swap I-cache and D-cache.
    148   1.1   deraadt  *	MACH_SR_ISOL_CACHES	Isolate D-cache from main memory.
    149   1.1   deraadt  *				Interrupt enable bits defined below.
    150   1.1   deraadt  *	MACH_SR_KU_OLD		Old kernel/user mode bit. 1 => user mode.
    151   1.1   deraadt  *	MACH_SR_INT_ENA_OLD	Old interrupt enable bit.
    152   1.1   deraadt  *	MACH_SR_KU_PREV		Previous kernel/user mode bit. 1 => user mode.
    153   1.1   deraadt  *	MACH_SR_INT_ENA_PREV	Previous interrupt enable bit.
    154   1.1   deraadt  *	MACH_SR_KU_CUR		Current kernel/user mode bit. 1 => user mode.
    155   1.1   deraadt  */
    156   1.5  jonathan 
    157  1.11  jonathan #define MIPS1_PARITY_ERR	0x00100000
    158  1.11  jonathan #define MIPS1_CACHE_MISS	0x00080000
    159  1.11  jonathan #define MIPS1_PARITY_ZERO	0x00040000
    160  1.11  jonathan #define MIPS1_SWAP_CACHES	0x00020000
    161  1.11  jonathan #define MIPS1_ISOL_CACHES	0x00010000
    162   1.5  jonathan 
    163  1.11  jonathan #define MIPS1_SR_KU_OLD		0x00000020	/* 2nd stacked KU/IE*/
    164  1.11  jonathan #define MIPS1_SR_INT_ENA_OLD	0x00000010	/* 2nd stacked KU/IE*/
    165   1.9  jonathan #define MIPS1_SR_KU_PREV	0x00000008	/* 1st stacked KU/IE*/
    166   1.9  jonathan #define MIPS1_SR_INT_ENA_PREV	0x00000004	/* 1st stacked KU/IE*/
    167  1.11  jonathan #define MIPS1_SR_KU_CUR		0x00000002	/* current KU */
    168   1.5  jonathan 
    169   1.5  jonathan /* backwards compatibility */
    170  1.11  jonathan #define MACH_SR_PARITY_ERR	MIPS1_PARITY_ERR
    171  1.11  jonathan #define MACH_SR_CACHE_MISS	MIPS1_CACHE_MISS
    172  1.11  jonathan #define MACH_SR_PARITY_ZERO	MIPS1_PARITY_ZERO
    173  1.11  jonathan #define MACH_SR_SWAP_CACHES	MIPS1_SWAP_CACHES
    174  1.11  jonathan #define MACH_SR_ISOL_CACHES	MIPS1_ISOL_CACHES
    175   1.5  jonathan 
    176  1.11  jonathan #define MACH_SR_KU_OLD		MIPS1_SR_KU_OLD
    177  1.11  jonathan #define MACH_SR_INT_ENA_OLD	MIPS1_SR_INT_ENA_OLD
    178   1.9  jonathan #define MACH_SR_KU_PREV		MIPS1_SR_KU_PREV
    179  1.11  jonathan #define MACH_SR_KU_CUR		MIPS1_SR_KU_CUR
    180   1.9  jonathan #define MACH_SR_INT_ENA_PREV	MIPS1_SR_INT_ENA_PREV
    181   1.5  jonathan 
    182   1.5  jonathan /*
    183   1.5  jonathan  * R4000 status register bit definitons,
    184   1.5  jonathan  * where different from r2000/r3000.
    185   1.5  jonathan  */
    186  1.11  jonathan #define MIPS3_SR_RP		0x08000000
    187  1.11  jonathan #define MIPS3_SR_FR_32		0x04000000
    188  1.11  jonathan #define MIPS3_SR_RE		0x02000000
    189  1.11  jonathan 
    190  1.11  jonathan #define MIPS3_SR_SOFT_RESET	0x00100000
    191  1.11  jonathan #define MIPS3_SR_DIAG_CH	0x00040000
    192  1.11  jonathan #define MIPS3_SR_DIAG_CE	0x00020000
    193  1.11  jonathan #define MIPS3_SR_DIAG_PE	0x00010000
    194  1.11  jonathan #define MIPS3_SR_KX		0x00000080
    195  1.11  jonathan #define MIPS3_SR_SX		0x00000040
    196  1.11  jonathan #define MIPS3_SR_UX		0x00000020
    197  1.11  jonathan #define MIPS3_SR_KSU_MASK	0x00000018
    198   1.9  jonathan #define MIPS3_SR_KSU_USER	0x00000010
    199  1.11  jonathan #define MIPS3_SR_KSU_SUPER	0x00000008
    200  1.11  jonathan #define MIPS3_SR_KSU_KERNEL	0x00000000
    201  1.11  jonathan #define MIPS3_SR_ERL		0x00000004
    202  1.11  jonathan #define MIPS3_SR_EXL		0x00000002
    203   1.5  jonathan 
    204   1.5  jonathan /* backwards compatibility with names used in Pica port */
    205  1.11  jonathan #define MACH_SR_RP		MIPS3_SR_RP
    206  1.11  jonathan #define MACH_SR_FR_32		MIPS3_SR_FR_32
    207  1.11  jonathan #define MACH_SR_RE		MIPS3_SR_RE
    208  1.11  jonathan 
    209  1.11  jonathan #define MACH_SR_SOFT_RESET	MIPS3_SR_SOFT_RESET
    210  1.11  jonathan #define MACH_SR_DIAG_CH		MIPS3_SR_DIAG_CH
    211  1.11  jonathan #define MACH_SR_DIAG_CE		MIPS3_SR_DIAG_CE
    212  1.11  jonathan #define MACH_SR_DIAG_PE		MIPS3_SR_DIAG_PE
    213  1.11  jonathan #define MACH_SR_KX		MIPS3_SR_KX
    214  1.11  jonathan #define MACH_SR_SX		MIPS3_SR_SX
    215  1.11  jonathan #define MACH_SR_UX		MIPS3_SR_UX
    216   1.5  jonathan 
    217  1.11  jonathan #define MACH_SR_KSU_MASK	MIPS3_SR_KSU_MASK
    218   1.9  jonathan #define MACH_SR_KSU_USER	MIPS3_SR_KSU_USER
    219  1.11  jonathan #define MACH_SR_KSU_SUPER	MIPS3_SR_KSU_SUPER
    220  1.11  jonathan #define MACH_SR_KSU_KERNEL	MIPS3_SR_KSU_KERNEL
    221  1.11  jonathan #define MACH_SR_ERL		MIPS3_SR_ERL
    222  1.11  jonathan #define MACH_SR_EXL		MIPS3_SR_EXL
    223   1.5  jonathan 
    224   1.1   deraadt 
    225   1.1   deraadt /*
    226   1.1   deraadt  * The interrupt masks.
    227   1.1   deraadt  * If a bit in the mask is 1 then the interrupt is enabled (or pending).
    228   1.1   deraadt  */
    229   1.5  jonathan #define MIPS_INT_MASK		0xff00
    230   1.1   deraadt #define MACH_INT_MASK_5		0x8000
    231   1.1   deraadt #define MACH_INT_MASK_4		0x4000
    232   1.1   deraadt #define MACH_INT_MASK_3		0x2000
    233   1.1   deraadt #define MACH_INT_MASK_2		0x1000
    234   1.1   deraadt #define MACH_INT_MASK_1		0x0800
    235   1.1   deraadt #define MACH_INT_MASK_0		0x0400
    236   1.5  jonathan #define MIPS_HARD_INT_MASK	0xfc00
    237   1.1   deraadt #define MACH_SOFT_INT_MASK_1	0x0200
    238   1.1   deraadt #define MACH_SOFT_INT_MASK_0	0x0100
    239   1.6  jonathan 
    240   1.8    mhitch 
    241   1.6  jonathan /*
    242   1.6  jonathan  * nesting interrupt masks.
    243   1.6  jonathan  */
    244   1.6  jonathan #define MACH_INT_MASK_SPL_SOFT0	MACH_SOFT_INT_MASK_0
    245   1.7  jonathan #define MACH_INT_MASK_SPL_SOFT1	(MACH_SOFT_INT_MASK_1|MACH_INT_MASK_SPL_SOFT0)
    246   1.6  jonathan #define MACH_INT_MASK_SPL0	(MACH_INT_MASK_0|MACH_INT_MASK_SPL_SOFT1)
    247   1.6  jonathan #define MACH_INT_MASK_SPL1	(MACH_INT_MASK_1|MACH_INT_MASK_SPL0)
    248   1.6  jonathan #define MACH_INT_MASK_SPL2	(MACH_INT_MASK_2|MACH_INT_MASK_SPL1)
    249   1.6  jonathan #define MACH_INT_MASK_SPL3	(MACH_INT_MASK_3|MACH_INT_MASK_SPL2)
    250   1.6  jonathan #define MACH_INT_MASK_SPL4	(MACH_INT_MASK_4|MACH_INT_MASK_SPL3)
    251   1.6  jonathan #define MACH_INT_MASK_SPL5	(MACH_INT_MASK_5|MACH_INT_MASK_SPL4)
    252   1.6  jonathan 
    253  1.11  jonathan /*
    254  1.11  jonathan  * mips3 CPUs have on-chip timer at INT_MASK_5. We don't support it yet.
    255  1.11  jonathan  */
    256  1.11  jonathan #define MIPS3_INT_MASK			(MIPS_INT_MASK &  ~MACH_INT_MASK_5)
    257  1.11  jonathan #define MIPS3_HARD_INT_MASK		(MIPS_HARD_INT_MASK & ~MACH_INT_MASK_5)
    258   1.1   deraadt 
    259   1.5  jonathan 
    260   1.1   deraadt /*
    261   1.1   deraadt  * The bits in the context register.
    262   1.1   deraadt  */
    263  1.11  jonathan #define MIPS1_CNTXT_PTE_BASE	0xFFE00000
    264  1.11  jonathan #define MIPS1_CNTXT_BAD_VPN	0x001FFFFC
    265   1.5  jonathan 
    266  1.11  jonathan #define MIPS3_CNTXT_PTE_BASE	0xFF800000
    267  1.11  jonathan #define MIPS3_CNTXT_BAD_VPN2	0x007FFFF0
    268   1.1   deraadt 
    269   1.1   deraadt /*
    270   1.1   deraadt  * Location of exception vectors.
    271   1.5  jonathan  *
    272   1.5  jonathan  * Common vectors:  reset and UTLB miss.
    273   1.1   deraadt  */
    274   1.1   deraadt #define MACH_RESET_EXC_VEC	0xBFC00000
    275   1.1   deraadt #define MACH_UTLB_MISS_EXC_VEC	0x80000000
    276   1.5  jonathan 
    277   1.5  jonathan /*
    278   1.5  jonathan  * R3000 general exception vector (everything else)
    279   1.5  jonathan  */
    280   1.9  jonathan #define MIPS1_GEN_EXC_VEC	0x80000080
    281   1.5  jonathan 
    282   1.5  jonathan /*
    283   1.5  jonathan  * R4000 MIPS-III exception vectors
    284   1.5  jonathan  */
    285  1.11  jonathan #define MIPS3_XTLB_MISS_EXC_VEC	0x80000080
    286  1.11  jonathan #define MIPS3_CACHE_ERR_EXC_VEC	0x80000100
    287  1.11  jonathan #define MIPS3_GEN_EXC_VEC	0x80000180
    288   1.5  jonathan 
    289   1.5  jonathan /*
    290   1.1   deraadt  * Coprocessor 0 registers:
    291   1.1   deraadt  *
    292   1.1   deraadt  *	MACH_COP_0_TLB_INDEX	TLB index.
    293   1.1   deraadt  *	MACH_COP_0_TLB_RANDOM	TLB random.
    294   1.5  jonathan  *	MACH_COP_0_TLB_LOW	r3k TLB entry low.
    295   1.5  jonathan  *	MACH_COP_0_TLB_LO0	r4k TLB entry low.
    296   1.5  jonathan  *	MACH_COP_0_TLB_LO1	r4k TLB entry low, extended.
    297   1.1   deraadt  *	MACH_COP_0_TLB_CONTEXT	TLB context.
    298   1.1   deraadt  *	MACH_COP_0_BAD_VADDR	Bad virtual address.
    299   1.1   deraadt  *	MACH_COP_0_TLB_HI	TLB entry high.
    300   1.1   deraadt  *	MACH_COP_0_STATUS_REG	Status register.
    301   1.1   deraadt  *	MACH_COP_0_CAUSE_REG	Exception cause register.
    302   1.1   deraadt  *	MACH_COP_0_EXC_PC	Exception PC.
    303   1.1   deraadt  *	MACH_COP_0_PRID		Processor revision identifier.
    304   1.1   deraadt  */
    305   1.1   deraadt #define MACH_COP_0_TLB_INDEX	$0
    306   1.1   deraadt #define MACH_COP_0_TLB_RANDOM	$1
    307   1.5  jonathan 	/* Name and meaning of  TLB bits for $2 differ on r3k and r4k. */
    308   1.5  jonathan 
    309   1.1   deraadt #define MACH_COP_0_TLB_CONTEXT	$4
    310   1.5  jonathan 					/* $5 and $6 new with MIPS-III */
    311   1.1   deraadt #define MACH_COP_0_BAD_VADDR	$8
    312   1.1   deraadt #define MACH_COP_0_TLB_HI	$10
    313   1.1   deraadt #define MACH_COP_0_STATUS_REG	$12
    314   1.1   deraadt #define MACH_COP_0_CAUSE_REG	$13
    315   1.1   deraadt #define MACH_COP_0_EXC_PC	$14
    316   1.1   deraadt #define MACH_COP_0_PRID		$15
    317   1.1   deraadt 
    318   1.5  jonathan 
    319   1.5  jonathan /* r3k-specific */
    320   1.5  jonathan #define MACH_COP_0_TLB_LOW	$2
    321   1.5  jonathan 
    322   1.5  jonathan /* MIPS-III additions */
    323   1.5  jonathan #define MACH_COP_0_TLB_LO0	$2
    324   1.5  jonathan #define MACH_COP_0_TLB_LO1	$3
    325   1.5  jonathan 
    326   1.5  jonathan #define MACH_COP_0_TLB_PG_MASK	$5
    327   1.5  jonathan #define MACH_COP_0_TLB_WIRED	$6
    328   1.5  jonathan 
    329   1.5  jonathan #define MACH_COP_0_CONFIG	$16
    330   1.5  jonathan #define MACH_COP_0_LLADDR	$17
    331   1.5  jonathan #define MACH_COP_0_WATCH_LO	$18
    332   1.5  jonathan #define MACH_COP_0_WATCH_HI	$19
    333   1.5  jonathan #define MACH_COP_0_TLB_XCONTEXT	$20
    334   1.5  jonathan #define MACH_COP_0_ECC		$26
    335   1.5  jonathan #define MACH_COP_0_CACHE_ERR	$27
    336   1.5  jonathan #define MACH_COP_0_TAG_LO	$28
    337   1.5  jonathan #define MACH_COP_0_TAG_HI	$29
    338   1.5  jonathan #define MACH_COP_0_ERROR_PC	$30
    339   1.5  jonathan 
    340   1.5  jonathan 
    341   1.5  jonathan 
    342   1.1   deraadt /*
    343   1.1   deraadt  * Values for the code field in a break instruction.
    344   1.1   deraadt  */
    345   1.1   deraadt #define MACH_BREAK_INSTR	0x0000000d
    346   1.1   deraadt #define MACH_BREAK_VAL_MASK	0x03ff0000
    347   1.1   deraadt #define MACH_BREAK_VAL_SHIFT	16
    348   1.1   deraadt #define MACH_BREAK_KDB_VAL	512
    349   1.1   deraadt #define MACH_BREAK_SSTEP_VAL	513
    350   1.1   deraadt #define MACH_BREAK_BRKPT_VAL	514
    351   1.5  jonathan #define MACH_BREAK_SOVER_VAL	515
    352   1.1   deraadt #define MACH_BREAK_KDB		(MACH_BREAK_INSTR | \
    353   1.1   deraadt 				(MACH_BREAK_KDB_VAL << MACH_BREAK_VAL_SHIFT))
    354   1.1   deraadt #define MACH_BREAK_SSTEP	(MACH_BREAK_INSTR | \
    355   1.1   deraadt 				(MACH_BREAK_SSTEP_VAL << MACH_BREAK_VAL_SHIFT))
    356   1.1   deraadt #define MACH_BREAK_BRKPT	(MACH_BREAK_INSTR | \
    357   1.1   deraadt 				(MACH_BREAK_BRKPT_VAL << MACH_BREAK_VAL_SHIFT))
    358   1.5  jonathan #define MACH_BREAK_SOVER	(MACH_BREAK_INSTR | \
    359   1.5  jonathan 				(MACH_BREAK_SOVER_VAL << MACH_BREAK_VAL_SHIFT))
    360   1.1   deraadt 
    361   1.1   deraadt /*
    362   1.1   deraadt  * Mininum and maximum cache sizes.
    363   1.1   deraadt  */
    364   1.1   deraadt #define MACH_MIN_CACHE_SIZE	(16 * 1024)
    365   1.1   deraadt #define MACH_MAX_CACHE_SIZE	(256 * 1024)
    366   1.1   deraadt 
    367   1.1   deraadt /*
    368   1.1   deraadt  * The floating point version and status registers.
    369   1.1   deraadt  */
    370   1.1   deraadt #define	MACH_FPC_ID	$0
    371   1.1   deraadt #define	MACH_FPC_CSR	$31
    372   1.1   deraadt 
    373   1.1   deraadt /*
    374   1.1   deraadt  * The floating point coprocessor status register bits.
    375   1.1   deraadt  */
    376   1.1   deraadt #define MACH_FPC_ROUNDING_BITS		0x00000003
    377   1.1   deraadt #define MACH_FPC_ROUND_RN		0x00000000
    378   1.1   deraadt #define MACH_FPC_ROUND_RZ		0x00000001
    379   1.1   deraadt #define MACH_FPC_ROUND_RP		0x00000002
    380   1.1   deraadt #define MACH_FPC_ROUND_RM		0x00000003
    381   1.1   deraadt #define MACH_FPC_STICKY_BITS		0x0000007c
    382   1.1   deraadt #define MACH_FPC_STICKY_INEXACT		0x00000004
    383   1.1   deraadt #define MACH_FPC_STICKY_UNDERFLOW	0x00000008
    384   1.1   deraadt #define MACH_FPC_STICKY_OVERFLOW	0x00000010
    385   1.1   deraadt #define MACH_FPC_STICKY_DIV0		0x00000020
    386   1.1   deraadt #define MACH_FPC_STICKY_INVALID		0x00000040
    387   1.1   deraadt #define MACH_FPC_ENABLE_BITS		0x00000f80
    388   1.1   deraadt #define MACH_FPC_ENABLE_INEXACT		0x00000080
    389   1.1   deraadt #define MACH_FPC_ENABLE_UNDERFLOW	0x00000100
    390   1.1   deraadt #define MACH_FPC_ENABLE_OVERFLOW	0x00000200
    391   1.1   deraadt #define MACH_FPC_ENABLE_DIV0		0x00000400
    392   1.1   deraadt #define MACH_FPC_ENABLE_INVALID		0x00000800
    393   1.1   deraadt #define MACH_FPC_EXCEPTION_BITS		0x0003f000
    394   1.1   deraadt #define MACH_FPC_EXCEPTION_INEXACT	0x00001000
    395   1.1   deraadt #define MACH_FPC_EXCEPTION_UNDERFLOW	0x00002000
    396   1.1   deraadt #define MACH_FPC_EXCEPTION_OVERFLOW	0x00004000
    397   1.1   deraadt #define MACH_FPC_EXCEPTION_DIV0		0x00008000
    398   1.1   deraadt #define MACH_FPC_EXCEPTION_INVALID	0x00010000
    399   1.1   deraadt #define MACH_FPC_EXCEPTION_UNIMPL	0x00020000
    400   1.1   deraadt #define MACH_FPC_COND_BIT		0x00800000
    401   1.5  jonathan #define MACH_FPC_FLUSH_BIT		0x01000000	/* r4k,  MBZ on r3k */
    402  1.11  jonathan #define MIPS1_FPC_MBZ_BITS		0xff7c0000
    403  1.11  jonathan #define MIPS3_FPC_MBZ_BITS		0xfe7c0000
    404   1.5  jonathan 
    405   1.1   deraadt 
    406   1.1   deraadt /*
    407   1.1   deraadt  * Constants to determine if have a floating point instruction.
    408   1.1   deraadt  */
    409   1.1   deraadt #define MACH_OPCODE_SHIFT	26
    410   1.1   deraadt #define MACH_OPCODE_C1		0x11
    411   1.1   deraadt 
    412   1.5  jonathan 
    413   1.5  jonathan 
    414   1.1   deraadt /*
    415   1.1   deraadt  * The low part of the TLB entry.
    416   1.1   deraadt  */
    417  1.11  jonathan #define MIPS1_TLB_PHYS_PAGE_SHIFT	12
    418  1.11  jonathan #define MIPS1_TLB_PF_NUM		0xfffff000
    419  1.11  jonathan #define MIPS1_TLB_NON_CACHEABLE_BIT	0x00000800
    420  1.11  jonathan #define MIPS1_TLB_MOD_BIT		0x00000400
    421  1.11  jonathan #define MIPS1_TLB_VALID_BIT		0x00000200
    422  1.11  jonathan #define MIPS1_TLB_GLOBAL_BIT		0x00000100
    423  1.11  jonathan 
    424  1.11  jonathan #define MIPS3_TLB_PHYS_PAGE_SHIFT	6
    425  1.11  jonathan #define MIPS3_TLB_PF_NUM		0x3fffffc0
    426  1.11  jonathan #define MIPS3_TLB_ATTR_MASK		0x00000038
    427  1.11  jonathan #define MIPS3_TLB_MOD_BIT		0x00000004
    428  1.11  jonathan #define MIPS3_TLB_VALID_BIT		0x00000002
    429  1.11  jonathan #define MIPS3_TLB_GLOBAL_BIT		0x00000001
    430   1.5  jonathan 
    431   1.1   deraadt 
    432   1.1   deraadt /*
    433   1.1   deraadt  * The high part of the TLB entry.
    434   1.1   deraadt  */
    435  1.12  jonathan #define MIPS_TLB_VIRT_PAGE_SHIFT	12
    436   1.5  jonathan 
    437  1.11  jonathan #define MIPS1_TLB_VIRT_PAGE_NUM		0xfffff000
    438  1.11  jonathan #define MIPS1_TLB_PID			0x00000fc0
    439  1.11  jonathan #define MIPS1_TLB_PID_SHIFT		6
    440  1.11  jonathan 
    441  1.11  jonathan #define MIPS3_TLB_VIRT_PAGE_NUM		0xffffe000
    442  1.11  jonathan #define MIPS3_TLB_PID			0x000000ff
    443  1.11  jonathan #define MIPS3_TLB_PID_SHIFT		0
    444   1.5  jonathan 
    445   1.5  jonathan 
    446   1.1   deraadt /*
    447   1.5  jonathan  * r3000: shift count to put the index in the right spot.
    448   1.5  jonathan  * (zero on r4000?)
    449   1.1   deraadt  */
    450  1.11  jonathan #define MIPS1_TLB_INDEX_SHIFT		8
    451   1.1   deraadt 
    452   1.5  jonathan 
    453   1.1   deraadt /*
    454   1.1   deraadt  * The number of TLB entries and the first one that write random hits.
    455   1.1   deraadt  */
    456  1.11  jonathan #define MIPS1_TLB_NUM_TLB_ENTRIES	64
    457  1.11  jonathan #define MIPS1_TLB_FIRST_RAND_ENTRY	8
    458   1.5  jonathan 
    459  1.11  jonathan #define MIPS3_TLB_NUM_TLB_ENTRIES	48
    460  1.11  jonathan #define MIPS3_TLB_WIRED_ENTRIES		8
    461   1.5  jonathan 
    462   1.1   deraadt 
    463   1.1   deraadt /*
    464   1.1   deraadt  * The number of process id entries.
    465   1.1   deraadt  */
    466  1.11  jonathan #define	MIPS1_TLB_NUM_PIDS		64
    467  1.11  jonathan #define	MIPS3_TLB_NUM_PIDS		256
    468  1.11  jonathan 
    469  1.11  jonathan /*
    470  1.11  jonathan  * backwards compatibility with existing locore and compile-time
    471  1.11  jonathan  * mips1/mips3 binding.
    472  1.12  jonathan  *
    473  1.12  jonathan  * XXX INT_MASK and HARD_INT_MASK are here only because we dont
    474  1.12  jonathan  * support the mips3 on-chip timer which is tied to INT_5.
    475  1.11  jonathan  */
    476   1.5  jonathan 
    477  1.12  jonathan #if defined(MIPS3) && !defined(MIPS1)
    478  1.11  jonathan #define MACH_INT_MASK			MIPS3_INT_MASK
    479  1.11  jonathan #define MACH_HARD_INT_MASK		MIPS3_HARD_INT_MASK
    480  1.12  jonathan #define MIPS_TLB_PID_SHIFT		MIPS3_TLB_PID_SHIFT
    481  1.12  jonathan #define	MIPS_TLB_NUM_PIDS		MIPS3_TLB_NUM_PIDS
    482  1.12  jonathan #endif
    483  1.11  jonathan 
    484  1.12  jonathan #if !defined(MIPS3) && defined(MIPS1)
    485  1.11  jonathan #define MACH_INT_MASK			MIPS_INT_MASK
    486  1.11  jonathan #define MACH_HARD_INT_MASK		MIPS_HARD_INT_MASK
    487  1.12  jonathan #define MIPS_TLB_PID_SHIFT		MIPS1_TLB_PID_SHIFT
    488  1.12  jonathan #define	MIPS_TLB_NUM_PIDS		MIPS1_TLB_NUM_PIDS
    489  1.12  jonathan #endif
    490  1.12  jonathan 
    491  1.12  jonathan 
    492  1.12  jonathan #if defined(MIPS1) && defined(MIPS3)
    493  1.12  jonathan #define MACH_INT_MASK			MIPS_INT_MASK		/* XXX */
    494  1.12  jonathan #define MACH_HARD_INT_MASK		MIPS_HARD_INT_MASK	/* XXX */
    495  1.12  jonathan #define MIPS_TLB_PID_SHIFT \
    496  1.12  jonathan     ((CPUISMIPS3)? MIPS3_TLB_PID_SHIFT : MIPS1_TLB_PID_SHIFT)
    497  1.12  jonathan 
    498  1.12  jonathan #define MIPS_TLB_NUM_PIDS \
    499  1.12  jonathan     ((CPUISMIPS3)? MIPS3_TLB_NUM_PIDS : MIPS1_TLB_NUM_PIDS)
    500  1.12  jonathan 
    501   1.8    mhitch #endif
    502   1.1   deraadt 
    503   1.1   deraadt /*
    504   1.1   deraadt  * TLB probe return codes.
    505   1.1   deraadt  */
    506  1.12  jonathan #define MIPS_TLB_NOT_FOUND		0
    507  1.12  jonathan #define MIPS_TLB_FOUND		1
    508  1.12  jonathan #define MIPS_TLB_FOUND_WITH_PATCH	2
    509  1.12  jonathan #define MIPS_TLB_PROBE_ERROR		3
    510   1.1   deraadt 
    511  1.10  jonathan #endif /* _MIPS_CPUREGS_H_ */
    512