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