1 #include "../port/portfns.h" 2 3 Dirtab* addarchfile(char*, int, long(*)(Chan*, void*, long, vlong), 4 long(*)(Chan*, void*, long, vlong)); 5 extern void archreboot(void); 6 extern void archreset(void); 7 extern void armtimerset(int); 8 extern void cachedwb(void); 9 extern void cachedwbinv(void); 10 extern void cachedinvse(void*, int); 11 extern void cachedwbse(void*, int); 12 extern void cachedwbinvse(void*, int); 13 extern void cachedwbtlb(void*, int); 14 extern void cacheiinv(void); 15 extern void cacheiinvse(void*, int); 16 extern void cacheuwbinv(void); 17 extern uintptr cankaddr(uintptr pa); 18 extern int cas32(void*, u32int, u32int); 19 extern int cas(ulong*, ulong, ulong); 20 extern void checkmmu(uintptr, uintptr); 21 extern void clockinit(void); 22 extern void clockshutdown(void); 23 extern int cmpswap(long*, long, long); 24 extern void coherence(void); 25 extern u32int cpidget(void); 26 extern u32int cprdcpaccess(void); 27 extern u32int cprdfeat1(void); 28 extern void cpuidprint(void); 29 extern char *cputype2name(char *buf, int size); 30 extern void cpwrcpaccess(u32int); 31 extern void cpwrtimerphysctl(u32int); 32 extern void cpwrtimerphysval(u32int); 33 #define cycles(ip) *(ip) = lcycles() 34 extern uintptr dmaaddr(void *va); 35 extern void dmastart(int, int, int, void*, void*, int); 36 extern int dmawait(int); 37 extern int fbblank(int); 38 extern void* fbinit(int, int*, int*, int*); 39 extern u32int farget(void); 40 extern void fpon(void); 41 extern ulong fprdexc(void); 42 extern ulong fprdscr(void); 43 extern ulong fprdsid(void); 44 extern void fpwrexc(ulong); 45 extern void fpwrscr(ulong); 46 extern void fprestreg(int fpreg, uvlong val); 47 extern void fprestregs(uvlong*, int); 48 extern void fpsave(FPsave *); 49 extern ulong fpsavereg(int fpreg, uvlong *fpp); 50 extern void fpsaveregs(uvlong*, int); 51 extern u32int fsrget(void); 52 extern uint getboardrev(void); 53 extern ulong getclkrate(int); 54 extern char* getconf(char*); 55 extern uint getcputemp(void); 56 extern char *getethermac(void); 57 extern uint getfirmware(void); 58 extern int getncpus(void); 59 extern int getpower(int); 60 extern void getramsize(Confmem*); 61 extern void gpiosel(uint, int); 62 extern void gpiopullup(uint); 63 extern void gpiopulloff(uint); 64 extern void gpiopulldown(uint); 65 extern void gpioout(uint, int); 66 extern int gpioin(uint); 67 extern void i2csetup(int); 68 extern long i2crecv(I2Cdev*, void*, long, ulong); 69 extern long i2csend(I2Cdev*, void*, long, ulong); 70 extern u32int ifsrget(void); 71 extern void irqenable(int, void (*)(Ureg*, void*), void*); 72 #define intrenable(i, f, a, b, n) irqenable((i), (f), (a)) 73 extern void intrcpushutdown(void); 74 extern void intrshutdown(void); 75 extern void intrsoff(void); 76 extern int isaconfig(char*, int, ISAConf*); 77 extern int l2ap(int); 78 extern void l2cacheuwbinv(void); 79 extern void links(void); 80 extern void mmuinit(void*); 81 extern void mmuinit1(void); 82 extern void mmuinvalidate(void); 83 extern void mmuinvalidateaddr(u32int); 84 extern void okay(int); 85 extern void procrestore(Proc *); 86 extern void procsave(Proc*); 87 extern void procsetup(Proc*); 88 extern void screeninit(void); 89 #define sdfree(p) free(p) 90 #define sdmalloc(n) mallocalign(n, BLOCKALIGN, 0, 0) 91 extern void setclkrate(int, ulong); 92 extern void setpower(int, int); 93 extern void setr13(int, u32int*); 94 extern void sev(void); 95 extern void spiclock(uint); 96 extern void spimode(int); 97 extern void spirw(uint, void*, int); 98 extern int splfhi(void); 99 extern int splflo(void); 100 extern void swcursorinit(void); 101 extern void syscallfmt(int syscallno, ulong pc, va_list list); 102 extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 103 extern int startcpus(uint); 104 extern void stopcpu(uint); 105 extern int tas(void *); 106 extern void touser(uintptr); 107 extern void trapinit(void); 108 extern void uartconsinit(void); 109 extern int userureg(Ureg*); 110 extern void vectors(void); 111 extern void vgpinit(void); 112 extern void vgpset(uint, int); 113 extern void vtable(void); 114 extern void wdogoff(void); 115 extern void wdogfeed(void); 116 extern int xhcireset(int devaddr); 117 118 /* 119 * floating point emulation 120 */ 121 extern int fpiarm(Ureg*); 122 extern int fpudevprocio(Proc*, void*, long, uintptr, int); 123 extern void fpuinit(void); 124 extern void fpunoted(void); 125 extern void fpunotify(Ureg*); 126 extern void fpuprocrestore(Proc*); 127 extern void fpuprocsave(Proc*); 128 extern void fpusysprocsetup(Proc*); 129 extern void fpusysrfork(Ureg*); 130 extern void fpusysrforkchild(Proc*, Ureg*, Proc*); 131 extern int fpuemu(Ureg*); 132 /* 133 * Miscellaneous machine dependent stuff. 134 */ 135 extern char* getenv(char*, char*, int); 136 uintptr mmukmap(uintptr, uintptr, usize); 137 uintptr mmukmapx(uintptr, uvlong, usize); 138 uintptr mmukunmap(uintptr, uintptr, usize); 139 extern void* mmuuncache(void*, usize); 140 extern void* ucalloc(usize); 141 extern Block* ucallocb(int); 142 extern void* ucallocalign(usize size, int align, int span); 143 extern void ucfree(void*); 144 extern void ucfreeb(Block*); 145 /* 146 * Things called from port. 147 */ 148 extern void delay(int); /* only scheddump() */ 149 extern int islo(void); 150 extern void microdelay(int); /* only edf.c */ 151 extern void idlehands(void); 152 extern void setkernur(Ureg*, Proc*); /* only devproc.c */ 153 extern void* sysexecregs(uintptr, ulong, int); 154 extern void sysprocsetup(Proc*); 155 extern void validalign(uintptr, unsigned); 156 157 extern void kexit(Ureg*); 158 159 #define getpgcolor(a) 0 160 #define kmapinval() 161 #define countpagerefs(a, b) 162 163 #define PTR2UINT(p) ((uintptr)(p)) 164 #define UINT2PTR(i) ((void*)(i)) 165 166 #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 167 168 #define KADDR(pa) UINT2PTR(KZERO | ((uintptr)(pa) & ~KSEGM)) 169 #define PADDR(va) PTR2UINT(PHYSDRAM | ((uintptr)(va) & ~KSEGM)) 170 171 #define MASK(v) ((1UL << (v)) - 1) /* mask `v' bits wide */ 172