summaryrefslogtreecommitdiff
path: root/os/cerf405/mem.h
blob: fa0aa82bc66ed5f6e6b27e1b0744c7e91c32db03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * Memory and machine-specific definitions.  Used in C and assembler.
 */

/*
 * Sizes
 */

#define	BI2BY		8			/* bits per byte */
#define BI2WD		32			/* bits per word */
#define	BY2WD		4			/* bytes per word */
#define	BY2V		8			/* bytes per double word */
#define	BY2PG		4096			/* bytes per page */
#define	WD2PG		(BY2PG/BY2WD)		/* words per page */
#define	PGSHIFT		12			/* log(BY2PG) */
#define ROUND(s, sz)	(((s)+(sz-1))&~(sz-1))
#define PGROUND(s)	ROUND(s, BY2PG)
#define	CACHELINELOG	5
#define CACHELINESZ	(1<<CACHELINELOG)
#define	CACHESIZE	16384
#define	CACHEWAYSIZE	(CACHESIZE/2)	/* 2-way set associative */

#define	MAXMACH		1			/* max # cpus system can run */
#define	MACHSIZE	BY2PG

/*
 * Time
 */
#define HZ		100			/* clock frequency */
#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */
#define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */
#define	MS2TK(t)	((t)/MS2HZ)		/* milliseconds to ticks */
#define	MHz	1000000

/*
 * 4xx MSR bits
 */

#define	MSR_WE	0x40000	/* wait state enable */
#define	MSR_CE	0x20000	/* critical interrupt enable */
#define	MSR_EE	0x08000	/* enable external/decrementer interrupts */
#define	MSR_PR	0x04000	/* =1, user mode */
#define	MSR_ME	0x01000	/* enable machine check exceptions */
#define	MSR_DWE	0x00400	/* debug wait enable */
#define	MSR_DE	0x00200	/* debug interrupts enable */
#define	MSR_IR	0x00020	/* enable instruction address translation */
#define	MSR_DR	0x00010	/* enable data address translation */

#define	KMSR	(MSR_ME)
#define	UMSR	(MSR_PR|MSR_DE|MSR_CE|MSR_EE|MSR_IR|MSR_DR)

/*
 * Magic registers
 */

#define	MACH	30		/* R30 is m-> */
#define	USER		29		/* R29 is up-> */

/*
 * Fundamental addresses
 */

#define	UREGSIZE	((8+32)*4)

/*
 * MMU
 */

/* TLBHI */
#define	TLBEPN(x)	((x) & ~0x3FF)
#define	TLB1K		(0<<7)
#define	TLB4K		(1<<7)
#define	TLB16K		(2<<7)
#define	TLB64K		(3<<7)
#define	TLB256K		(4<<7)
#define	TLB1MB		(5<<7)
#define	TLB4MB		(6<<7)
#define	TLB16MB		(7<<7)
#define	TLBVALID		(1<<6)
#define	TLBLE		(1<<5)	/* little-endian */
#define	TLBU0		(1<<4)	/* user-defined attribute */

/* TLBLO */
#define	TLBRPN(x)	((x) & ~0x3FF)
#define	TLBEX		(1<<9)	/* execute enable */
#define	TLBWR		(1<<8)	/* write enable */
#define	TLBZONE(x)	((x)<<4)
#define	TLBW		(1<<3)	/* write-through */
#define	TLBI			(1<<2)	/* cache inhibit */
#define	TLBM		(1<<1)	/* memory coherent */
#define	TLBG		(1<<0)	/* guarded */

/*
 * Address spaces
 */

#define	KUSEG	0x00000000
#define	KSEG0	0x20000000
#define	KSEG1	0x60000000	/* uncached alias for KSEG0 */
#define	KSEGM	0xE0000000	/* mask to check which seg */

#define	KZERO	KSEG0			/* base of kernel address space */
#define	KTZERO	(KZERO+0x3000)	/* first address in kernel text */
#define	KSTACK	8192	/* Size of kernel stack */

#define	OCMZERO	0x40000000	/* on-chip memory (virtual and physical--see p 5-1) */

/*
 * Exception codes (trap vectors)
 */
#define	CRESET	0x01
#define	CMCHECK 0x02
#define	CDSI	0x03
#define	CISI	0x04
#define	CEI	0x05
#define	CALIGN	0x06
#define	CPROG	0x07
/* 0x08 (fpu) not used */
/* 0x09 (dec) not used */
#define	CSYSCALL 0x0C
/* 0x0D (trace) not used */
/* 0x0E (fpa) not used */
#define	CPIT		0x10
/* FIT is 0x1010 */
/* WDT is 0x1020 */
#define	CDMISS	0x11
#define	CIMISS	0x12
#define	CDEBUG	0x20

/*
 * exception syndrome register
 */
#define	ESR_MCI	0x80000000	/* instruction machine check */
#define	ESR_PIL	0x08000000	/* program interrupt: illegal instruction */
#define	ESR_PPR	0x04000000	/* program interrupt: privileged */
#define	ESR_PTR	0x02000000	/* program intterupt: trap with successful compare */
#define	ESR_DST	0x00800000	/* data storage interrupt: store fault */
#define	ESR_DIZ	0x00400000	/* data/instruction storage interrupt: zone fault */
#define	ESR_U0F	0x00008000	/* data storage interrupt: u0 fault */

#include	"physmem.h"

/* cerf-cube specific */
#define	PHYSDRAM	0
#define	PHYSFLASH	0xFFE00000
#define	FLASHSIZE	0x200000
#define	PHYSNAND	0x60000000