xref: /inferno-os/os/boot/rpcg/mem.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth /*
2*74a4d8c2SCharles.Forsyth  * Memory and machine-specific definitions.  Used in C and assembler.
3*74a4d8c2SCharles.Forsyth  */
4*74a4d8c2SCharles.Forsyth 
5*74a4d8c2SCharles.Forsyth /*
6*74a4d8c2SCharles.Forsyth  * Sizes
7*74a4d8c2SCharles.Forsyth  */
8*74a4d8c2SCharles.Forsyth #define	BI2BY		8			/* bits per byte */
9*74a4d8c2SCharles.Forsyth #define BI2WD		32			/* bits per word */
10*74a4d8c2SCharles.Forsyth #define	BY2WD		4			/* bytes per word */
11*74a4d8c2SCharles.Forsyth #define	BY2PG		4096			/* bytes per page */
12*74a4d8c2SCharles.Forsyth #define	WD2PG		(BY2PG/BY2WD)		/* words per page */
13*74a4d8c2SCharles.Forsyth #define	PGSHIFT		12			/* log(BY2PG) */
14*74a4d8c2SCharles.Forsyth #define PGROUND(s)	(((s)+(BY2PG-1))&~(BY2PG-1))
15*74a4d8c2SCharles.Forsyth 
16*74a4d8c2SCharles.Forsyth #define	MAXMACH		1			/* max # cpus system can run */
17*74a4d8c2SCharles.Forsyth #define	CACHELINELOG	4
18*74a4d8c2SCharles.Forsyth #define CACHELINESZ	(1<<CACHELINELOG)
19*74a4d8c2SCharles.Forsyth 
20*74a4d8c2SCharles.Forsyth /*
21*74a4d8c2SCharles.Forsyth  * Time
22*74a4d8c2SCharles.Forsyth  */
23*74a4d8c2SCharles.Forsyth #define	HZ		(50)				/* clock frequency */
24*74a4d8c2SCharles.Forsyth #define	MS2HZ		(1000/HZ)			/* millisec per clock tick */
25*74a4d8c2SCharles.Forsyth #define	TK2SEC(t)	((t)/HZ)			/* ticks to seconds */
26*74a4d8c2SCharles.Forsyth #define	TK2MS(t)	((((ulong)(t))*1000)/HZ)	/* ticks to milliseconds */
27*74a4d8c2SCharles.Forsyth #define	MS2TK(t)	((((ulong)(t))*HZ)/1000)	/* milliseconds to ticks */
28*74a4d8c2SCharles.Forsyth #define	MHz	1000000
29*74a4d8c2SCharles.Forsyth 
30*74a4d8c2SCharles.Forsyth /*
31*74a4d8c2SCharles.Forsyth  * Fundamental values
32*74a4d8c2SCharles.Forsyth  */
33*74a4d8c2SCharles.Forsyth 
34*74a4d8c2SCharles.Forsyth #define	KZERO	0	/* bootstrap runs in real mode */
35*74a4d8c2SCharles.Forsyth #define	MACHSIZE	4096
36*74a4d8c2SCharles.Forsyth 
37*74a4d8c2SCharles.Forsyth /*
38*74a4d8c2SCharles.Forsyth  *  physical MMU
39*74a4d8c2SCharles.Forsyth  */
40*74a4d8c2SCharles.Forsyth #define KSEG0	0x20000000
41*74a4d8c2SCharles.Forsyth #define	KSEGM	0xE0000000	/* mask to check which seg */
42*74a4d8c2SCharles.Forsyth 
43*74a4d8c2SCharles.Forsyth /*
44*74a4d8c2SCharles.Forsyth  * MSR bits
45*74a4d8c2SCharles.Forsyth  */
46*74a4d8c2SCharles.Forsyth 
47*74a4d8c2SCharles.Forsyth #define	POW	0x40000	/* enable power mgmt */
48*74a4d8c2SCharles.Forsyth #define	TGPR	0x20000	/* GPR0-3 remapped; 603/603e specific */
49*74a4d8c2SCharles.Forsyth #define	ILE	0x10000	/* interrupts little endian */
50*74a4d8c2SCharles.Forsyth #define	EE	0x08000	/* enable external/decrementer interrupts */
51*74a4d8c2SCharles.Forsyth #define	PR	0x04000	/* =1, user mode */
52*74a4d8c2SCharles.Forsyth #define	FPE	0x02000	/* enable floating point */
53*74a4d8c2SCharles.Forsyth #define	ME	0x01000	/* enable machine check exceptions */
54*74a4d8c2SCharles.Forsyth #define	FE0	0x00800
55*74a4d8c2SCharles.Forsyth #define	SE	0x00400	/* single-step trace */
56*74a4d8c2SCharles.Forsyth #define	BE	0x00200	/* branch trace */
57*74a4d8c2SCharles.Forsyth #define	FE1	0x00100
58*74a4d8c2SCharles.Forsyth #define	IP	0x00040	/* =0, vector to nnnnn; =1, vector to FFFnnnnn */
59*74a4d8c2SCharles.Forsyth #define	IR	0x00020	/* enable instruction address translation */
60*74a4d8c2SCharles.Forsyth #define	DR	0x00010	/* enable data address translation */
61*74a4d8c2SCharles.Forsyth #define	RI	0x00002	/* exception is recoverable */
62*74a4d8c2SCharles.Forsyth #define	LE	0x00001	/* little endian mode */
63*74a4d8c2SCharles.Forsyth 
64*74a4d8c2SCharles.Forsyth #define	KMSR	(ME|FE0|FE1|FPE)
65*74a4d8c2SCharles.Forsyth #define	UMSR	(KMSR|PR|EE|IR|DR)
66*74a4d8c2SCharles.Forsyth 
67*74a4d8c2SCharles.Forsyth /*
68*74a4d8c2SCharles.Forsyth  * MPC82x addresses
69*74a4d8c2SCharles.Forsyth  */
70*74a4d8c2SCharles.Forsyth #define	BCSRMEM	0xFA400000
71*74a4d8c2SCharles.Forsyth #define	FLASHMEM	0xFFC00000
72*74a4d8c2SCharles.Forsyth #define	INTMEM	0xFA200000
73*74a4d8c2SCharles.Forsyth 
74*74a4d8c2SCharles.Forsyth #define	DPRAM	(INTMEM+0x2000)
75*74a4d8c2SCharles.Forsyth #define	DPLEN1	0x400
76*74a4d8c2SCharles.Forsyth #define	DPLEN2	0x200
77*74a4d8c2SCharles.Forsyth #define	DPLEN3	0x100
78*74a4d8c2SCharles.Forsyth #define	DPBASE	(DPRAM+DPLEN1)
79*74a4d8c2SCharles.Forsyth 
80*74a4d8c2SCharles.Forsyth #define	SCC1P	(INTMEM+0x3C00)
81*74a4d8c2SCharles.Forsyth #define	I2CP	(INTMEM+0x3C80)
82*74a4d8c2SCharles.Forsyth #define	MISCP	(INTMEM+0x3CB0)
83*74a4d8c2SCharles.Forsyth #define	IDMA1P	(INTMEM+0x3CC0)
84*74a4d8c2SCharles.Forsyth #define	SCC2P	(INTMEM+0x3D00)
85*74a4d8c2SCharles.Forsyth #define	SCC3P	(INTMEM+0x3E00)
86*74a4d8c2SCharles.Forsyth #define	SCC4P	(INTMEM+0x3F00)
87*74a4d8c2SCharles.Forsyth #define	SPIP	(INTMEM+0x3D80)
88*74a4d8c2SCharles.Forsyth #define	TIMERP	(INTMEM+0x3DB0)
89*74a4d8c2SCharles.Forsyth #define	SMC1P	(INTMEM+0x3E80)
90*74a4d8c2SCharles.Forsyth #define	DSP1P	(INTMEM+0x3EC0)
91*74a4d8c2SCharles.Forsyth #define	SMC2P	(INTMEM+0x3F80)
92*74a4d8c2SCharles.Forsyth #define	DSP2P	(INTMEM+0x3FC0)
93*74a4d8c2SCharles.Forsyth 
94*74a4d8c2SCharles.Forsyth #define KEEP_ALIVE_KEY 0x55ccaa33	/* clock and rtc register key */
95