15d9de2d3SDavid du Colombier #include "../port/portfns.h" 25d9de2d3SDavid du Colombier 35d9de2d3SDavid du Colombier Dirtab* addarchfile(char*, int, long(*)(Chan*, void*, long, vlong), 45d9de2d3SDavid du Colombier long(*)(Chan*, void*, long, vlong)); 55d9de2d3SDavid du Colombier extern void archreboot(void); 65d9de2d3SDavid du Colombier extern void archreset(void); 75d9de2d3SDavid du Colombier extern void armtimerset(int); 8*5c47fe09SDavid du Colombier extern void cachedwb(void); 95d9de2d3SDavid du Colombier extern void cachedwbinv(void); 10*5c47fe09SDavid du Colombier extern void cachedinvse(void*, int); 115d9de2d3SDavid du Colombier extern void cachedwbse(void*, int); 125d9de2d3SDavid du Colombier extern void cachedwbinvse(void*, int); 13*5c47fe09SDavid du Colombier extern void cachedwbtlb(void*, int); 145d9de2d3SDavid du Colombier extern void cacheiinv(void); 15*5c47fe09SDavid du Colombier extern void cacheiinvse(void*, int); 165d9de2d3SDavid du Colombier extern void cacheuwbinv(void); 175d9de2d3SDavid du Colombier extern uintptr cankaddr(uintptr pa); 185d9de2d3SDavid du Colombier extern int cas32(void*, u32int, u32int); 19*5c47fe09SDavid du Colombier extern int cas(ulong*, ulong, ulong); 205d9de2d3SDavid du Colombier extern void checkmmu(uintptr, uintptr); 215d9de2d3SDavid du Colombier extern void clockinit(void); 225d9de2d3SDavid du Colombier extern void clockshutdown(void); 235d9de2d3SDavid du Colombier extern int cmpswap(long*, long, long); 245d9de2d3SDavid du Colombier extern void coherence(void); 25*5c47fe09SDavid du Colombier extern u32int cpidget(void); 26*5c47fe09SDavid du Colombier extern u32int cprdcpaccess(void); 27*5c47fe09SDavid du Colombier extern u32int cprdfeat1(void); 285d9de2d3SDavid du Colombier extern void cpuidprint(void); 29*5c47fe09SDavid du Colombier extern char *cputype2name(char *buf, int size); 30*5c47fe09SDavid du Colombier extern void cpwrcpaccess(u32int); 31*5c47fe09SDavid du Colombier extern void cpwrtimerphysctl(u32int); 32*5c47fe09SDavid du Colombier extern void cpwrtimerphysval(u32int); 335d9de2d3SDavid du Colombier #define cycles(ip) *(ip) = lcycles() 34*5c47fe09SDavid du Colombier extern uintptr dmaaddr(void *va); 355d9de2d3SDavid du Colombier extern void dmastart(int, int, int, void*, void*, int); 365d9de2d3SDavid du Colombier extern int dmawait(int); 375d9de2d3SDavid du Colombier extern int fbblank(int); 385d9de2d3SDavid du Colombier extern void* fbinit(int, int*, int*, int*); 395d9de2d3SDavid du Colombier extern u32int farget(void); 405d9de2d3SDavid du Colombier extern void fpon(void); 41*5c47fe09SDavid du Colombier extern ulong fprdexc(void); 42*5c47fe09SDavid du Colombier extern ulong fprdscr(void); 43*5c47fe09SDavid du Colombier extern ulong fprdsid(void); 44*5c47fe09SDavid du Colombier extern void fpwrexc(ulong); 45*5c47fe09SDavid du Colombier extern void fpwrscr(ulong); 465d9de2d3SDavid du Colombier extern void fprestreg(int fpreg, uvlong val); 47*5c47fe09SDavid du Colombier extern void fprestregs(uvlong*, int); 485d9de2d3SDavid du Colombier extern void fpsave(FPsave *); 495d9de2d3SDavid du Colombier extern ulong fpsavereg(int fpreg, uvlong *fpp); 50*5c47fe09SDavid du Colombier extern void fpsaveregs(uvlong*, int); 515d9de2d3SDavid du Colombier extern u32int fsrget(void); 52*5c47fe09SDavid du Colombier extern uint getboardrev(void); 535d9de2d3SDavid du Colombier extern ulong getclkrate(int); 545d9de2d3SDavid du Colombier extern char* getconf(char*); 55*5c47fe09SDavid du Colombier extern uint getcputemp(void); 565d9de2d3SDavid du Colombier extern char *getethermac(void); 575d9de2d3SDavid du Colombier extern uint getfirmware(void); 58*5c47fe09SDavid du Colombier extern int getncpus(void); 595d9de2d3SDavid du Colombier extern int getpower(int); 605d9de2d3SDavid du Colombier extern void getramsize(Confmem*); 61*5c47fe09SDavid du Colombier extern void gpiosel(uint, int); 62*5c47fe09SDavid du Colombier extern void gpiopullup(uint); 63*5c47fe09SDavid du Colombier extern void gpiopulloff(uint); 64*5c47fe09SDavid du Colombier extern void gpiopulldown(uint); 65*5c47fe09SDavid du Colombier extern void gpioout(uint, int); 66*5c47fe09SDavid du Colombier extern int gpioin(uint); 67*5c47fe09SDavid du Colombier extern void i2csetup(int); 68*5c47fe09SDavid du Colombier extern long i2crecv(I2Cdev*, void*, long, ulong); 69*5c47fe09SDavid du Colombier extern long i2csend(I2Cdev*, void*, long, ulong); 705d9de2d3SDavid du Colombier extern u32int ifsrget(void); 715d9de2d3SDavid du Colombier extern void irqenable(int, void (*)(Ureg*, void*), void*); 725d9de2d3SDavid du Colombier #define intrenable(i, f, a, b, n) irqenable((i), (f), (a)) 73*5c47fe09SDavid du Colombier extern void intrcpushutdown(void); 74*5c47fe09SDavid du Colombier extern void intrshutdown(void); 755d9de2d3SDavid du Colombier extern void intrsoff(void); 765d9de2d3SDavid du Colombier extern int isaconfig(char*, int, ISAConf*); 77*5c47fe09SDavid du Colombier extern int l2ap(int); 78*5c47fe09SDavid du Colombier extern void l2cacheuwbinv(void); 795d9de2d3SDavid du Colombier extern void links(void); 80*5c47fe09SDavid du Colombier extern void mmuinit(void*); 815d9de2d3SDavid du Colombier extern void mmuinit1(void); 825d9de2d3SDavid du Colombier extern void mmuinvalidate(void); 835d9de2d3SDavid du Colombier extern void mmuinvalidateaddr(u32int); 845d9de2d3SDavid du Colombier extern void okay(int); 855d9de2d3SDavid du Colombier extern void procrestore(Proc *); 865d9de2d3SDavid du Colombier extern void procsave(Proc*); 875d9de2d3SDavid du Colombier extern void procsetup(Proc*); 885d9de2d3SDavid du Colombier extern void screeninit(void); 895d9de2d3SDavid du Colombier #define sdfree(p) free(p) 90*5c47fe09SDavid du Colombier #define sdmalloc(n) mallocalign(n, BLOCKALIGN, 0, 0) 91*5c47fe09SDavid du Colombier extern void setclkrate(int, ulong); 925d9de2d3SDavid du Colombier extern void setpower(int, int); 935d9de2d3SDavid du Colombier extern void setr13(int, u32int*); 94*5c47fe09SDavid du Colombier extern void sev(void); 95*5c47fe09SDavid du Colombier extern void spiclock(uint); 96*5c47fe09SDavid du Colombier extern void spimode(int); 97*5c47fe09SDavid du Colombier extern void spirw(uint, void*, int); 985d9de2d3SDavid du Colombier extern int splfhi(void); 995d9de2d3SDavid du Colombier extern int splflo(void); 1005d9de2d3SDavid du Colombier extern void swcursorinit(void); 1015d9de2d3SDavid du Colombier extern void syscallfmt(int syscallno, ulong pc, va_list list); 1025d9de2d3SDavid du Colombier extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 103*5c47fe09SDavid du Colombier extern int startcpus(uint); 104*5c47fe09SDavid du Colombier extern void stopcpu(uint); 1055d9de2d3SDavid du Colombier extern int tas(void *); 1065d9de2d3SDavid du Colombier extern void touser(uintptr); 1075d9de2d3SDavid du Colombier extern void trapinit(void); 1085d9de2d3SDavid du Colombier extern void uartconsinit(void); 1095d9de2d3SDavid du Colombier extern int userureg(Ureg*); 1105d9de2d3SDavid du Colombier extern void vectors(void); 111*5c47fe09SDavid du Colombier extern void vgpinit(void); 112*5c47fe09SDavid du Colombier extern void vgpset(uint, int); 1135d9de2d3SDavid du Colombier extern void vtable(void); 114da091934SDavid du Colombier extern void wdogoff(void); 115*5c47fe09SDavid du Colombier extern void wdogfeed(void); 116*5c47fe09SDavid du Colombier extern int xhcireset(int devaddr); 1175d9de2d3SDavid du Colombier 1185d9de2d3SDavid du Colombier /* 1195d9de2d3SDavid du Colombier * floating point emulation 1205d9de2d3SDavid du Colombier */ 1215d9de2d3SDavid du Colombier extern int fpiarm(Ureg*); 1225d9de2d3SDavid du Colombier extern int fpudevprocio(Proc*, void*, long, uintptr, int); 1235d9de2d3SDavid du Colombier extern void fpuinit(void); 1245d9de2d3SDavid du Colombier extern void fpunoted(void); 1255d9de2d3SDavid du Colombier extern void fpunotify(Ureg*); 1265d9de2d3SDavid du Colombier extern void fpuprocrestore(Proc*); 1275d9de2d3SDavid du Colombier extern void fpuprocsave(Proc*); 1285d9de2d3SDavid du Colombier extern void fpusysprocsetup(Proc*); 1295d9de2d3SDavid du Colombier extern void fpusysrfork(Ureg*); 1305d9de2d3SDavid du Colombier extern void fpusysrforkchild(Proc*, Ureg*, Proc*); 1315d9de2d3SDavid du Colombier extern int fpuemu(Ureg*); 1325d9de2d3SDavid du Colombier /* 133*5c47fe09SDavid du Colombier * Miscellaneous machine dependent stuff. 134*5c47fe09SDavid du Colombier */ 135*5c47fe09SDavid du Colombier extern char* getenv(char*, char*, int); 136*5c47fe09SDavid du Colombier uintptr mmukmap(uintptr, uintptr, usize); 137*5c47fe09SDavid du Colombier uintptr mmukmapx(uintptr, uvlong, usize); 138*5c47fe09SDavid du Colombier uintptr mmukunmap(uintptr, uintptr, usize); 139*5c47fe09SDavid du Colombier extern void* mmuuncache(void*, usize); 140*5c47fe09SDavid du Colombier extern void* ucalloc(usize); 141*5c47fe09SDavid du Colombier extern Block* ucallocb(int); 142*5c47fe09SDavid du Colombier extern void* ucallocalign(usize size, int align, int span); 143*5c47fe09SDavid du Colombier extern void ucfree(void*); 144*5c47fe09SDavid du Colombier extern void ucfreeb(Block*); 145*5c47fe09SDavid du Colombier /* 1465d9de2d3SDavid du Colombier * Things called from port. 1475d9de2d3SDavid du Colombier */ 1485d9de2d3SDavid du Colombier extern void delay(int); /* only scheddump() */ 1495d9de2d3SDavid du Colombier extern int islo(void); 1505d9de2d3SDavid du Colombier extern void microdelay(int); /* only edf.c */ 1515d9de2d3SDavid du Colombier extern void idlehands(void); 1525d9de2d3SDavid du Colombier extern void setkernur(Ureg*, Proc*); /* only devproc.c */ 1535d9de2d3SDavid du Colombier extern void* sysexecregs(uintptr, ulong, int); 1545d9de2d3SDavid du Colombier extern void sysprocsetup(Proc*); 155fac6300fSDavid du Colombier extern void validalign(uintptr, unsigned); 1565d9de2d3SDavid du Colombier 1575d9de2d3SDavid du Colombier extern void kexit(Ureg*); 1585d9de2d3SDavid du Colombier 1595d9de2d3SDavid du Colombier #define getpgcolor(a) 0 1605d9de2d3SDavid du Colombier #define kmapinval() 1615d9de2d3SDavid du Colombier #define countpagerefs(a, b) 1625d9de2d3SDavid du Colombier 1635d9de2d3SDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 1645d9de2d3SDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 1655d9de2d3SDavid du Colombier 1665d9de2d3SDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 1675d9de2d3SDavid du Colombier 1685d9de2d3SDavid du Colombier #define KADDR(pa) UINT2PTR(KZERO | ((uintptr)(pa) & ~KSEGM)) 1695d9de2d3SDavid du Colombier #define PADDR(va) PTR2UINT(PHYSDRAM | ((uintptr)(va) & ~KSEGM)) 1705d9de2d3SDavid du Colombier 1715d9de2d3SDavid du Colombier #define MASK(v) ((1UL << (v)) - 1) /* mask `v' bits wide */ 172