1 #define checkmmu(a, b) 2 #define countpagerefs(a, b) 3 4 #include "../port/portfns.h" 5 6 typedef struct Ether Ether; 7 struct Ether; 8 9 extern int led(int, int); 10 extern void ledexit(int); 11 extern void delay(int); 12 extern void _uartputs(char*, int); 13 extern int _uartprint(char*, ...); 14 15 #pragma varargck argpos _uartprint 1 16 17 extern long ainc(long *); 18 extern long adec(long *); 19 extern void allcacheinfo(Memcache *); 20 extern void allcacheson(void); 21 extern int archether(unsigned, Ether *); 22 extern void archreboot(void); 23 extern void archreset(void); 24 extern void cachedinv(void); 25 extern void cachedinvse(void*, int); 26 extern void cachedwb(void); 27 extern void cachedwbinv(void); 28 extern void cachedwbinvse(void*, int); 29 extern void cachedwbse(void*, int); 30 extern void cacheiinv(void); 31 extern void cacheuwbinv(void); 32 extern uintptr cankaddr(uintptr pa); 33 extern void chkmissing(void); 34 extern void clockprod(Ureg *); 35 extern void clockshutdown(void); 36 extern int cmpswap(long*, long, long); 37 extern void coherence(void); 38 extern void configscreengpio(void); 39 extern u32int controlget(void); 40 extern void cortexa9cachecfg(void); 41 extern u32int cpctget(void); 42 extern u32int cpidget(void); 43 extern ulong cprd(int cp, int op1, int crn, int crm, int op2); 44 extern ulong cprdsc(int op1, int crn, int crm, int op2); 45 extern void cpuidprint(void); 46 extern char *cputype2name(char *buf, int size); 47 extern void cpwr(int cp, int op1, int crn, int crm, int op2, ulong val); 48 extern void cpwrsc(int op1, int crn, int crm, int op2, ulong val); 49 #define cycles(vlp) *(vlp) = (ulong)lcycles() 50 extern u32int dacget(void); 51 extern void dacput(u32int); 52 extern void dmainit(void); 53 extern int dmastart(void *, int, void *, int, uint, Rendez *, int *); 54 extern void dmatest(void); 55 extern void dump(void *vaddr, int words); 56 extern u32int farget(void); 57 extern void fpclear(void); 58 extern void fpoff(void); 59 extern void fpon(void); 60 extern ulong fprd(int fpreg); 61 extern void fprestreg(int fpreg, uvlong val); 62 extern void fpsave(FPsave *); 63 extern ulong fpsavereg(int fpreg, uvlong *fpp); 64 extern void fpwr(int fpreg, ulong val); 65 extern u32int fsrget(void); 66 extern ulong getauxctl(void); 67 extern ulong getclvlid(void); 68 extern ulong getcyc(void); 69 extern int getncpus(void); 70 extern u32int getpsr(void); 71 extern u32int getscr(void); 72 extern ulong getwayssets(void); 73 extern void intcmask(uint); 74 extern void intcunmask(uint); 75 extern void intrcpu(int); 76 extern void intrcpushutdown(void); 77 extern void intrshutdown(void); 78 extern void intrsoff(void); 79 extern int isaconfig(char*, int, ISAConf*); 80 extern int isdmadone(int); 81 extern void kbdenable(void); 82 extern void l1diag(void); 83 extern void l2pl310init(void); 84 extern void machoff(uint cpu); 85 extern void machon(uint cpu); 86 extern void memdiag(ulong *); 87 extern void mmuidmap(uintptr phys, int mbs); 88 extern void mmuinvalidate(void); /* 'mmu' or 'tlb'? */ 89 extern void mmuinvalidateaddr(u32int); /* 'mmu' or 'tlb'? */ 90 extern void mousectl(Cmdbuf *cb); 91 extern ulong pcibarsize(Pcidev*, int); 92 extern void pcibussize(Pcidev*, ulong*, ulong*); 93 extern int pcicfgr8(Pcidev*, int); 94 extern int pcicfgr16(Pcidev*, int); 95 extern int pcicfgr32(Pcidev*, int); 96 extern void pcicfgw8(Pcidev*, int, int); 97 extern void pcicfgw16(Pcidev*, int, int); 98 extern void pcicfgw32(Pcidev*, int, int); 99 extern void pciclrbme(Pcidev*); 100 extern void pciclrioe(Pcidev*); 101 extern void pciclrmwi(Pcidev*); 102 extern void pcieintrdone(void); 103 extern int pcigetpms(Pcidev*); 104 extern void pcihinv(Pcidev*); 105 extern uchar pciipin(Pcidev*, uchar); 106 extern Pcidev* pcimatch(Pcidev*, int, int); 107 extern Pcidev* pcimatchtbdf(int); 108 extern void pcireset(void); 109 extern void pcisetbme(Pcidev*); 110 extern void pcisetioe(Pcidev*); 111 extern void pcisetmwi(Pcidev*); 112 extern int pcisetpms(Pcidev*, int); 113 extern u32int pidget(void); 114 extern void pidput(u32int); 115 extern void prcachecfg(void); 116 extern vlong probeaddr(uintptr); 117 extern void procrestore(Proc *); 118 extern void procsave(Proc*); 119 extern void procsetup(Proc*); 120 extern void putauxctl(ulong); 121 extern void _reset(void); 122 extern void screenclockson(void); 123 extern void screeninit(void); 124 extern void serialputc(int c); 125 extern void serialputs(char* s, int n); 126 extern void setcachelvl(int); 127 extern void setsp(uintptr); 128 extern void setr13(int, u32int*); 129 extern ulong smpon(void); 130 extern int startcpu(uint); 131 extern void stopcpu(uint); 132 extern int tas(void *); 133 extern void tegclock0init(void); 134 extern void tegclockinit(void); 135 extern void tegclockintr(void); 136 extern void tegclockshutdown(void); 137 extern void tegwdogintr(Ureg *, void *); 138 extern u32int ttbget(void); 139 extern void ttbput(u32int); 140 extern void _vrst(void); 141 extern void wakewfi(void); 142 extern void watchdoginit(void); 143 extern void wfi(void); 144 145 extern int irqenable(uint, void (*)(Ureg*, void*), void*, char*); 146 extern int irqdisable(uint, void (*)(Ureg*, void*), void*, char*); 147 #define intrenable(i, f, a, b, n) irqenable((i), (f), (a), (n)) 148 #define intrdisable(i, f, a, b, n) irqdisable((i), (f), (a), (n)) 149 extern void vectors(void); 150 extern void vtable(void); 151 152 /* 153 * Things called in main. 154 */ 155 extern void archconfinit(void); 156 extern void clockinit(void); 157 extern int i8250console(void); 158 extern void links(void); 159 extern void mmuinit(void); 160 extern void touser(uintptr); 161 extern void trapinit(void); 162 163 164 extern int fpiarm(Ureg*); 165 extern int fpudevprocio(Proc*, void*, long, uintptr, int); 166 extern void fpuinit(void); 167 extern void fpunoted(void); 168 extern void fpunotify(Ureg*); 169 extern void fpuprocrestore(Proc*); 170 extern void fpuprocsave(Proc*); 171 extern void fpusysprocsetup(Proc*); 172 extern void fpusysrfork(Ureg*); 173 extern void fpusysrforkchild(Proc*, Ureg*, Proc*); 174 extern int fpuemu(Ureg*); 175 176 /* 177 * Miscellaneous machine dependent stuff. 178 */ 179 extern int cas(int *, int, int); 180 extern char* getenv(char*, char*, int); 181 char* getconf(char*); 182 uintptr mmukmap(uintptr, uintptr, usize); 183 uintptr mmukunmap(uintptr, uintptr, usize); 184 extern void* mmuuncache(void*, usize); 185 extern void* ucalloc(usize); 186 extern Block* ucallocb(int); 187 extern void* ucallocalign(usize size, int align, int span); 188 extern void ucfree(void*); 189 extern void ucfreeb(Block*); 190 191 /* 192 * Things called from port. 193 */ 194 extern void delay(int); /* only scheddump() */ 195 extern int islo(void); 196 extern void microdelay(int); /* only edf.c */ 197 extern void idlehands(void); 198 extern void setkernur(Ureg*, Proc*); /* only devproc.c */ 199 extern void syscallfmt(int syscallno, ulong pc, va_list list); 200 extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 201 extern void* sysexecregs(uintptr, ulong, int); 202 extern void sysprocsetup(Proc*); 203 extern void validalign(uintptr, unsigned); 204 205 /* libc */ 206 long labs(long); 207 208 /* 209 * PCI stuff. 210 */ 211 212 extern void forkret(void); 213 extern int userureg(Ureg*); 214 void* vmap(uintptr, usize); 215 void vunmap(void*, usize); 216 217 extern void kexit(Ureg*); 218 219 #define getpgcolor(a) 0 220 #define kmapinval() 221 222 #define PTR2UINT(p) ((uintptr)(p)) 223 #define UINT2PTR(i) ((void*)(i)) 224 225 #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 226 227 #define KADDR(pa) UINT2PTR(KZERO | ((uintptr)(pa) & ~KSEGM)) 228 #define PADDR(va) PTR2UINT(PHYSDRAM | ((uintptr)(va) & ~KSEGM)) 229 230 #define MASK(v) ((1UL << (v)) - 1) /* mask `v' bits wide */ 231