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