blob: 61296039101937a431736d5559c32e2f352d804c (
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
|
/*
* 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 BIT(n) (1<<n)
#define BITS(a,b) ((1<<(b+1))-(1<<a))
#define MAXMACH 1 /* max # cpus system can run */
/*
* Time
*/
#define HZ (100) /* clock frequency */
#define MS2HZ (1000/HZ) /* millisec per clock tick */
#define TK2SEC(t) ((t)/HZ) /* ticks to seconds */
#define MS2TK(t) ((t)/MS2HZ) /* milliseconds to ticks */
/*
* More accurate time
*/
#define CLOCKFREQ 25000000
#define MS2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000))
#define US2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000000))
/*
* Address spaces
* nearly everything maps 1-1 with physical addresses
* 0 to 1Mb is not mapped
* cache strategy varies as needed (see mmu.c)
*/
#define KZERO 0xC0000000
#define MACHADDR (KZERO+0x00001000)
#define KTTB (KZERO+0x00004000)
#define KTZERO (KZERO+0x00008010)
#define KSTACK 8192 /* Size of kernel stack */
#define FLASHMEM 0x50000000 /* map flash to otherwise unused virtual space */
#define UCDRAMZERO (KZERO+0x08000000) /* base of memory doubly-mapped as uncached */
#define AIVECADDR 0xFFFF0000 /* alternative interrupt vector address (other is 0) */
/*
* Physical addresses
*/
#define PHYSDRAM0 0x00000000 /* where firmware puts it */
#define PHYSFLASH0 0x02800000 /* where firmware puts it */
#define PHYSSCRINIT 0x03FF0000 /* address at reset */
#define PHYSSCR PHYSSCRINIT /* where it ends up after manga firmware */
#define PHYSBRIDGE (PHYSSCR+0x2000) /* PCI-AHB bridge configuration */
#define PHYSMEMCR (PHYSSCR+0x4000) /* memory controller interface */
#define PHYSWANDMA (PHYSSCR+0x6000) /* WAN DMA registers */
#define PHYSLANDMA (PHYSSCR+0x8000) /* LAN DMA registers */
#define PHYSUART (PHYSSCR+0xE000)
#define PHYSINTR (PHYSSCR+0xE200) /* interrupt controller */
#define PHYSTIMER (PHYSSCR+0xE400) /* timer registers */
#define PHYSGPIO (PHYSSCR+0xE600)
#define PHYSSWITCH (PHYSSCR+0xE800) /* switch engine configuration */
#define PHYSMISC (PHYSSCR+0xEA00) /* ``miscellaneous'' registers */
#define PHYSPCIBRIDGE 0x80000000 /* physical address that maps to PCI 0 */
#define PHYSPCIIO 0x10000000 /* physical address that maps to PCI I/O space */
#define CACHELINELOG 5
#define CACHELINESZ (1<<CACHELINELOG)
#define CACHESIZE (8*1024) /* I & D caches are the same size, 4 segment, 64-way associative */
/*
* PSR
*/
#define PsrMusr 0x10 /* mode */
#define PsrMfiq 0x11
#define PsrMirq 0x12
#define PsrMsvc 0x13
#define PsrMabt 0x17
#define PsrMund 0x1B
#define PsrMsys 0x1F
#define PsrMask 0x1F
#define PsrDfiq 0x00000040 /* disable FIQ interrupts */
#define PsrDirq 0x00000080 /* disable IRQ interrupts */
#define PsrV 0x10000000 /* overflow */
#define PsrC 0x20000000 /* carry/borrow/extend */
#define PsrZ 0x40000000 /* zero */
#define PsrN 0x80000000 /* negative/less than */
/*
* Internal MMU coprocessor registers (ARM 922)
*/
#define CpCPUID 0 /* R: opcode_2 is 0*/
#define CpCacheID 0 /* R: opcode_2 is 1 */
#define CpControl 1 /* R/W: control (opcode_2 is 0) */
#define CpTTB 2 /* R/W: translation table base */
#define CpDAC 3 /* R/W: domain access control */
#define CpFSR 5 /* R/W: fault status */
#define CpFAR 6 /* R/W: fault address */
#define CpCacheCtl 7 /* W: */
#define CpTLBops 8 /* W: TLB operations */
#define CpCacheLk 9 /* W: cache lock down */
#define CpPID 13 /* R/W: Process ID Virtual Mapping */
#define CpTest 15 /* R/W: test configuration */
/*
* Coprocessors
*/
#define CpMMU 15
/*
* CpControl bits
*/
#define CpCmmu (1<<0) /* M: MMU enable */
#define CpCalign (1<<1) /* A: alignment fault enable */
#define CpCDcache (1<<2) /* C: data cache on */
#define CpCwpd (15<<3) /* W, P, D, must be one */
#define CpCbe (1<<7) /* B: big-endian operation */
#define CpCsystem (1<<8) /* S: system permission */
#define CpCrom (1<<9) /* R: ROM permission */
#define CpCIcache (1<<12) /* I: Instruction Cache on */
#define CpCaltivec (1<<13) /* X: exception vector relocation */
#define CpCrrobin (1<<14) /* RR: round robin replacement */
#define CpCnotFast (1<<30) /* nF: notFastBus select */
#define CpCasync (1<<31) /* iA: asynchronous clock select */
|