summaryrefslogtreecommitdiff
path: root/os/js/mem.h
blob: f17c178277debe4ff9fc2953f9efe47253eda95f (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
148
149
/*
 * 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	MAXMACH		1			/* max # cpus system can run */

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

/*
 * PSR bits
 */
#define	PSREC		0x00002000
#define	PSREF		0x00001000
#define PSRSUPER	0x00000080
#define PSRPSUPER	0x00000040
#define	PSRET		0x00000020
#define SPL(n)		(n<<8)

/*
 * Magic registers
 */

#define	MACH		6		/* R6 is m-> */
#define	USER		5		/* R5 is u-> */

/*
 * Fundamental addresses
 */

#define	USERADDR	0xE0000000
#define	UREGADDR	(USERADDR+BY2PG-((32+6)*BY2WD))
#define	BOOTSTACK	(KTZERO-0*BY2PG)
#define	TRAPS		(KTZERO-2*BY2PG)

/*
 * Reference MMU registers (ASI 4)
 */
#define	PCR		0x000
#define	CTPR		0x100
#define	CXR		0x200
#define	SFSR		0x300
#define	SFAR		0x400

/*
 * Processor Control Register
 */
#define	ITBRDISABLE	(1<<16)
#define	BOOTMODE	(1<<14)	/* `must be cleared for normal operation' */
#define	MEMPCHECK	(1<<12)	/* check parity */
#define	ENABCACHE	(3<<8)	/* I & D caches */
#define	NOFAULT		(1<<1)	/* no fault */

/*
 * special MMU regions
 *	DMA segment for SBus DMA mapping via I/O MMU (hardware fixes location)
 *	the frame buffer is mapped as one MMU region (16 Mbytes)
 *	IO segments for device register pages etc.
 */
#define	DMARANGE	0
#define	DMASEGSIZE	((16*MB)<<DMARANGE)
#define	DMASEGBASE	(0 - DMASEGSIZE)
#define	FBSEGSIZE	(1*(16*MB))	 /* multiples of 16*MB */
#define	FBSEGBASE	(DMASEGBASE - DMASEGSIZE)
#define	IOSEGSIZE	(16*MB)
#define	IOSEGBASE	(FBSEGBASE - IOSEGSIZE)

/*
 * MMU entries
 */
#define	PTPVALID	1	/* page table pointer */
#define	PTEVALID	2	/* page table entry */
#define	PTERONLY	(2<<2)	/* read/execute */
#define	PTEWRITE	(3<<2)	/* read/write/execute */
#define	PTEKERNEL	(4<<2)	/* execute only */
#define	PTENOCACHE	(0<<7)
#define	PTECACHE	(1<<7)
#define	PTEACCESS	(1<<5)
#define	PTEMODIFY	(1<<6)
#define	PTEMAINMEM	0
#define	PTEIO		0
#define PTEPROBEMEM	(PTEVALID|PTEKERNEL|PTENOCACHE|PTEWRITE|PTEMAINMEM)
#define PTEUNCACHED	PTEACCESS	/* use as software flag for putmmu */

#define	NTLBPID		64	/* limited by microsparc hardware contexts */

#define PTEMAPMEM	(1024*1024)	
#define	PTEPERTAB	(PTEMAPMEM/BY2PG)
#define SEGMAPSIZE	128

#define	INVALIDPTE	0
#define	PPN(pa)		(((ulong)(pa)>>4)&0x7FFFFF0)
#define	PPT(pn)		((ulong*)KADDR((((ulong)(pn)&~0xF)<<4)))

/*
 * Virtual addresses
 */
#define	VTAG(va)	((va>>22)&0x03F)
#define	VPN(va)		((va>>13)&0x1FF)

/*
 * Address spaces
 */
#define	KZERO	0xE0000000		/* base of kernel address space */
#define	KTZERO	(KZERO+4*BY2PG)		/* first address in kernel text */
#define KSTACK	8192			/* size of kernel stack */

#define	MACHSIZE	4096

/*
 * control registers in physical address space (ASI 20)
 */
#define	IOCR		0x10000000	/* IO MMU control register */
#define	IBAR		0x10000004	/* IO MMU page table base address */
#define	AFR		0x10000018	/* address flush register */
#define	AFSR		0x10001000	/* asynch fault status */
#define	AFAR		0x10001004	/* asynch fault address */
#define	SSCR(i)		(0x10001010+(i)*4)	/* Sbus slot i config register */
#define	MFSR		0x10001020	/* memory fault status register */
#define	MFAR		0x10001024	/* memory fault address register */
#define	MID		0x10002000	/* sbus arbitration enable */

#define	SYSCTL		0x71F00000	/* system control & reset register */
#define	PROCINTCLR	0x71E00004	/* clear pending processor interrupts */

/*
 * IO MMU page table entry
 */
#define	IOPTEVALID	(1<<1)
#define	IOPTEWRITE	(1<<2)