#define checkmmu(a, b) #define countpagerefs(a, b) #include "../port/portfns.h" typedef struct Dma Dma; typedef struct Ether Ether; #pragma incomplete Dma void addconf(char*, char*); long adec(long*); long ainc(long*); void archetherspeed(int, int); void archinit(void); uint archmiiport(int); void archreboot(void); void archreset(void); ulong archuartclock(int, int); void barriers(void); uintptr cankaddr(uintptr pa); Block* clallocb(void); void clockinit(void); void clockintr(Ureg*); void clrmchk(void); int cmpswap(long*, long, long); // #define coherence() eieio() #define coherence() /* uniprocessor */ char *cputype2name(char *, int); void cpuidprint(void); #define cycles(ip) *(ip) = lcycles() void dcflush(uintptr, usize); void dcrcompile(void); long decref(Ref*); void delay(int); void dtlbmiss(void); void dumpmal(void); void dumpregs(Ureg*); void delayloopinit(void); Dev* devtabget(int, int); void devtabinit(void); void devtabreset(void); long devtabread(Chan*, void*, long, vlong); void devtabshutdown(void); void dump(void *, int); void eieio(void); void etherclock(void); void fifoinit(Ether *); void firmware(int); int fpipower(Ureg*); int fpuavail(Ureg*); int fpudevprocio(Proc*, void*, long, uintptr, int); int fpuemu(Ureg*); void fpuinit(void); void fpunoted(void); void fpunotify(Ureg*); void fpuprocresetore(Proc*); #define fpuprocresetore(p) USED(p) void fpuprocsave(Proc*); #define fpuprocsave(p) USED(p) void fpusysprocsetup(Proc*); void fpusysrfork(Ureg*); void fpusysrforkchild(Proc*, Ureg*, Proc*); void fputrap(Ureg*, int); char* getconf(char*); u32int getccr0(void); u32int getdar(void); u32int getdcr(int); u32int getdear(void); u32int getdec(void); u32int getesr(void); u32int getmsr(void); u32int getpid(void); u32int getpir(void); u32int getpit(void); u32int getpvr(void); u32int gettbl(void); u32int gettsr(void); void gotopc(uintptr); int gotsecuremem(void); int havetimer(void); void icflush(uintptr, usize); void idlehands(void); int inb(int); long incref(Ref*); void insb(int, void*, int); ushort ins(int); void inss(int, void*, int); ulong inl(int); void insl(int, void*, int); void intr(Ureg*); void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*); void intrfmtcounts(char *s, char *se); void intrinit(void); void intrshutdown(void); int ioalloc(int, int, int, char*); void iofree(int); void ioinit(void); int iprint(char*, ...); void isync(void); void itlbmiss(void); void kexit(Ureg*); void* kmapphys(uintptr, uintptr, ulong, ulong, ulong); uchar lightbitoff(int); uchar lightbiton(int); uchar lightstate(int); void links(void); void malinit(void); void meminit(void); void mmuinit(void); void* mmucacheinhib(void*, ulong); ulong mmumapsize(ulong); void mutateproc(void *); int mutatetrigger(void); int newmmupid(void); int notify(Ureg*); void outb(int, int); void outsb(int, void*, int); void outs(int, ushort); void outss(int, void*, int); void outl(int, ulong); void outsl(int, void*, int); #define pokeaddr(a, v, w) probeaddr(a) void ppc405console(void); vlong probeaddr(uintptr addr); #define procrestore(p) void procsave(Proc*); void procsetup(Proc*); void putdcr(int, u32int); void putdec(ulong); void putesr(ulong); void putevpr(ulong); void putmsr(u32int); void putpid(u32int); void putpit(u32int); void putsdr1(u32int); void puttcr(u32int); void puttsr(u32int); ulong qtmborder(void); void qtmclock(void); void qtmerr(void); void qtmerrs(char *); void qtminit(void); void shutdown(int ispanic); void spldone(void); int splhi(void); int spllo(void); void splx(int); void splxpc(int); void startcpu(int); void sync(void); void syscall(Ureg*); uintptr sysexecstack(uintptr, int); void sysprocsetup(Proc*); #define tas tas32 void temactransmit(Ether *); void touser(uintptr); void trapinit(void); void trapcritvec(void); void trapvec(void); void tlbdump(char *s); u32int tlbrehi(int); u32int tlbrelo(int); int tlbsxcc(uintptr); void tlbwrx(int, u32int, u32int); void uartliteconsole(void); void uartlputc(int); void uartlputs(char *s); void uncinit(void); void uncinitwait(void); #define userureg(ur) (((ur)->status & MSR_PR) != 0) void validalign(uintptr, unsigned); void verifyproc(Proc *); void verifymach(Mach *); #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) void watchreset(void); void whackether(Ether *); void writeconf(void); /* * dma.c */ void dma0init(void); void dmainit(void); int dmastart(int, void *dest, void *src, ulong len, ulong flags, void (*f)(int)); void dmawait(int); /* * intr.c */ void intrack(ulong); void intrenable(ulong bit, int (*func)(ulong), char *); void intrinit(void); int cas32(void*, u32int, u32int); int tas32(void*); #define CASU(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) #define CASV(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) #define CASW(addr, exp, new) cas32((addr), (exp), (new)) #define TAS(addr) tas32(addr) void forkret(void); #define PTR2UINT(p) ((uintptr)(p)) #define UINT2PTR(i) ((void*)(i)) #define isphys(a) (((ulong)(a)&KSEGM)!=KSEG0 && ((ulong)(a)&KSEGM)!=KSEG1) #define KADDR(a) ((void*)((ulong)(a) | KZERO)) #define PADDR(a) (isphys(a)? (ulong)(a): ((ulong)(a) & ~KSEGM)) /* * this low-level printing stuff is ugly, * but there appears to be no other way to * print until after #t is populated. */ #define wave(c) { \ barriers(); \ *(ulong *)Uartlite = (c); \ barriers(); \ }