xref: /plan9/sys/src/9/rb/mem.h (revision f43f8ee646e2cb29aea7fd7bb5fc7318a3f4921f)
1*f43f8ee6SDavid du Colombier /*
2*f43f8ee6SDavid du Colombier  * Memory and machine-specific definitions.  Used in C and assembler.
3*f43f8ee6SDavid du Colombier  */
4*f43f8ee6SDavid du Colombier 
5*f43f8ee6SDavid du Colombier /*
6*f43f8ee6SDavid du Colombier  * Sizes
7*f43f8ee6SDavid du Colombier  */
8*f43f8ee6SDavid du Colombier 
9*f43f8ee6SDavid du Colombier #define	BI2BY		8			/* bits per byte */
10*f43f8ee6SDavid du Colombier #define	BI2WD		32			/* bits per word */
11*f43f8ee6SDavid du Colombier #define	BY2WD		4			/* bytes per word */
12*f43f8ee6SDavid du Colombier #define	BY2V		8			/* bytes per vlong */
13*f43f8ee6SDavid du Colombier 
14*f43f8ee6SDavid du Colombier #define MAXBY2PG (16*1024) /* rounding for UTZERO in executables; see mkfile */
15*f43f8ee6SDavid du Colombier #define UTROUND(t)	ROUNDUP((t), MAXBY2PG)
16*f43f8ee6SDavid du Colombier 
17*f43f8ee6SDavid du Colombier #ifndef BIGPAGES
18*f43f8ee6SDavid du Colombier #define	BY2PG		4096			/* bytes per page */
19*f43f8ee6SDavid du Colombier #define	PGSHIFT		12			/* log2(BY2PG) */
20*f43f8ee6SDavid du Colombier #define	PGSZ		PGSZ4K
21*f43f8ee6SDavid du Colombier #define MACHSIZE	(2*BY2PG)
22*f43f8ee6SDavid du Colombier #else
23*f43f8ee6SDavid du Colombier /* 16K pages work very poorly */
24*f43f8ee6SDavid du Colombier #define	BY2PG		(16*1024)		/* bytes per page */
25*f43f8ee6SDavid du Colombier #define	PGSHIFT		14			/* log2(BY2PG) */
26*f43f8ee6SDavid du Colombier #define PGSZ		PGSZ16K
27*f43f8ee6SDavid du Colombier #define MACHSIZE	BY2PG
28*f43f8ee6SDavid du Colombier #endif
29*f43f8ee6SDavid du Colombier 
30*f43f8ee6SDavid du Colombier #define	KSTACK		8192			/* Size of kernel stack */
31*f43f8ee6SDavid du Colombier #define	WD2PG		(BY2PG/BY2WD)		/* words per page */
32*f43f8ee6SDavid du Colombier 
33*f43f8ee6SDavid du Colombier #define	MAXMACH		1   /* max # cpus system can run; see active.machs */
34*f43f8ee6SDavid du Colombier #define STACKALIGN(sp)	((sp) & ~7)		/* bug: assure with alloc */
35*f43f8ee6SDavid du Colombier #define	BLOCKALIGN	16
36*f43f8ee6SDavid du Colombier #define CACHELINESZ	32			/* mips24k */
37*f43f8ee6SDavid du Colombier #define ICACHESIZE	(64*1024)		/* rb450g */
38*f43f8ee6SDavid du Colombier #define DCACHESIZE	(32*1024)		/* rb450g */
39*f43f8ee6SDavid du Colombier 
40*f43f8ee6SDavid du Colombier #define MASK(w)		FMASK(0, w)
41*f43f8ee6SDavid du Colombier 
42*f43f8ee6SDavid du Colombier /*
43*f43f8ee6SDavid du Colombier  * Time
44*f43f8ee6SDavid du Colombier  */
45*f43f8ee6SDavid du Colombier #define	HZ		100			/* clock frequency */
46*f43f8ee6SDavid du Colombier #define	MS2HZ		(1000/HZ)		/* millisec per clock tick */
47*f43f8ee6SDavid du Colombier #define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */
48*f43f8ee6SDavid du Colombier 
49*f43f8ee6SDavid du Colombier /*
50*f43f8ee6SDavid du Colombier  * CP0 registers
51*f43f8ee6SDavid du Colombier  */
52*f43f8ee6SDavid du Colombier 
53*f43f8ee6SDavid du Colombier #define INDEX		0
54*f43f8ee6SDavid du Colombier #define RANDOM		1
55*f43f8ee6SDavid du Colombier #define TLBPHYS0	2	/* aka ENTRYLO0 */
56*f43f8ee6SDavid du Colombier #define TLBPHYS1	3	/* aka ENTRYLO1 */
57*f43f8ee6SDavid du Colombier #define CONTEXT		4
58*f43f8ee6SDavid du Colombier #define PAGEMASK	5
59*f43f8ee6SDavid du Colombier #define WIRED		6
60*f43f8ee6SDavid du Colombier #define BADVADDR	8
61*f43f8ee6SDavid du Colombier #define COUNT		9
62*f43f8ee6SDavid du Colombier #define TLBVIRT		10	/* aka ENTRYHI */
63*f43f8ee6SDavid du Colombier #define COMPARE		11
64*f43f8ee6SDavid du Colombier #define STATUS		12
65*f43f8ee6SDavid du Colombier #define CAUSE		13
66*f43f8ee6SDavid du Colombier #define EPC		14
67*f43f8ee6SDavid du Colombier #define	PRID		15
68*f43f8ee6SDavid du Colombier #define	CONFIG		16
69*f43f8ee6SDavid du Colombier #define	LLADDR		17
70*f43f8ee6SDavid du Colombier #define	WATCHLO		18
71*f43f8ee6SDavid du Colombier #define	WATCHHI		19
72*f43f8ee6SDavid du Colombier #define DEBUG		23
73*f43f8ee6SDavid du Colombier #define DEPC		24
74*f43f8ee6SDavid du Colombier #define PERFCOUNT	25
75*f43f8ee6SDavid du Colombier #define	CACHEECC	26
76*f43f8ee6SDavid du Colombier #define	CACHEERR	27
77*f43f8ee6SDavid du Colombier #define	TAGLO		28
78*f43f8ee6SDavid du Colombier #define	TAGHI		29
79*f43f8ee6SDavid du Colombier #define	ERROREPC	30
80*f43f8ee6SDavid du Colombier #define DESAVE		31
81*f43f8ee6SDavid du Colombier 
82*f43f8ee6SDavid du Colombier /*
83*f43f8ee6SDavid du Colombier  * M(STATUS) bits
84*f43f8ee6SDavid du Colombier  */
85*f43f8ee6SDavid du Colombier #define KMODEMASK	0x0000001f
86*f43f8ee6SDavid du Colombier #define IE		0x00000001	/* master interrupt enable */
87*f43f8ee6SDavid du Colombier #define EXL		0x00000002	/* exception level */
88*f43f8ee6SDavid du Colombier #define ERL		0x00000004	/* error level */
89*f43f8ee6SDavid du Colombier #define KSUPER		0x00000008
90*f43f8ee6SDavid du Colombier #define KUSER		0x00000010
91*f43f8ee6SDavid du Colombier #define KSU		0x00000018
92*f43f8ee6SDavid du Colombier //#define UX		0x00000020 /* no [USK]X 64-bit extension bits on 24k */
93*f43f8ee6SDavid du Colombier //#define SX		0x00000040
94*f43f8ee6SDavid du Colombier //#define KX		0x00000080
95*f43f8ee6SDavid du Colombier #define INTMASK		0x0000ff00
96*f43f8ee6SDavid du Colombier #define INTR0		0x00000100	/* interrupt enable bits */
97*f43f8ee6SDavid du Colombier #define INTR1		0x00000200
98*f43f8ee6SDavid du Colombier #define INTR2		0x00000400
99*f43f8ee6SDavid du Colombier #define INTR3		0x00000800
100*f43f8ee6SDavid du Colombier #define INTR4		0x00001000
101*f43f8ee6SDavid du Colombier #define INTR5		0x00002000
102*f43f8ee6SDavid du Colombier #define INTR6		0x00004000
103*f43f8ee6SDavid du Colombier #define INTR7		0x00008000
104*f43f8ee6SDavid du Colombier //#define DE		0x00010000	/* not on 24k */
105*f43f8ee6SDavid du Colombier #define TS		0x00200000	/* tlb shutdown; on 24k at least */
106*f43f8ee6SDavid du Colombier #define BEV		0x00400000	/* bootstrap exception vectors */
107*f43f8ee6SDavid du Colombier #define RE		0x02000000	/* reverse-endian in user mode */
108*f43f8ee6SDavid du Colombier #define FR		0x04000000	/* enable 32 FP regs */
109*f43f8ee6SDavid du Colombier #define CU0		0x10000000
110*f43f8ee6SDavid du Colombier #define CU1		0x20000000	/* FPU enable */
111*f43f8ee6SDavid du Colombier 
112*f43f8ee6SDavid du Colombier /*
113*f43f8ee6SDavid du Colombier  * M(CONFIG) bits
114*f43f8ee6SDavid du Colombier  */
115*f43f8ee6SDavid du Colombier 
116*f43f8ee6SDavid du Colombier #define CFG_K0		7	/* kseg0 cachability */
117*f43f8ee6SDavid du Colombier #define CFG_MM		(1<<18)	/* write-through merging enabled */
118*f43f8ee6SDavid du Colombier 
119*f43f8ee6SDavid du Colombier /*
120*f43f8ee6SDavid du Colombier  * M(CAUSE) bits
121*f43f8ee6SDavid du Colombier  */
122*f43f8ee6SDavid du Colombier 
123*f43f8ee6SDavid du Colombier #define BD		(1<<31)	/* last excep'n occurred in branch delay slot */
124*f43f8ee6SDavid du Colombier 
125*f43f8ee6SDavid du Colombier /*
126*f43f8ee6SDavid du Colombier  * Exception codes
127*f43f8ee6SDavid du Colombier  */
128*f43f8ee6SDavid du Colombier #define	EXCMASK	0x1f		/* mask of all causes */
129*f43f8ee6SDavid du Colombier #define	CINT	 0		/* external interrupt */
130*f43f8ee6SDavid du Colombier #define	CTLBM	 1		/* TLB modification: store to unwritable page */
131*f43f8ee6SDavid du Colombier #define	CTLBL	 2		/* TLB miss (load or fetch) */
132*f43f8ee6SDavid du Colombier #define	CTLBS	 3		/* TLB miss (store) */
133*f43f8ee6SDavid du Colombier #define	CADREL	 4		/* address error (load or fetch) */
134*f43f8ee6SDavid du Colombier #define	CADRES	 5		/* address error (store) */
135*f43f8ee6SDavid du Colombier #define	CBUSI	 6		/* bus error (fetch) */
136*f43f8ee6SDavid du Colombier #define	CBUSD	 7		/* bus error (data load or store) */
137*f43f8ee6SDavid du Colombier #define	CSYS	 8		/* system call */
138*f43f8ee6SDavid du Colombier #define	CBRK	 9		/* breakpoint */
139*f43f8ee6SDavid du Colombier #define	CRES	10		/* reserved instruction */
140*f43f8ee6SDavid du Colombier #define	CCPU	11		/* coprocessor unusable */
141*f43f8ee6SDavid du Colombier #define	COVF	12		/* arithmetic overflow */
142*f43f8ee6SDavid du Colombier #define	CTRAP	13		/* trap */
143*f43f8ee6SDavid du Colombier #define	CVCEI	14		/* virtual coherence exception (instruction) */
144*f43f8ee6SDavid du Colombier #define	CFPE	15		/* floating point exception */
145*f43f8ee6SDavid du Colombier #define CTLBRI	19		/* tlb read-inhibit */
146*f43f8ee6SDavid du Colombier #define CTLBXI	20		/* tlb execute-inhibit */
147*f43f8ee6SDavid du Colombier #define	CWATCH	23		/* watch exception */
148*f43f8ee6SDavid du Colombier #define CMCHK	24		/* machine checkcore */
149*f43f8ee6SDavid du Colombier #define CCACHERR 30		/* cache error */
150*f43f8ee6SDavid du Colombier #define	CVCED	31		/* virtual coherence exception (data) */
151*f43f8ee6SDavid du Colombier 
152*f43f8ee6SDavid du Colombier /*
153*f43f8ee6SDavid du Colombier  * M(CACHEECC) a.k.a. ErrCtl bits
154*f43f8ee6SDavid du Colombier  */
155*f43f8ee6SDavid du Colombier #define PE	(1<<31)
156*f43f8ee6SDavid du Colombier #define LBE	(1<<25)
157*f43f8ee6SDavid du Colombier #define WABE	(1<<24)
158*f43f8ee6SDavid du Colombier 
159*f43f8ee6SDavid du Colombier /*
160*f43f8ee6SDavid du Colombier  * Trap vectors
161*f43f8ee6SDavid du Colombier  */
162*f43f8ee6SDavid du Colombier 
163*f43f8ee6SDavid du Colombier #define	UTLBMISS	(KSEG0+0x000)
164*f43f8ee6SDavid du Colombier #define	XEXCEPTION	(KSEG0+0x080)
165*f43f8ee6SDavid du Colombier #define	CACHETRAP	(KSEG0+0x100)
166*f43f8ee6SDavid du Colombier #define	EXCEPTION	(KSEG0+0x180)
167*f43f8ee6SDavid du Colombier 
168*f43f8ee6SDavid du Colombier /*
169*f43f8ee6SDavid du Colombier  * Magic registers
170*f43f8ee6SDavid du Colombier  */
171*f43f8ee6SDavid du Colombier 
172*f43f8ee6SDavid du Colombier #define	USER		24		/* R24 is up-> */
173*f43f8ee6SDavid du Colombier #define	MACH		25		/* R25 is m-> */
174*f43f8ee6SDavid du Colombier 
175*f43f8ee6SDavid du Colombier /*
176*f43f8ee6SDavid du Colombier  * offsets in ureg.h for l.s
177*f43f8ee6SDavid du Colombier  */
178*f43f8ee6SDavid du Colombier #define	Ureg_status	(Uoffset+0)
179*f43f8ee6SDavid du Colombier #define	Ureg_pc		(Uoffset+4)
180*f43f8ee6SDavid du Colombier #define	Ureg_sp		(Uoffset+8)
181*f43f8ee6SDavid du Colombier #define	Ureg_cause	(Uoffset+12)
182*f43f8ee6SDavid du Colombier #define	Ureg_badvaddr	(Uoffset+16)
183*f43f8ee6SDavid du Colombier #define	Ureg_tlbvirt	(Uoffset+20)
184*f43f8ee6SDavid du Colombier 
185*f43f8ee6SDavid du Colombier #define	Ureg_hi		(Uoffset+24)
186*f43f8ee6SDavid du Colombier #define	Ureg_lo		(Uoffset+28)
187*f43f8ee6SDavid du Colombier #define	Ureg_r31	(Uoffset+32)
188*f43f8ee6SDavid du Colombier #define	Ureg_r30	(Uoffset+36)
189*f43f8ee6SDavid du Colombier #define	Ureg_r28	(Uoffset+40)
190*f43f8ee6SDavid du Colombier #define	Ureg_r27	(Uoffset+44)
191*f43f8ee6SDavid du Colombier #define	Ureg_r26	(Uoffset+48)
192*f43f8ee6SDavid du Colombier #define	Ureg_r25	(Uoffset+52)
193*f43f8ee6SDavid du Colombier #define	Ureg_r24	(Uoffset+56)
194*f43f8ee6SDavid du Colombier #define	Ureg_r23	(Uoffset+60)
195*f43f8ee6SDavid du Colombier #define	Ureg_r22	(Uoffset+64)
196*f43f8ee6SDavid du Colombier #define	Ureg_r21	(Uoffset+68)
197*f43f8ee6SDavid du Colombier #define	Ureg_r20	(Uoffset+72)
198*f43f8ee6SDavid du Colombier #define	Ureg_r19	(Uoffset+76)
199*f43f8ee6SDavid du Colombier #define	Ureg_r18	(Uoffset+80)
200*f43f8ee6SDavid du Colombier #define	Ureg_r17	(Uoffset+84)
201*f43f8ee6SDavid du Colombier #define	Ureg_r16	(Uoffset+88)
202*f43f8ee6SDavid du Colombier #define	Ureg_r15	(Uoffset+92)
203*f43f8ee6SDavid du Colombier #define	Ureg_r14	(Uoffset+96)
204*f43f8ee6SDavid du Colombier #define	Ureg_r13	(Uoffset+100)
205*f43f8ee6SDavid du Colombier #define	Ureg_r12	(Uoffset+104)
206*f43f8ee6SDavid du Colombier #define	Ureg_r11	(Uoffset+108)
207*f43f8ee6SDavid du Colombier #define	Ureg_r10	(Uoffset+112)
208*f43f8ee6SDavid du Colombier #define	Ureg_r9		(Uoffset+116)
209*f43f8ee6SDavid du Colombier #define	Ureg_r8		(Uoffset+120)
210*f43f8ee6SDavid du Colombier #define	Ureg_r7		(Uoffset+124)
211*f43f8ee6SDavid du Colombier #define	Ureg_r6		(Uoffset+128)
212*f43f8ee6SDavid du Colombier #define	Ureg_r5		(Uoffset+132)
213*f43f8ee6SDavid du Colombier #define	Ureg_r4		(Uoffset+136)
214*f43f8ee6SDavid du Colombier #define	Ureg_r3		(Uoffset+140)
215*f43f8ee6SDavid du Colombier #define	Ureg_r2		(Uoffset+144)
216*f43f8ee6SDavid du Colombier #define	Ureg_r1		(Uoffset+148)
217*f43f8ee6SDavid du Colombier 
218*f43f8ee6SDavid du Colombier /* ch and carrera used these defs */
219*f43f8ee6SDavid du Colombier 	/* Sizeof(Ureg) + (R5,R6) + 16 bytes slop + retpc + ur */
220*f43f8ee6SDavid du Colombier // #define UREGSIZE ((Ureg_r1+4-Uoffset) + 2*BY2V + 16 + BY2WD + BY2WD)
221*f43f8ee6SDavid du Colombier // #define Uoffset	8
222*f43f8ee6SDavid du Colombier 
223*f43f8ee6SDavid du Colombier // #define UREGSIZE	(Ureg_r1 + 4 - Uoffset)	/* this ought to work */
224*f43f8ee6SDavid du Colombier #define UREGSIZE ((Ureg_r1+4-Uoffset) + 2*BY2V + 16 + BY2WD + BY2WD)
225*f43f8ee6SDavid du Colombier #define Uoffset		0
226*f43f8ee6SDavid du Colombier #define Notuoffset	8
227*f43f8ee6SDavid du Colombier 
228*f43f8ee6SDavid du Colombier /*
229*f43f8ee6SDavid du Colombier  * MMU
230*f43f8ee6SDavid du Colombier  */
231*f43f8ee6SDavid du Colombier #define	PGSZ4K		(0x00<<13)
232*f43f8ee6SDavid du Colombier #define PGSZ16K		(0x03<<13)	/* on 24k */
233*f43f8ee6SDavid du Colombier #define	PGSZ64K		(0x0F<<13)
234*f43f8ee6SDavid du Colombier #define	PGSZ256K	(0x3F<<13)
235*f43f8ee6SDavid du Colombier #define	PGSZ1M		(0xFF<<13)
236*f43f8ee6SDavid du Colombier #define	PGSZ4M		(0x3FF<<13)
237*f43f8ee6SDavid du Colombier // #define PGSZ8M	(0x7FF<<13)	/* not on 24k */
238*f43f8ee6SDavid du Colombier #define	PGSZ16M		(0xFFF<<13)
239*f43f8ee6SDavid du Colombier #define PGSZ64M		(0x3FFF<<13)	/* on 24k */
240*f43f8ee6SDavid du Colombier #define PGSZ256M	(0xFFFF<<13)	/* on 24k */
241*f43f8ee6SDavid du Colombier 
242*f43f8ee6SDavid du Colombier /* mips address spaces, tlb-mapped unless marked otherwise */
243*f43f8ee6SDavid du Colombier #define	KUSEG	0x00000000	/* user process */
244*f43f8ee6SDavid du Colombier #define KSEG0	0x80000000	/* kernel (direct mapped, cached) */
245*f43f8ee6SDavid du Colombier #define KSEG1	0xA0000000	/* kernel (direct mapped, uncached: i/o) */
246*f43f8ee6SDavid du Colombier #define	KSEG2	0xC0000000	/* kernel, used for TSTKTOP */
247*f43f8ee6SDavid du Colombier #define	KSEG3	0xE0000000	/* kernel, used by kmap */
248*f43f8ee6SDavid du Colombier #define	KSEGM	0xE0000000	/* mask to check which seg */
249*f43f8ee6SDavid du Colombier 
250*f43f8ee6SDavid du Colombier /*
251*f43f8ee6SDavid du Colombier  * Fundamental addresses
252*f43f8ee6SDavid du Colombier  */
253*f43f8ee6SDavid du Colombier 
254*f43f8ee6SDavid du Colombier #define	REBOOTADDR	KADDR(0x1000)	/* just above vectors */
255*f43f8ee6SDavid du Colombier #define	MACHADDR	0x80005000	/* Mach structures */
256*f43f8ee6SDavid du Colombier #define	MACHP(n)	((Mach *)(MACHADDR+(n)*MACHSIZE))
257*f43f8ee6SDavid du Colombier #define ROM		0xbfc00000
258*f43f8ee6SDavid du Colombier #define	KMAPADDR	0xE0000000	/* kmap'd addresses */
259*f43f8ee6SDavid du Colombier #define	WIREDADDR	0xE2000000	/* address wired kernel space */
260*f43f8ee6SDavid du Colombier 
261*f43f8ee6SDavid du Colombier #define PHYSCONS	(KSEG1|0x18020000)		/* i8250 uart */
262*f43f8ee6SDavid du Colombier 
263*f43f8ee6SDavid du Colombier #define PIDXSHFT	12
264*f43f8ee6SDavid du Colombier #ifndef BIGPAGES
265*f43f8ee6SDavid du Colombier #define NCOLOR		8
266*f43f8ee6SDavid du Colombier #define PIDX		((NCOLOR-1)<<PIDXSHFT)
267*f43f8ee6SDavid du Colombier #define getpgcolor(a)	(((ulong)(a)>>PIDXSHFT) % NCOLOR)
268*f43f8ee6SDavid du Colombier #else
269*f43f8ee6SDavid du Colombier /* no cache aliases are possible with pages of 16K or larger */
270*f43f8ee6SDavid du Colombier #define NCOLOR		1
271*f43f8ee6SDavid du Colombier #define PIDX		0
272*f43f8ee6SDavid du Colombier #define getpgcolor(a)	0
273*f43f8ee6SDavid du Colombier #endif
274*f43f8ee6SDavid du Colombier #define KMAPSHIFT	15
275*f43f8ee6SDavid du Colombier 
276*f43f8ee6SDavid du Colombier #define	PTEGLOBL	(1<<0)
277*f43f8ee6SDavid du Colombier #define	PTEVALID	(1<<1)
278*f43f8ee6SDavid du Colombier #define	PTEWRITE	(1<<2)
279*f43f8ee6SDavid du Colombier #define PTERONLY	0
280*f43f8ee6SDavid du Colombier #define PTEALGMASK	(7<<3)
281*f43f8ee6SDavid du Colombier #define PTENONCOHERWT	(0<<3)		/* cached, write-through (slower) */
282*f43f8ee6SDavid du Colombier #define PTEUNCACHED	(2<<3)
283*f43f8ee6SDavid du Colombier #define PTENONCOHERWB	(3<<3)		/* cached, write-back */
284*f43f8ee6SDavid du Colombier #define PTEUNCACHEDACC	(7<<3)
285*f43f8ee6SDavid du Colombier /* rest are reserved on 24k */
286*f43f8ee6SDavid du Colombier #define PTECOHERXCL	(4<<3)
287*f43f8ee6SDavid du Colombier #define PTECOHERXCLW	(5<<3)
288*f43f8ee6SDavid du Colombier #define PTECOHERUPDW	(6<<3)
289*f43f8ee6SDavid du Colombier 
290*f43f8ee6SDavid du Colombier /* how much faster is it? mflops goes from about .206 (WT) to .37 (WB) */
291*f43f8ee6SDavid du Colombier #define PTECACHABILITY PTENONCOHERWT	/* 24k erratum 48 disallows WB */
292*f43f8ee6SDavid du Colombier // #define PTECACHABILITY PTENONCOHERWB
293*f43f8ee6SDavid du Colombier 
294*f43f8ee6SDavid du Colombier #define	PTEPID(n)	(n)
295*f43f8ee6SDavid du Colombier #define PTEMAPMEM	(1024*1024)
296*f43f8ee6SDavid du Colombier #define	PTEPERTAB	(PTEMAPMEM/BY2PG)
297*f43f8ee6SDavid du Colombier #define SEGMAPSIZE	512
298*f43f8ee6SDavid du Colombier #define SSEGMAPSIZE	16
299*f43f8ee6SDavid du Colombier 
300*f43f8ee6SDavid du Colombier #define STLBLOG		15
301*f43f8ee6SDavid du Colombier #define STLBSIZE	(1<<STLBLOG)	/* entries in the soft TLB */
302*f43f8ee6SDavid du Colombier /* page # bits that don't fit in STLBLOG bits */
303*f43f8ee6SDavid du Colombier #define HIPFNBITS	(BI2WD - (PGSHIFT+1) - STLBLOG)
304*f43f8ee6SDavid du Colombier #define KPTELOG		8
305*f43f8ee6SDavid du Colombier #define KPTESIZE	(1<<KPTELOG)	/* entries in the kfault soft TLB */
306*f43f8ee6SDavid du Colombier 
307*f43f8ee6SDavid du Colombier #define TLBPID(n) ((n)&0xFF)
308*f43f8ee6SDavid du Colombier #define	NTLBPID	256		/* # of pids (affects size of Mach) */
309*f43f8ee6SDavid du Colombier #define	NTLB	16		/* # of entries (mips 24k) */
310*f43f8ee6SDavid du Colombier #define TLBOFF	1		/* first tlb entry (0 used within mmuswitch) */
311*f43f8ee6SDavid du Colombier #define NKTLB	2		/* # of initial kfault tlb entries */
312*f43f8ee6SDavid du Colombier #define WTLBOFF	(TLBOFF+NKTLB)	/* first large IO window tlb entry */
313*f43f8ee6SDavid du Colombier #define NWTLB	0		/* # of large IO window tlb entries */
314*f43f8ee6SDavid du Colombier #define	TLBROFF	(WTLBOFF+NWTLB)	/* offset of first randomly-indexed entry */
315*f43f8ee6SDavid du Colombier 
316*f43f8ee6SDavid du Colombier /*
317*f43f8ee6SDavid du Colombier  * Address spaces
318*f43f8ee6SDavid du Colombier  */
319*f43f8ee6SDavid du Colombier #define	UZERO	KUSEG			/* base of user address space */
320*f43f8ee6SDavid du Colombier #define	UTZERO	(UZERO+MAXBY2PG)	/* 1st user text address; see mkfile */
321*f43f8ee6SDavid du Colombier #define	USTKTOP	(KZERO-BY2PG)		/* byte just beyond user stack */
322*f43f8ee6SDavid du Colombier #define	USTKSIZE (8*1024*1024)		/* size of user stack */
323*f43f8ee6SDavid du Colombier #define TSTKTOP (KSEG2+USTKSIZE-BY2PG)	/* top of temporary stack */
324*f43f8ee6SDavid du Colombier #define TSTKSIZ (1024*1024/BY2PG)	/* can be at most UTSKSIZE/BY2PG */
325*f43f8ee6SDavid du Colombier #define	KZERO	KSEG0			/* base of kernel address space */
326*f43f8ee6SDavid du Colombier #define	KTZERO	(KZERO+0x20000)		/* first address in kernel text */
327*f43f8ee6SDavid du Colombier #define MEMSIZE	(256*MB)		/* fixed memory on routerboard */
328*f43f8ee6SDavid du Colombier #define PCIMEM	0x10000000		/* on rb450g */
329