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
|
#include "../port/portfns.h"
#define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
/* l.s */
extern void sev(void);
extern int tas(void *);
extern int cmpswap(long*, long, long);
extern void coherence(void);
extern void idlehands(void);
extern uvlong cycles(void);
extern int splfhi(void);
extern void splflo(void);
extern void touser(uintptr sp);
extern void forkret(void);
extern void noteret(void);
extern void returnto(void*);
extern void fpsaveregs(void*);
extern void fploadregs(void*);
extern void setttbr(uintptr pa);
extern uintptr getfar(void);
extern void flushasidva(uintptr asidva);
extern void tlbivae1is(uintptr asidva);
extern void flushasidvall(uintptr asidva);
extern void tlbivale1is(uintptr asidva);
extern void flushasid(uintptr asid);
extern void tlbiaside1is(uintptr asid);
extern void flushtlb(void);
extern void tlbivmalle1(void);
extern void flushlocaltlb(void);
extern void tlbivmalle1(void);
/* cache */
extern ulong cachesize(int level);
extern void cacheiinvse(void*, int);
extern void cacheuwbinv(void);
extern void cacheiinv(void);
extern void cachedwbse(void*, int);
extern void cacheduwbse(void*, int);
extern void cachedinvse(void*, int);
extern void cachedwbinvse(void*, int);
extern void cachedwb(void);
extern void cachedinv(void);
extern void cachedwbinv(void);
extern void l2cacheuwb(void);
extern void l2cacheuinv(void);
extern void l2cacheuwbinv(void);
/* mmu */
#define getpgcolor(a) 0
extern uintptr paddr(void*);
#define PADDR(a) paddr((void*)(a))
extern uintptr cankaddr(uintptr);
extern void* kaddr(uintptr);
#define KADDR(a) kaddr(a)
extern void kmapinval(void);
#define VA(k) ((uintptr)(k))
extern KMap *kmap(Page*);
extern void kunmap(KMap*);
extern uintptr mmukmap(uintptr, uintptr, usize);
extern void* vmap(uvlong, int);
extern void vunmap(void*, int);
extern void mmu0init(uintptr*);
extern void mmu0clear(uintptr*);
extern void mmuidmap(uintptr*);
extern void mmu1init(void);
extern void meminit(void);
extern void putasid(Proc*);
/* clock */
extern void clockinit(void);
extern void synccycles(void);
extern void armtimerset(int);
extern void clockshutdown(void);
/* fpu */
extern void fpuinit(void);
extern void fpoff(void);
extern void fpinit(void);
extern void fpclear(void);
extern void fpsave(FPsave*);
extern void fprestore(FPsave*);
extern void mathtrap(Ureg*);
/* trap */
extern void trapinit(void);
extern int userureg(Ureg*);
extern void evenaddr(uintptr);
extern void setkernur(Ureg*, Proc*);
extern void procfork(Proc*);
extern void procsetup(Proc*);
extern void procsave(Proc*);
extern void procrestore(Proc *);
extern void trap(Ureg*);
extern void syscall(Ureg*);
extern void noted(Ureg*, ulong);
extern void faultarm64(Ureg*);
extern void dumpstack(void);
extern void dumpregs(Ureg*);
/* irq */
extern void intrcpushutdown(void);
extern void intrsoff(void);
extern void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
extern void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*);
extern int irq(Ureg*);
extern void fiq(Ureg*);
/* sysreg */
extern uvlong sysrd(ulong);
extern void syswr(ulong, uvlong);
/* gpio */
extern void gpiosel(uint, int);
extern void gpiopull(uint, int);
extern void gpiopullup(uint);
extern void gpiopulloff(uint);
extern void gpiopulldown(uint);
extern void gpioout(uint, int);
extern int gpioin(uint);
extern void gpioselevent(uint, int, int);
extern int gpiogetevent(uint);
extern void gpiomeminit(void);
/* arch */
extern void archreboot(void);
extern char *cputype2name(char*, int);
extern void cpuidprint(void);
extern void uartconsinit(void);
extern void links(void);
extern int getncpus(void);
extern int startcpu(uint);
extern void okay(int);
extern void wdogoff(void);
/* devarch */
Dirtab* addarchfile(char*, int, long(*)(Chan*, void*, long, vlong),
long(*)(Chan*, void*, long, vlong));
/* dma */
extern uintptr dmaaddr(void*);
extern void dmaflush(int, void*, ulong);
extern void dmastart(int, int, int, void*, void*, int);
extern int dmawait(int);
/* vcore */
extern void* fbinit(int set, int *width, int *height, int *depth);
extern int fbblank(int blank);
extern void setpower(int dev, int on);
extern int getpower(int dev);
extern char* getethermac(void);
extern uint getboardrev(void);
extern uint getfirmware(void);
extern void getramsize(Confmem *mem);
extern ulong getclkrate(int clkid);
extern void setclkrate(int clkid, ulong hz);
extern uint getcputemp(void);
extern void vgpinit(void);
extern void vgpset(uint port, int on);
extern void egpset(uint port, int on);
extern int xhcireset(int devaddr);
/* bootargs */
extern void bootargsinit(uintptr);
extern char *getconf(char *name);
extern void setconfenv(void);
extern void writeconf(void);
/* screen */
extern void screeninit(void);
extern int isaconfig(char*, int, ISAConf*);
/* pcibcm */
extern int pcicfgrw8(int tbdf, int rno, int data, int read);
extern int pcicfgrw16(int tbdf, int rno, int data, int read);
extern int pcicfgrw32(int tbdf, int rno, int data, int read);
extern void pciintrenable(int tbdf, void (*f)(Ureg*, void*), void *a);
extern void pciintrdisable(int tbdf, void (*f)(Ureg*, void*), void *a);
|