13de6a9c0SDavid du Colombier #define checkmmu(a, b) 23de6a9c0SDavid du Colombier #define countpagerefs(a, b) 33de6a9c0SDavid du Colombier 43de6a9c0SDavid du Colombier #include "../port/portfns.h" 53de6a9c0SDavid du Colombier 63de6a9c0SDavid du Colombier typedef struct Ether Ether; 73de6a9c0SDavid du Colombier struct Ether; 83de6a9c0SDavid du Colombier 93de6a9c0SDavid du Colombier extern int led(int, int); 103de6a9c0SDavid du Colombier extern void ledexit(int); 113de6a9c0SDavid du Colombier extern void delay(int); 123de6a9c0SDavid du Colombier extern void _uartputs(char*, int); 133de6a9c0SDavid du Colombier extern int _uartprint(char*, ...); 143de6a9c0SDavid du Colombier 153de6a9c0SDavid du Colombier #pragma varargck argpos _uartprint 1 163de6a9c0SDavid du Colombier 173de6a9c0SDavid du Colombier extern long ainc(long *); 183de6a9c0SDavid du Colombier extern long adec(long *); 193de6a9c0SDavid du Colombier extern void allcacheinfo(Memcache *); 203de6a9c0SDavid du Colombier extern void allcacheson(void); 213de6a9c0SDavid du Colombier extern int archether(unsigned, Ether *); 223de6a9c0SDavid du Colombier extern void archreboot(void); 233de6a9c0SDavid du Colombier extern void archreset(void); 243de6a9c0SDavid du Colombier extern void cachedinv(void); 253de6a9c0SDavid du Colombier extern void cachedinvse(void*, int); 263de6a9c0SDavid du Colombier extern void cachedwb(void); 273de6a9c0SDavid du Colombier extern void cachedwbinv(void); 283de6a9c0SDavid du Colombier extern void cachedwbinvse(void*, int); 293de6a9c0SDavid du Colombier extern void cachedwbse(void*, int); 303de6a9c0SDavid du Colombier extern void cacheiinv(void); 313de6a9c0SDavid du Colombier extern void cacheuwbinv(void); 323de6a9c0SDavid du Colombier extern uintptr cankaddr(uintptr pa); 333de6a9c0SDavid du Colombier extern void chkmissing(void); 343de6a9c0SDavid du Colombier extern void clockprod(Ureg *); 353de6a9c0SDavid du Colombier extern void clockshutdown(void); 363de6a9c0SDavid du Colombier extern int cmpswap(long*, long, long); 373de6a9c0SDavid du Colombier extern void coherence(void); 383de6a9c0SDavid du Colombier extern void configscreengpio(void); 393de6a9c0SDavid du Colombier extern u32int controlget(void); 403de6a9c0SDavid du Colombier extern void cortexa9cachecfg(void); 413de6a9c0SDavid du Colombier extern u32int cpctget(void); 423de6a9c0SDavid du Colombier extern u32int cpidget(void); 433de6a9c0SDavid du Colombier extern ulong cprd(int cp, int op1, int crn, int crm, int op2); 443de6a9c0SDavid du Colombier extern ulong cprdsc(int op1, int crn, int crm, int op2); 453de6a9c0SDavid du Colombier extern void cpuidprint(void); 463de6a9c0SDavid du Colombier extern char *cputype2name(char *buf, int size); 473de6a9c0SDavid du Colombier extern void cpwr(int cp, int op1, int crn, int crm, int op2, ulong val); 483de6a9c0SDavid du Colombier extern void cpwrsc(int op1, int crn, int crm, int op2, ulong val); 493de6a9c0SDavid du Colombier #define cycles(vlp) *(vlp) = (ulong)lcycles() 503de6a9c0SDavid du Colombier extern u32int dacget(void); 513de6a9c0SDavid du Colombier extern void dacput(u32int); 523de6a9c0SDavid du Colombier extern void dmainit(void); 533de6a9c0SDavid du Colombier extern int dmastart(void *, int, void *, int, uint, Rendez *, int *); 543de6a9c0SDavid du Colombier extern void dmatest(void); 553de6a9c0SDavid du Colombier extern void dump(void *vaddr, int words); 563de6a9c0SDavid du Colombier extern u32int farget(void); 573de6a9c0SDavid du Colombier extern void fpclear(void); 583de6a9c0SDavid du Colombier extern void fpoff(void); 593de6a9c0SDavid du Colombier extern void fpon(void); 603de6a9c0SDavid du Colombier extern ulong fprd(int fpreg); 613de6a9c0SDavid du Colombier extern void fprestreg(int fpreg, uvlong val); 623de6a9c0SDavid du Colombier extern void fpsave(FPsave *); 633de6a9c0SDavid du Colombier extern ulong fpsavereg(int fpreg, uvlong *fpp); 643de6a9c0SDavid du Colombier extern void fpwr(int fpreg, ulong val); 653de6a9c0SDavid du Colombier extern u32int fsrget(void); 663de6a9c0SDavid du Colombier extern ulong getauxctl(void); 673de6a9c0SDavid du Colombier extern ulong getclvlid(void); 683de6a9c0SDavid du Colombier extern ulong getcyc(void); 693de6a9c0SDavid du Colombier extern int getncpus(void); 703de6a9c0SDavid du Colombier extern u32int getpsr(void); 713de6a9c0SDavid du Colombier extern u32int getscr(void); 723de6a9c0SDavid du Colombier extern ulong getwayssets(void); 733de6a9c0SDavid du Colombier extern void intcmask(uint); 743de6a9c0SDavid du Colombier extern void intcunmask(uint); 753de6a9c0SDavid du Colombier extern void intrcpu(int); 763de6a9c0SDavid du Colombier extern void intrcpushutdown(void); 773de6a9c0SDavid du Colombier extern void intrshutdown(void); 783de6a9c0SDavid du Colombier extern void intrsoff(void); 793de6a9c0SDavid du Colombier extern int isaconfig(char*, int, ISAConf*); 803de6a9c0SDavid du Colombier extern int isdmadone(int); 813de6a9c0SDavid du Colombier extern void kbdenable(void); 823de6a9c0SDavid du Colombier extern void l1diag(void); 833de6a9c0SDavid du Colombier extern void l2pl310init(void); 843de6a9c0SDavid du Colombier extern void machoff(uint cpu); 853de6a9c0SDavid du Colombier extern void machon(uint cpu); 863de6a9c0SDavid du Colombier extern void memdiag(ulong *); 873de6a9c0SDavid du Colombier extern void mmuidmap(uintptr phys, int mbs); 883de6a9c0SDavid du Colombier extern void mmuinvalidate(void); /* 'mmu' or 'tlb'? */ 893de6a9c0SDavid du Colombier extern void mmuinvalidateaddr(u32int); /* 'mmu' or 'tlb'? */ 903de6a9c0SDavid du Colombier extern void mousectl(Cmdbuf *cb); 913de6a9c0SDavid du Colombier extern ulong pcibarsize(Pcidev*, int); 923de6a9c0SDavid du Colombier extern void pcibussize(Pcidev*, ulong*, ulong*); 933de6a9c0SDavid du Colombier extern int pcicfgr8(Pcidev*, int); 943de6a9c0SDavid du Colombier extern int pcicfgr16(Pcidev*, int); 953de6a9c0SDavid du Colombier extern int pcicfgr32(Pcidev*, int); 963de6a9c0SDavid du Colombier extern void pcicfgw8(Pcidev*, int, int); 973de6a9c0SDavid du Colombier extern void pcicfgw16(Pcidev*, int, int); 983de6a9c0SDavid du Colombier extern void pcicfgw32(Pcidev*, int, int); 993de6a9c0SDavid du Colombier extern void pciclrbme(Pcidev*); 1003de6a9c0SDavid du Colombier extern void pciclrioe(Pcidev*); 1013de6a9c0SDavid du Colombier extern void pciclrmwi(Pcidev*); 1023de6a9c0SDavid du Colombier extern void pcieintrdone(void); 1033de6a9c0SDavid du Colombier extern int pcigetpms(Pcidev*); 1043de6a9c0SDavid du Colombier extern void pcihinv(Pcidev*); 1053de6a9c0SDavid du Colombier extern uchar pciipin(Pcidev*, uchar); 1063de6a9c0SDavid du Colombier extern Pcidev* pcimatch(Pcidev*, int, int); 1073de6a9c0SDavid du Colombier extern Pcidev* pcimatchtbdf(int); 1083de6a9c0SDavid du Colombier extern void pcireset(void); 1093de6a9c0SDavid du Colombier extern void pcisetbme(Pcidev*); 1103de6a9c0SDavid du Colombier extern void pcisetioe(Pcidev*); 1113de6a9c0SDavid du Colombier extern void pcisetmwi(Pcidev*); 1123de6a9c0SDavid du Colombier extern int pcisetpms(Pcidev*, int); 1133de6a9c0SDavid du Colombier extern u32int pidget(void); 1143de6a9c0SDavid du Colombier extern void pidput(u32int); 1153de6a9c0SDavid du Colombier extern void prcachecfg(void); 1163de6a9c0SDavid du Colombier extern vlong probeaddr(uintptr); 1173de6a9c0SDavid du Colombier extern void procrestore(Proc *); 1183de6a9c0SDavid du Colombier extern void procsave(Proc*); 1193de6a9c0SDavid du Colombier extern void procsetup(Proc*); 1203de6a9c0SDavid du Colombier extern void putauxctl(ulong); 1213de6a9c0SDavid du Colombier extern void _reset(void); 1223de6a9c0SDavid du Colombier extern void screenclockson(void); 1233de6a9c0SDavid du Colombier extern void screeninit(void); 1243de6a9c0SDavid du Colombier extern void serialputc(int c); 1253de6a9c0SDavid du Colombier extern void serialputs(char* s, int n); 1263de6a9c0SDavid du Colombier extern void setcachelvl(int); 1273de6a9c0SDavid du Colombier extern void setsp(uintptr); 1283de6a9c0SDavid du Colombier extern void setr13(int, u32int*); 1293de6a9c0SDavid du Colombier extern ulong smpon(void); 1303de6a9c0SDavid du Colombier extern int startcpu(uint); 1313de6a9c0SDavid du Colombier extern void stopcpu(uint); 1323de6a9c0SDavid du Colombier extern int tas(void *); 1333de6a9c0SDavid du Colombier extern void tegclock0init(void); 1343de6a9c0SDavid du Colombier extern void tegclockinit(void); 1353de6a9c0SDavid du Colombier extern void tegclockintr(void); 1363de6a9c0SDavid du Colombier extern void tegclockshutdown(void); 1373de6a9c0SDavid du Colombier extern void tegwdogintr(Ureg *, void *); 1383de6a9c0SDavid du Colombier extern u32int ttbget(void); 1393de6a9c0SDavid du Colombier extern void ttbput(u32int); 1403de6a9c0SDavid du Colombier extern void _vrst(void); 1413de6a9c0SDavid du Colombier extern void wakewfi(void); 1423de6a9c0SDavid du Colombier extern void watchdoginit(void); 1433de6a9c0SDavid du Colombier extern void wfi(void); 1443de6a9c0SDavid du Colombier 1453de6a9c0SDavid du Colombier extern int irqenable(uint, void (*)(Ureg*, void*), void*, char*); 1463de6a9c0SDavid du Colombier extern int irqdisable(uint, void (*)(Ureg*, void*), void*, char*); 1473de6a9c0SDavid du Colombier #define intrenable(i, f, a, b, n) irqenable((i), (f), (a), (n)) 1483de6a9c0SDavid du Colombier #define intrdisable(i, f, a, b, n) irqdisable((i), (f), (a), (n)) 1493de6a9c0SDavid du Colombier extern void vectors(void); 1503de6a9c0SDavid du Colombier extern void vtable(void); 1513de6a9c0SDavid du Colombier 1523de6a9c0SDavid du Colombier /* 1533de6a9c0SDavid du Colombier * Things called in main. 1543de6a9c0SDavid du Colombier */ 1553de6a9c0SDavid du Colombier extern void archconfinit(void); 1563de6a9c0SDavid du Colombier extern void clockinit(void); 1573de6a9c0SDavid du Colombier extern int i8250console(void); 1583de6a9c0SDavid du Colombier extern void links(void); 1593de6a9c0SDavid du Colombier extern void mmuinit(void); 1603de6a9c0SDavid du Colombier extern void touser(uintptr); 1613de6a9c0SDavid du Colombier extern void trapinit(void); 1623de6a9c0SDavid du Colombier 1633de6a9c0SDavid du Colombier 1643de6a9c0SDavid du Colombier extern int fpiarm(Ureg*); 1653de6a9c0SDavid du Colombier extern int fpudevprocio(Proc*, void*, long, uintptr, int); 1663de6a9c0SDavid du Colombier extern void fpuinit(void); 1673de6a9c0SDavid du Colombier extern void fpunoted(void); 1683de6a9c0SDavid du Colombier extern void fpunotify(Ureg*); 1693de6a9c0SDavid du Colombier extern void fpuprocrestore(Proc*); 1703de6a9c0SDavid du Colombier extern void fpuprocsave(Proc*); 1713de6a9c0SDavid du Colombier extern void fpusysprocsetup(Proc*); 1723de6a9c0SDavid du Colombier extern void fpusysrfork(Ureg*); 1733de6a9c0SDavid du Colombier extern void fpusysrforkchild(Proc*, Ureg*, Proc*); 1743de6a9c0SDavid du Colombier extern int fpuemu(Ureg*); 1753de6a9c0SDavid du Colombier 1763de6a9c0SDavid du Colombier /* 1773de6a9c0SDavid du Colombier * Miscellaneous machine dependent stuff. 1783de6a9c0SDavid du Colombier */ 1793de6a9c0SDavid du Colombier extern int cas(int *, int, int); 1803de6a9c0SDavid du Colombier extern char* getenv(char*, char*, int); 1813de6a9c0SDavid du Colombier char* getconf(char*); 1823de6a9c0SDavid du Colombier uintptr mmukmap(uintptr, uintptr, usize); 1833de6a9c0SDavid du Colombier uintptr mmukunmap(uintptr, uintptr, usize); 1843de6a9c0SDavid du Colombier extern void* mmuuncache(void*, usize); 1853de6a9c0SDavid du Colombier extern void* ucalloc(usize); 1863de6a9c0SDavid du Colombier extern Block* ucallocb(int); 1873de6a9c0SDavid du Colombier extern void* ucallocalign(usize size, int align, int span); 1883de6a9c0SDavid du Colombier extern void ucfree(void*); 1893de6a9c0SDavid du Colombier extern void ucfreeb(Block*); 1903de6a9c0SDavid du Colombier 1913de6a9c0SDavid du Colombier /* 1923de6a9c0SDavid du Colombier * Things called from port. 1933de6a9c0SDavid du Colombier */ 1943de6a9c0SDavid du Colombier extern void delay(int); /* only scheddump() */ 1953de6a9c0SDavid du Colombier extern int islo(void); 1963de6a9c0SDavid du Colombier extern void microdelay(int); /* only edf.c */ 1973de6a9c0SDavid du Colombier extern void idlehands(void); 1983de6a9c0SDavid du Colombier extern void setkernur(Ureg*, Proc*); /* only devproc.c */ 1993de6a9c0SDavid du Colombier extern void syscallfmt(int syscallno, ulong pc, va_list list); 2003de6a9c0SDavid du Colombier extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 2013de6a9c0SDavid du Colombier extern void* sysexecregs(uintptr, ulong, int); 2023de6a9c0SDavid du Colombier extern void sysprocsetup(Proc*); 203*fac6300fSDavid du Colombier extern void validalign(uintptr, unsigned); 2043de6a9c0SDavid du Colombier 2053de6a9c0SDavid du Colombier /* libc */ 2063de6a9c0SDavid du Colombier long labs(long); 2073de6a9c0SDavid du Colombier 2083de6a9c0SDavid du Colombier /* 2093de6a9c0SDavid du Colombier * PCI stuff. 2103de6a9c0SDavid du Colombier */ 2113de6a9c0SDavid du Colombier 2123de6a9c0SDavid du Colombier extern void forkret(void); 2133de6a9c0SDavid du Colombier extern int userureg(Ureg*); 2143de6a9c0SDavid du Colombier void* vmap(uintptr, usize); 2153de6a9c0SDavid du Colombier void vunmap(void*, usize); 2163de6a9c0SDavid du Colombier 2173de6a9c0SDavid du Colombier extern void kexit(Ureg*); 2183de6a9c0SDavid du Colombier 2193de6a9c0SDavid du Colombier #define getpgcolor(a) 0 2203de6a9c0SDavid du Colombier #define kmapinval() 2213de6a9c0SDavid du Colombier 2223de6a9c0SDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 2233de6a9c0SDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 2243de6a9c0SDavid du Colombier 2253de6a9c0SDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 2263de6a9c0SDavid du Colombier 2273de6a9c0SDavid du Colombier #define KADDR(pa) UINT2PTR(KZERO | ((uintptr)(pa) & ~KSEGM)) 2283de6a9c0SDavid du Colombier #define PADDR(va) PTR2UINT(PHYSDRAM | ((uintptr)(va) & ~KSEGM)) 2293de6a9c0SDavid du Colombier 2303de6a9c0SDavid du Colombier #define MASK(v) ((1UL << (v)) - 1) /* mask `v' bits wide */ 231