xref: /csrg-svn/sys/pmax/include/machConst.h (revision 52746)
152131Smckusick /*
252131Smckusick  * Copyright (c) 1992 Regents of the University of California.
352131Smckusick  * All rights reserved.
452131Smckusick  *
552131Smckusick  * This code is derived from software contributed to Berkeley by
652131Smckusick  * Ralph Campbell.
752131Smckusick  *
852131Smckusick  * %sccs.include.redist.c%
952131Smckusick  *
10*52746Sralph  *	@(#)machConst.h	7.2 (Berkeley) 02/29/92
1152131Smckusick  *
1252131Smckusick  * machConst.h --
1352131Smckusick  *
1452131Smckusick  *	Machine dependent constants.
1552131Smckusick  *
1652131Smckusick  *	Copyright (C) 1989 Digital Equipment Corporation.
1752131Smckusick  *	Permission to use, copy, modify, and distribute this software and
1852131Smckusick  *	its documentation for any purpose and without fee is hereby granted,
1952131Smckusick  *	provided that the above copyright notice appears in all copies.
2052131Smckusick  *	Digital Equipment Corporation makes no representations about the
2152131Smckusick  *	suitability of this software for any purpose.  It is provided "as is"
2252131Smckusick  *	without express or implied warranty.
2352131Smckusick  *
2452131Smckusick  * from: $Header: /sprite/src/kernel/mach/ds3100.md/RCS/machConst.h,
2552131Smckusick  *	v 9.2 89/10/21 15:55:22 jhh Exp $ SPRITE (DECWRL)
2652131Smckusick  * from: $Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAddrs.h,
2752131Smckusick  *	v 1.2 89/08/15 18:28:21 rab Exp $ SPRITE (DECWRL)
2852131Smckusick  * from: $Header: /sprite/src/kernel/vm/ds3100.md/RCS/vmPmaxConst.h,
2952131Smckusick  *	v 9.1 89/09/18 17:33:00 shirriff Exp $ SPRITE (DECWRL)
3052131Smckusick  */
3152131Smckusick 
3252131Smckusick #ifndef _MACHCONST
3352131Smckusick #define _MACHCONST
3452131Smckusick 
3552131Smckusick #define MACH_KUSEG_ADDR			0x0
3652131Smckusick #define MACH_CACHED_MEMORY_ADDR		0x80000000
37*52746Sralph #define MACH_UNCACHED_MEMORY_ADDR	0xa0000000
38*52746Sralph #define MACH_KSEG2_ADDR			0xc0000000
39*52746Sralph 
40*52746Sralph #define	MACH_CACHED_TO_PHYS(x)	((unsigned)(x) & 0x1fffffff)
41*52746Sralph #define	MACH_PHYS_TO_CACHED(x)	((unsigned)(x) | MACH_CACHED_MEMORY_ADDR)
42*52746Sralph #define	MACH_UNCACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff)
43*52746Sralph #define	MACH_PHYS_TO_UNCACHED(x) ((unsigned)(x) | MACH_UNCACHED_MEMORY_ADDR)
44*52746Sralph 
45*52746Sralph #ifdef DS3100
46*52746Sralph #define MACH_MAX_MEM_ADDR		0xa1800000
4752131Smckusick #define MACH_CACHED_FRAME_BUFFER_ADDR	0x8fc00000
4852131Smckusick #define MACH_UNCACHED_FRAME_BUFFER_ADDR	0xafc00000
4952131Smckusick #define MACH_PLANE_MASK_ADDR		0xb0000000
5052131Smckusick #define MACH_CURSOR_REG_ADDR		0xb1000000
5152131Smckusick #define MACH_COLOR_MAP_ADDR		0xb2000000
5252131Smckusick #define MACH_RESERVED_ADDR		0xb3000000
5352131Smckusick #define MACH_WRITE_ERROR_ADDR		0xb7000000
5452131Smckusick #define MACH_NETWORK_INTERFACE_ADDR	0xb8000000
5552131Smckusick #define MACH_NETWORK_BUFFER_ADDR	0xb9000000
5652131Smckusick #define MACH_SCSI_INTERFACE_ADDR	0xba000000
5752131Smckusick #define MACH_SCSI_BUFFER_ADDR		0xbb000000
5852131Smckusick #define MACH_SERIAL_INTERFACE_ADDR	0xbc000000
5952131Smckusick #define MACH_CLOCK_ADDR			0xbd000000
6052131Smckusick #define MACH_SYS_CSR_ADDR		0xbe000000
61*52746Sralph #endif
6252131Smckusick 
63*52746Sralph #ifdef DS5000
64*52746Sralph #define MACH_MAX_MEM_ADDR		0xbe000000
65*52746Sralph #define MACH_RESERVED_ADDR		0xbfc80000
66*52746Sralph #define MACH_CHKSYN_ADDR		0xbfd00000
67*52746Sralph #define MACH_ERROR_ADDR			0xbfd80000
68*52746Sralph #define MACH_SERIAL_INTERFACE_ADDR	0xbfe00000
69*52746Sralph #define MACH_CLOCK_ADDR			0xbfe80000
70*52746Sralph #define MACH_SYS_CSR_ADDR		0xbff00000
71*52746Sralph #endif
72*52746Sralph 
7352131Smckusick #define MACH_CODE_START			0x80030000
7452131Smckusick 
7552131Smckusick /*
7652131Smckusick  * The bits in the cause register.
7752131Smckusick  *
7852131Smckusick  *	MACH_CR_BR_DELAY	Exception happened in branch delay slot.
7952131Smckusick  *	MACH_CR_COP_ERR		Coprocessor error.
8052131Smckusick  *				Interrupt pending bits defined below.
8152131Smckusick  *	MACH_CR_EXC_CODE	The exception type (see exception codes below).
8252131Smckusick  */
8352131Smckusick #define MACH_CR_BR_DELAY	0x80000000
8452131Smckusick #define MACH_CR_COP_ERR		0x30000000
8552131Smckusick #define MACH_CR_EXC_CODE	0x0000003C
8652131Smckusick #define MACH_CR_EXC_CODE_SHIFT	2
8752131Smckusick 
8852131Smckusick /*
8952131Smckusick  * The bits in the status register.  All bits are active when set to 1.
9052131Smckusick  *
9152131Smckusick  *	MACH_SR_CO_USABILITY	Control the usability of the four coprocessors.
9252131Smckusick  *	MACH_SR_BOOT_EXC_VEC	Use alternate exception vectors.
9352131Smckusick  *	MACH_SR_TLB_SHUTDOWN	TLB disabled.
9452131Smckusick  *	MACH_SR_PARITY_ERR	Parity error.
9552131Smckusick  *	MACH_SR_CACHE_MISS	Most recent D-cache load resulted in a miss.
9652131Smckusick  *	MACH_SR_PARITY_ZERO	Zero replaces outgoing parity bits.
9752131Smckusick  *	MACH_SR_SWAP_CACHES	Swap I-cache and D-cache.
9852131Smckusick  *	MACH_SR_ISOL_CACHES	Isolate D-cache from main memory.
9952131Smckusick  *				Interrupt enable bits defined below.
10052131Smckusick  *	MACH_SR_KU_OLD		Old kernel/user mode bit. 1 => user mode.
10152131Smckusick  *	MACH_SR_INT_ENA_OLD	Old interrupt enable bit.
10252131Smckusick  *	MACH_SR_KU_PREV		Previous kernel/user mode bit. 1 => user mode.
10352131Smckusick  *	MACH_SR_INT_ENA_PREV	Previous interrupt enable bit.
10452131Smckusick  *	MACH_SR_KU_CUR		Current kernel/user mode bit. 1 => user mode.
10552131Smckusick  *	MACH_SR_INT_ENA_CUR	Current interrupt enable bit.
10652131Smckusick  */
10752131Smckusick #define MACH_SR_COP_USABILITY	0xf0000000
10852131Smckusick #define MACH_SR_COP_0_BIT	0x10000000
10952131Smckusick #define MACH_SR_COP_1_BIT	0x20000000
11052131Smckusick #define MACH_SR_BOOT_EXC_VEC	0x00400000
11152131Smckusick #define MACH_SR_TLB_SHUTDOWN	0x00200000
11252131Smckusick #define MACH_SR_PARITY_ERR	0x00100000
11352131Smckusick #define MACH_SR_CACHE_MISS	0x00080000
11452131Smckusick #define MACH_SR_PARITY_ZERO	0x00040000
11552131Smckusick #define MACH_SR_SWAP_CACHES	0x00020000
11652131Smckusick #define MACH_SR_ISOL_CACHES	0x00010000
11752131Smckusick #define MACH_SR_KU_OLD		0x00000020
11852131Smckusick #define MACH_SR_INT_ENA_OLD	0x00000010
11952131Smckusick #define MACH_SR_KU_PREV		0x00000008
12052131Smckusick #define MACH_SR_INT_ENA_PREV	0x00000004
12152131Smckusick #define MACH_SR_KU_CUR		0x00000002
12252131Smckusick #define MACH_SR_INT_ENA_CUR	0x00000001
12352131Smckusick #define MACH_SR_MBZ		0x0f8000c0
12452131Smckusick 
12552131Smckusick /*
12652131Smckusick  * The interrupt masks.
12752131Smckusick  * If a bit in the mask is 1 then the interrupt is enabled (or pending).
12852131Smckusick  */
12952131Smckusick #define MACH_INT_MASK		0xff00
13052131Smckusick #define MACH_INT_MASK_5		0x8000
13152131Smckusick #define MACH_INT_MASK_4		0x4000
13252131Smckusick #define MACH_INT_MASK_3		0x2000
13352131Smckusick #define MACH_INT_MASK_2		0x1000
13452131Smckusick #define MACH_INT_MASK_1		0x0800
13552131Smckusick #define MACH_INT_MASK_0		0x0400
13652131Smckusick #define MACH_HARD_INT_MASK	0xfc00
13752131Smckusick #define MACH_SOFT_INT_MASK_1	0x0200
13852131Smckusick #define MACH_SOFT_INT_MASK_0	0x0100
13952131Smckusick 
14052131Smckusick /*
14152131Smckusick  * The system control status register.
14252131Smckusick  */
143*52746Sralph #ifdef DS3100
14452131Smckusick #define MACH_CSR_MONO		0x0800
14552131Smckusick #define MACH_CSR_MEM_ERR	0x0400
14652131Smckusick #define	MACH_CSR_VINT		0x0200
14752131Smckusick #define	MACH_CSR_MBZ		0x9800
148*52746Sralph #endif
14952131Smckusick 
150*52746Sralph #ifdef DS5000
151*52746Sralph #define	MACH_CSR_IOINT_MASK	0x000000FF
152*52746Sralph #define MACH_CSR_BAUD38		0x00000100
153*52746Sralph #define MACH_CSR_DIAGDN		0x00000200
154*52746Sralph #define MACH_CSR_BNK32M		0x00000400
155*52746Sralph #define MACH_CSR_TXDIS		0x00000800
156*52746Sralph #define MACH_CSR_LEDIAG		0x00001000
157*52746Sralph #define MACH_CSR_CORRECT	0x00002000
158*52746Sralph #define MACH_CSR_ECCMD		0x0000C000
159*52746Sralph #define MACH_CSR_IOINTEN_MASK	0x00FF0000
160*52746Sralph #define	MACH_CSR_IOINTEN_SHIFT	16
161*52746Sralph #define MACH_CSR_NRMMOD		0x01000000
162*52746Sralph #define	MACH_CSR_REFEVEN	0x02000000
163*52746Sralph #define	MACH_CSR_PRSVNVR	0x04000000
164*52746Sralph #define	MACH_CSR_PSWARN		0x08000000
165*52746Sralph #define	MACH_CSR_MBZ		0xFF000000
166*52746Sralph #endif
167*52746Sralph 
16852131Smckusick /*
16952131Smckusick  * The bits in the context register.
17052131Smckusick  */
17152131Smckusick #define MACH_CNTXT_PTE_BASE	0xFFE00000
17252131Smckusick #define MACH_CNTXT_BAD_VPN	0x001FFFFC
17352131Smckusick 
17452131Smckusick /*
17552131Smckusick  * Location of exception vectors.
17652131Smckusick  */
17752131Smckusick #define MACH_RESET_EXC_VEC	0xBFC00000
17852131Smckusick #define MACH_UTLB_MISS_EXC_VEC	0x80000000
17952131Smckusick #define MACH_GEN_EXC_VEC	0x80000080
18052131Smckusick 
18152131Smckusick /*
18252131Smckusick  * Coprocessor 0 registers:
18352131Smckusick  *
18452131Smckusick  *	MACH_COP_0_TLB_INDEX	TLB index.
18552131Smckusick  *	MACH_COP_0_TLB_RANDOM	TLB random.
18652131Smckusick  *	MACH_COP_0_TLB_LOW	TLB entry low.
18752131Smckusick  *	MACH_COP_0_TLB_CONTEXT	TLB context.
18852131Smckusick  *	MACH_COP_0_BAD_VADDR	Bad virtual address.
18952131Smckusick  *	MACH_COP_0_TLB_HI	TLB entry high.
19052131Smckusick  *	MACH_COP_0_STATUS_REG	Status register.
19152131Smckusick  *	MACH_COP_0_CAUSE_REG	Exception cause register.
19252131Smckusick  *	MACH_COP_0_EXC_PC	Exception PC.
19352131Smckusick  *	MACH_COP_0_PRID		Processor revision identifier.
19452131Smckusick  */
19552131Smckusick #define MACH_COP_0_TLB_INDEX	$0
19652131Smckusick #define MACH_COP_0_TLB_RANDOM	$1
19752131Smckusick #define MACH_COP_0_TLB_LOW	$2
19852131Smckusick #define MACH_COP_0_TLB_CONTEXT	$4
19952131Smckusick #define MACH_COP_0_BAD_VADDR	$8
20052131Smckusick #define MACH_COP_0_TLB_HI	$10
20152131Smckusick #define MACH_COP_0_STATUS_REG	$12
20252131Smckusick #define MACH_COP_0_CAUSE_REG	$13
20352131Smckusick #define MACH_COP_0_EXC_PC	$14
20452131Smckusick #define MACH_COP_0_PRID		$15
20552131Smckusick 
20652131Smckusick /*
20752131Smckusick  * Values for the code field in a break instruction.
20852131Smckusick  */
209*52746Sralph #define MACH_BREAK_INSTR	0x0000000d
210*52746Sralph #define MACH_BREAK_VAL_MASK	0x03ff0000
211*52746Sralph #define MACH_BREAK_VAL_SHIFT	16
212*52746Sralph #define MACH_BREAK_KDB_VAL	512
213*52746Sralph #define MACH_BREAK_SSTEP_VAL	513
214*52746Sralph #define MACH_BREAK_BRKPT_VAL	514
215*52746Sralph #define MACH_BREAK_KDB		(MACH_BREAK_INSTR | \
216*52746Sralph 				(MACH_BREAK_KDB_VAL << MACH_BREAK_VAL_SHIFT))
217*52746Sralph #define MACH_BREAK_SSTEP	(MACH_BREAK_INSTR | \
218*52746Sralph 				(MACH_BREAK_SSTEP_VAL << MACH_BREAK_VAL_SHIFT))
219*52746Sralph #define MACH_BREAK_BRKPT	(MACH_BREAK_INSTR | \
220*52746Sralph 				(MACH_BREAK_BRKPT_VAL << MACH_BREAK_VAL_SHIFT))
22152131Smckusick 
22252131Smckusick /*
22352131Smckusick  * Mininum and maximum cache sizes.
22452131Smckusick  */
22552131Smckusick #define MACH_MIN_CACHE_SIZE	(16 * 1024)
226*52746Sralph #define MACH_MAX_CACHE_SIZE	(256 * 1024)
22752131Smckusick 
22852131Smckusick /*
22952131Smckusick  * The floating point version and status registers.
23052131Smckusick  */
23152131Smckusick #define	MACH_FPC_ID	$0
23252131Smckusick #define	MACH_FPC_CSR	$31
23352131Smckusick 
23452131Smckusick /*
23552131Smckusick  * The floating point coprocessor status register bits.
23652131Smckusick  */
23752131Smckusick #define MACH_FPC_ROUNDING_BITS		0x00000003
23852131Smckusick #define MACH_FPC_ROUND_RN		0x00000000
23952131Smckusick #define MACH_FPC_ROUND_RZ		0x00000001
24052131Smckusick #define MACH_FPC_ROUND_RP		0x00000002
24152131Smckusick #define MACH_FPC_ROUND_RM		0x00000003
24252131Smckusick #define MACH_FPC_STICKY_BITS		0x0000007c
24352131Smckusick #define MACH_FPC_STICKY_INEXACT		0x00000004
24452131Smckusick #define MACH_FPC_STICKY_UNDERFLOW	0x00000008
24552131Smckusick #define MACH_FPC_STICKY_OVERFLOW	0x00000010
24652131Smckusick #define MACH_FPC_STICKY_DIV0		0x00000020
24752131Smckusick #define MACH_FPC_STICKY_INVALID		0x00000040
24852131Smckusick #define MACH_FPC_ENABLE_BITS		0x00000f80
24952131Smckusick #define MACH_FPC_ENABLE_INEXACT		0x00000080
25052131Smckusick #define MACH_FPC_ENABLE_UNDERFLOW	0x00000100
25152131Smckusick #define MACH_FPC_ENABLE_OVERFLOW	0x00000200
25252131Smckusick #define MACH_FPC_ENABLE_DIV0		0x00000400
25352131Smckusick #define MACH_FPC_ENABLE_INVALID		0x00000800
25452131Smckusick #define MACH_FPC_EXCEPTION_BITS		0x0003f000
25552131Smckusick #define MACH_FPC_EXCEPTION_INEXACT	0x00001000
25652131Smckusick #define MACH_FPC_EXCEPTION_UNDERFLOW	0x00002000
25752131Smckusick #define MACH_FPC_EXCEPTION_OVERFLOW	0x00004000
25852131Smckusick #define MACH_FPC_EXCEPTION_DIV0		0x00008000
25952131Smckusick #define MACH_FPC_EXCEPTION_INVALID	0x00010000
26052131Smckusick #define MACH_FPC_EXCEPTION_UNIMPL	0x00020000
26152131Smckusick #define MACH_FPC_COND_BIT		0x00800000
26252131Smckusick #define MACH_FPC_MBZ_BITS		0xff7c0000
26352131Smckusick 
26452131Smckusick /*
26552131Smckusick  * Constants to determine if have a floating point instruction.
26652131Smckusick  */
26752131Smckusick #define MACH_OPCODE_SHIFT	26
26852131Smckusick #define MACH_OPCODE_C1		0x11
26952131Smckusick 
27052131Smckusick /*
27152131Smckusick  * The low part of the TLB entry.
27252131Smckusick  */
27352131Smckusick #define VMMACH_TLB_PF_NUM		0xfffff000
27452131Smckusick #define VMMACH_TLB_NON_CACHEABLE_BIT	0x00000800
27552131Smckusick #define VMMACH_TLB_MOD_BIT		0x00000400
27652131Smckusick #define VMMACH_TLB_VALID_BIT		0x00000200
27752131Smckusick #define VMMACH_TLB_GLOBAL_BIT		0x00000100
27852131Smckusick 
27952131Smckusick #define VMMACH_TLB_PHYS_PAGE_SHIFT	12
28052131Smckusick 
28152131Smckusick /*
28252131Smckusick  * The high part of the TLB entry.
28352131Smckusick  */
28452131Smckusick #define VMMACH_TLB_VIRT_PAGE_NUM	0xfffff000
28552131Smckusick #define VMMACH_TLB_PID			0x00000fc0
28652131Smckusick #define VMMACH_TLB_PID_SHIFT		6
28752131Smckusick #define VMMACH_TLB_VIRT_PAGE_SHIFT	12
28852131Smckusick 
28952131Smckusick /*
29052131Smckusick  * The shift to put the index in the right spot.
29152131Smckusick  */
29252131Smckusick #define VMMACH_TLB_INDEX_SHIFT		8
29352131Smckusick 
29452131Smckusick /*
29552131Smckusick  * The number of TLB entries and the first one that write random hits.
29652131Smckusick  */
29752131Smckusick #define VMMACH_NUM_TLB_ENTRIES		64
29852131Smckusick #define VMMACH_FIRST_RAND_ENTRY 	8
29952131Smckusick 
30052131Smckusick /*
30152131Smckusick  * The number of process id entries.
30252131Smckusick  */
30352131Smckusick #define	VMMACH_NUM_PIDS			64
30452131Smckusick 
30552131Smckusick /*
30652131Smckusick  * TLB probe return codes.
30752131Smckusick  */
30852131Smckusick #define VMMACH_TLB_NOT_FOUND		0
30952131Smckusick #define VMMACH_TLB_FOUND		1
31052131Smckusick #define VMMACH_TLB_FOUND_WITH_PATCH	2
31152131Smckusick #define VMMACH_TLB_PROBE_ERROR		3
31252131Smckusick 
31352131Smckusick /*
31452131Smckusick  * Kernel virtual address for user page table entries
31552131Smckusick  * (i.e., the address for the context register).
31652131Smckusick  */
31752131Smckusick #define VMMACH_PTE_BASE		0xFFC00000
31852131Smckusick 
31952131Smckusick #endif /* _MACHCONST */
320