blob: da232dda03c593028c2b619f10db772f931890cb (
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
/*
* Memory and machine-specific definitions. Used in C and assembler.
*/
#ifdef ucuconf
#include "ucu.h"
#else
#include "blast.h"
#endif
/*
* Sizes
*/
#define BI2BY 8 /* bits per byte */
#define BI2WD 32 /* bits per word */
#define BY2WD 4 /* bytes per word */
#define BY2V 8 /* bytes per vlong */
#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 BLOCKALIGN CACHELINESZ
#define MHz 1000000
#define BY2PTE 8 /* bytes per pte entry */
#define BY2PTEG 64 /* bytes per pte group */
#define MAXMACH 1 /* max # cpus system can run */
#define MACHSIZE BY2PG
#define KSTACK 4096 /* Size of kernel stack */
/*
* Time
*/
#define HZ 1000 /* clock frequency */
#define TK2SEC(t) ((t)/HZ) /* ticks to seconds */
/*
* Standard PPC Special Purpose Registers (OEA and VEA)
*/
#define DSISR 18
#define DAR 19 /* Data Address Register */
#define DEC 22 /* Decrementer */
#define SDR1 25
#define SRR0 26 /* Saved Registers (exception) */
#define SRR1 27
#define TBRL 268
#define TBRU 269 /* Time base Upper/Lower (Reading) */
#define SPRG0 272 /* Supervisor Private Registers */
#define SPRG1 273
#define SPRG2 274
#define SPRG3 275
#define SPRG4 276
#define SPRG5 277
#define SPRG6 278
#define SPRG7 279
#define ASR 280 /* Address Space Register */
#define EAR 282 /* External Access Register (optional) */
#define TBWU 284 /* Time base Upper/Lower (Writing) */
#define TBWL 285
#define PVR 287 /* Processor Version */
#define IABR 1010 /* Instruction Address Breakpoint Register (optional) */
#define DABR 1013 /* Data Address Breakpoint Register (optional) */
#define FPECR 1022 /* Floating-Point Exception Cause Register (optional) */
#define PIR 1023 /* Processor Identification Register (optional) */
#define IBATU(i) (528+2*(i)) /* Instruction BAT register (upper) */
#define IBATL(i) (529+2*(i)) /* Instruction BAT register (lower) */
#define DBATU(i) (536+2*(i)) /* Data BAT register (upper) */
#define DBATL(i) (537+2*(i)) /* Data BAT register (lower) */
/*
* PPC604e-specific Special Purpose Registers (OEA)
*/
#define MMCR0 952 /* Monitor Control Register 0 */
#define PMC1 953 /* Performance Monitor Counter 1 */
#define PMC2 954 /* Performance Monitor Counter 2 */
#define SIA 955 /* Sampled Instruction Address */
#define MMCR1 956 /* Monitor Control Register 0 */
#define PMC3 957 /* Performance Monitor Counter 3 */
#define PMC4 958 /* Performance Monitor Counter 4 */
#define SDA 959 /* Sampled Data Address */
/*
* PPC603e-specific Special Purpose Registers
*/
#define DMISS 976 /* Data Miss Address Register */
#define DCMP 977 /* Data Miss Address Register */
#define HASH1 978
#define HASH2 979
#define IMISS 980 /* Instruction Miss Address Register */
#define iCMP 981 /* Instruction Miss Address Register */
#define RPA 982
#define HID0 1008 /* Hardware Implementation Dependent Register 0 */
#define HID1 1009 /* Hardware Implementation Dependent Register 1 */
/*
* PowerQUICC II (MPC 8260) Special Purpose Registers
*/
#define HID2 1011 /* Hardware Implementation Dependent Register 2 */
#define BIT(i) (1<<(31-(i))) /* Silly backwards register bit numbering scheme */
#define SBIT(n) ((ushort)1<<(15-(n)))
#define RBIT(b,n) (1<<(8*sizeof(n)-1-(b)))
/*
* Bit encodings for Machine State Register (MSR)
*/
#define MSR_POW BIT(13) /* Enable Power Management */
#define MSR_TGPR BIT(14) /* Temporary GPR Registers in use (603e) */
#define MSR_ILE BIT(15) /* Interrupt Little-Endian enable */
#define MSR_EE BIT(16) /* External Interrupt enable */
#define MSR_PR BIT(17) /* Supervisor/User privilege */
#define MSR_FP BIT(18) /* Floating Point enable */
#define MSR_ME BIT(19) /* Machine Check enable */
#define MSR_FE0 BIT(20) /* Floating Exception mode 0 */
#define MSR_SE BIT(21) /* Single Step (optional) */
#define MSR_BE BIT(22) /* Branch Trace (optional) */
#define MSR_FE1 BIT(23) /* Floating Exception mode 1 */
#define MSR_IP BIT(25) /* Exception prefix 0x000/0xFFF */
#define MSR_IR BIT(26) /* Instruction MMU enable */
#define MSR_DR BIT(27) /* Data MMU enable */
#define MSR_PM BIT(29) /* Performance Monitor marked mode (604e specific) */
#define MSR_RI BIT(30) /* Recoverable Exception */
#define MSR_LE BIT(31) /* Little-Endian enable */
/* SRR1 bits for TLB operations */
#define MSR_SR0 0xf0000000 /* Saved bits from CR register */
#define MSR_KEY BIT(12) /* Copy of Ks or Kp bit */
#define MSR_IMISS BIT(13) /* It was an I miss */
#define MSR_WAY BIT(14) /* TLB set to be replaced */
#define MSR_STORE BIT(15) /* Miss caused by a store */
/*
* 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
#define CFPU 0x08
#define CDEC 0x09
#define CSYSCALL 0x0C
#define CTRACE 0x0D /* optional */
#define CFPA 0x0E /* not implemented in 603e */
/* PPC603e-specific: */
#define CIMISS 0x10 /* Instruction TLB miss */
#define CLMISS 0x11 /* Data load TLB miss */
#define CSMISS 0x12 /* Data store TLB miss */
#define CIBREAK 0x13
#define CSMI 0x14
/*
* Magic registers
*/
#define MACH 30 /* R30 is m-> */
#define USER 29 /* R29 is up-> */
/*
* virtual MMU
*/
#define PTEMAPMEM (1024*1024)
#define PTEPERTAB (PTEMAPMEM/BY2PG)
#define SEGMAPSIZE 1984
#define SSEGMAPSIZE 16
#define PPN(x) ((x)&~(BY2PG-1))
/*
* First pte word
*/
#define PTE0(v, vsid, h, va) (((v)<<31)|((vsid)<<7)|((h)<<6)|(((va)>>22)&0x3f))
/*
* Second pte word; WIMG & PP(RW/RO) common to page table and BATs
*/
#define PTE1_R BIT(23)
#define PTE1_C BIT(24)
#define PTE1_W BIT(25)
#define PTE1_I BIT(26)
#define PTE1_M BIT(27)
#define PTE1_G BIT(28)
#define PTE1_RW BIT(30)
#define PTE1_RO BIT(31)
/* HID0 register bits */
#define HID_ICE BIT(16)
#define HID_DCE BIT(17)
#define HID_ILOCK BIT(18)
#define HID_DLOCK BIT(19)
#define HID_ICFI BIT(20)
#define HID_DCFI BIT(21)
#define HID_IFEM BIT(24)
/*
* Address spaces
*/
#define KZERO 0x80000000 /* base of kernel address space */
#define KTZERO 0x80100000 /* first address in kernel text */
#define UZERO 0 /* base of user address space */
#define UTZERO (UZERO+BY2PG) /* first address in user text */
#define USTKTOP KZERO /* byte just beyond user stack */
#define USTKSIZE (4*1024*1024) /* size of user stack */
#define UREGSIZE ((8+40)*4)
#define MACHADDR (KTZERO-MAXMACH*MACHSIZE)
#define MACHPADDR (MACHADDR&~KZERO)
#define MACHP(n) ((Mach *)(MACHADDR+(n)*MACHSIZE))
#define isphys(x) (((ulong)x&KZERO)!=0)
/*
* MPC8xx addresses
*/
#define INTMEM 0xf0000000
#define IOMEM (INTMEM+0x10000)
#define getpgcolor(a) 0
|