1 #define checkmmu(a, b) 2 #define countpagerefs(a, b) 3 4 #include "../port/portfns.h" 5 6 extern int led(int, int); 7 extern void ledexit(int); 8 extern void delay(int); 9 extern void _uartputs(char*, int); 10 extern int _uartprint(char*, ...); 11 12 #pragma varargck argpos _uartprint 1 13 14 extern void archreboot(void); 15 extern void archreset(void); 16 extern void cachedinv(void); 17 extern void cachedinvse(void*, int); 18 extern void cachedwb(void); 19 extern void cachedwbinv(void); 20 extern void cachedwbinvse(void*, int); 21 extern void cachedwbse(void*, int); 22 extern void cacheiinv(void); 23 extern void cacheinfo(int level, Memcache *cp); 24 extern void cacheuwbinv(void); 25 extern uintptr cankaddr(uintptr pa); 26 extern void chkmissing(void); 27 extern void clockshutdown(void); 28 extern int clz(ulong); 29 extern int cmpswap(long*, long, long); 30 extern void coherence(void); 31 extern void configscreengpio(void); 32 extern u32int controlget(void); 33 extern u32int cpctget(void); 34 extern u32int cpidget(void); 35 extern ulong cprd(int cp, int op1, int crn, int crm, int op2); 36 extern ulong cprdsc(int op1, int crn, int crm, int op2); 37 extern void cpuidprint(void); 38 extern void cpwr(int cp, int op1, int crn, int crm, int op2, ulong val); 39 extern void cpwrsc(int op1, int crn, int crm, int op2, ulong val); 40 #define cycles(ip) *(ip) = lcycles() 41 extern u32int dacget(void); 42 extern void dacput(u32int); 43 extern void dmainit(void); 44 extern int dmastart(void *, int, void *, int, uint, Rendez *, int *); 45 extern void dmatest(void); 46 extern u32int farget(void); 47 extern ulong fprd(int fpreg); 48 extern void fpwr(int fpreg, ulong val); 49 extern u32int fsrget(void); 50 extern u32int getscr(void); 51 extern u32int getpsr(void); 52 extern ulong getwayssets(void); 53 extern u32int ifsrget(void); 54 extern void intrsoff(void); 55 extern int isaconfig(char*, int, ISAConf*); 56 extern int isdmadone(int); 57 extern int ispow2(uvlong); 58 extern void kbdenable(void); 59 extern void l2cacheuinv(void); 60 extern void l2cacheuwb(void); 61 extern void l2cacheuwbinv(void); 62 extern void lastresortprint(char *buf, long bp); 63 extern int log2(ulong); 64 extern void machinit(void); 65 extern void mmuidmap(uintptr phys, int mbs); 66 extern void mmuinvalidate(void); /* 'mmu' or 'tlb'? */ 67 extern void mmuinvalidateaddr(u32int); /* 'mmu' or 'tlb'? */ 68 extern void mousectl(Cmdbuf *cb); 69 extern u32int pidget(void); 70 extern void pidput(u32int); 71 extern vlong probeaddr(uintptr); 72 extern void procrestore(Proc *); 73 extern void procsave(Proc*); 74 extern void procsetup(Proc*); 75 extern void _reset(void); 76 extern void screenclockson(void); 77 extern void screeninit(void); 78 extern void serialputs(char* s, int n); 79 extern void setcachelvl(int); 80 extern void setr13(int, u32int*); 81 extern int tas(void *); 82 extern u32int ttbget(void); 83 extern void ttbput(u32int); 84 extern void watchdoginit(void); 85 86 extern int irqenable(int, void (*)(Ureg*, void*), void*, char*); 87 extern int irqdisable(int, void (*)(Ureg*, void*), void*, char*); 88 #define intrenable(i, f, a, b, n) irqenable((i), (f), (a), (n)) 89 #define intrdisable(i, f, a, b, n) irqdisable((i), (f), (a), (n)) 90 extern void vectors(void); 91 extern void vtable(void); 92 93 /* dregs, going away */ 94 extern int inb(int); 95 extern void outb(int, int); 96 97 /* 98 * Things called in main. 99 */ 100 extern void archconfinit(void); 101 extern void clockinit(void); 102 extern int i8250console(void); 103 extern void links(void); 104 extern void mmuinit(void); 105 extern void touser(uintptr); 106 extern void trapinit(void); 107 108 109 extern int fpiarm(Ureg*); 110 extern int fpudevprocio(Proc*, void*, long, uintptr, int); 111 extern void fpuinit(void); 112 extern void fpunoted(void); 113 extern void fpunotify(Ureg*); 114 extern void fpuprocrestore(Proc*); 115 extern void fpuprocsave(Proc*); 116 extern void fpusysprocsetup(Proc*); 117 extern void fpusysrfork(Ureg*); 118 extern void fpusysrforkchild(Proc*, Ureg*, Proc*); 119 extern int fpuemu(Ureg*); 120 121 /* 122 * Miscellaneous machine dependent stuff. 123 */ 124 extern char* getenv(char*, char*, int); 125 char* getconf(char*); 126 uintptr mmukmap(uintptr, uintptr, usize); 127 uintptr mmukunmap(uintptr, uintptr, usize); 128 extern void* mmuuncache(void*, usize); 129 extern void* ucalloc(usize); 130 extern Block* ucallocb(int); 131 extern void* ucallocalign(usize size, int align, int span); 132 extern void ucfree(void*); 133 extern void ucfreeb(Block*); 134 135 /* 136 * Things called from port. 137 */ 138 extern void delay(int); /* only scheddump() */ 139 extern int islo(void); 140 extern void microdelay(int); /* only edf.c */ 141 extern void idlehands(void); 142 extern void setkernur(Ureg*, Proc*); /* only devproc.c */ 143 extern void* sysexecregs(uintptr, ulong, int); 144 extern void sysprocsetup(Proc*); 145 extern void validalign(uintptr, unsigned); 146 147 /* 148 * PCI stuff. 149 */ 150 151 int cas32(void*, u32int, u32int); 152 int tas32(void*); 153 154 #define CASU(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) 155 #define CASV(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) 156 #define CASW(addr, exp, new) cas32((addr), (exp), (new)) 157 #define TAS(addr) tas32(addr) 158 159 extern void forkret(void); 160 extern int userureg(Ureg*); 161 void* vmap(uintptr, usize); 162 void vunmap(void*, usize); 163 164 extern void kexit(Ureg*); 165 166 #define getpgcolor(a) 0 167 #define kmapinval() 168 169 #define PTR2UINT(p) ((uintptr)(p)) 170 #define UINT2PTR(i) ((void*)(i)) 171 172 #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 173 174 #define KADDR(pa) UINT2PTR(KZERO | ((uintptr)(pa) & ~KSEGM)) 175 #define PADDR(va) PTR2UINT(PHYSDRAM | ((uintptr)(va) & ~KSEGM)) 176 177 #define wave(c) *(ulong *)PHYSCONS = (c) 178 179 #define MASK(v) ((1UL << (v)) - 1) /* mask `v' bits wide */ 180