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