1d6dfd9efSDavid du Colombier #define checkmmu(a, b) 2d6dfd9efSDavid du Colombier #define countpagerefs(a, b) 3d6dfd9efSDavid du Colombier 4d6dfd9efSDavid du Colombier #include "../port/portfns.h" 5d6dfd9efSDavid du Colombier 6d6dfd9efSDavid du Colombier typedef struct Dma Dma; 7d6dfd9efSDavid du Colombier typedef struct Ether Ether; 8d6dfd9efSDavid du Colombier #pragma incomplete Dma 9d6dfd9efSDavid du Colombier 10d6dfd9efSDavid du Colombier void addconf(char*, char*); 11*cce710d3SDavid du Colombier long adec(long*); 12*cce710d3SDavid du Colombier long ainc(long*); 13d6dfd9efSDavid du Colombier void archetherspeed(int, int); 14d6dfd9efSDavid du Colombier void archinit(void); 15d6dfd9efSDavid du Colombier uint archmiiport(int); 16d6dfd9efSDavid du Colombier void archreboot(void); 17d6dfd9efSDavid du Colombier void archreset(void); 18d6dfd9efSDavid du Colombier ulong archuartclock(int, int); 19d6dfd9efSDavid du Colombier void barriers(void); 20d6dfd9efSDavid du Colombier uintptr cankaddr(uintptr pa); 21d6dfd9efSDavid du Colombier Block* clallocb(void); 22d6dfd9efSDavid du Colombier void clockinit(void); 23d6dfd9efSDavid du Colombier void clockintr(Ureg*); 24d6dfd9efSDavid du Colombier void clrmchk(void); 25d6dfd9efSDavid du Colombier int cmpswap(long*, long, long); 26d6dfd9efSDavid du Colombier // #define coherence() eieio() 27d6dfd9efSDavid du Colombier #define coherence() /* uniprocessor */ 28d6dfd9efSDavid du Colombier char *cputype2name(char *, int); 29d6dfd9efSDavid du Colombier void cpuidprint(void); 30d6dfd9efSDavid du Colombier #define cycles(ip) *(ip) = lcycles() 31d6dfd9efSDavid du Colombier void dcflush(uintptr, usize); 32d6dfd9efSDavid du Colombier void dcrcompile(void); 33d6dfd9efSDavid du Colombier long decref(Ref*); 34d6dfd9efSDavid du Colombier void delay(int); 35d6dfd9efSDavid du Colombier void dtlbmiss(void); 36d6dfd9efSDavid du Colombier void dumpmal(void); 37d6dfd9efSDavid du Colombier void dumpregs(Ureg*); 38d6dfd9efSDavid du Colombier void delayloopinit(void); 39d6dfd9efSDavid du Colombier Dev* devtabget(int, int); 40d6dfd9efSDavid du Colombier void devtabinit(void); 41d6dfd9efSDavid du Colombier void devtabreset(void); 42d6dfd9efSDavid du Colombier long devtabread(Chan*, void*, long, vlong); 43d6dfd9efSDavid du Colombier void devtabshutdown(void); 44d6dfd9efSDavid du Colombier void dump(void *, int); 45d6dfd9efSDavid du Colombier void eieio(void); 46d6dfd9efSDavid du Colombier void etherclock(void); 47d6dfd9efSDavid du Colombier void fifoinit(Ether *); 48d6dfd9efSDavid du Colombier void firmware(int); 49d6dfd9efSDavid du Colombier int fpipower(Ureg*); 50d6dfd9efSDavid du Colombier int fpuavail(Ureg*); 51d6dfd9efSDavid du Colombier int fpudevprocio(Proc*, void*, long, uintptr, int); 52d6dfd9efSDavid du Colombier int fpuemu(Ureg*); 53d6dfd9efSDavid du Colombier void fpuinit(void); 54d6dfd9efSDavid du Colombier void fpunoted(void); 55d6dfd9efSDavid du Colombier void fpunotify(Ureg*); 56d6dfd9efSDavid du Colombier void fpuprocresetore(Proc*); 57d6dfd9efSDavid du Colombier #define fpuprocresetore(p) USED(p) 58d6dfd9efSDavid du Colombier void fpuprocsave(Proc*); 59d6dfd9efSDavid du Colombier #define fpuprocsave(p) USED(p) 60d6dfd9efSDavid du Colombier void fpusysprocsetup(Proc*); 61d6dfd9efSDavid du Colombier void fpusysrfork(Ureg*); 62d6dfd9efSDavid du Colombier void fpusysrforkchild(Proc*, Ureg*, Proc*); 63d6dfd9efSDavid du Colombier void fputrap(Ureg*, int); 64d6dfd9efSDavid du Colombier char* getconf(char*); 65d6dfd9efSDavid du Colombier u32int getccr0(void); 66d6dfd9efSDavid du Colombier u32int getdar(void); 67d6dfd9efSDavid du Colombier u32int getdcr(int); 68d6dfd9efSDavid du Colombier u32int getdear(void); 69d6dfd9efSDavid du Colombier u32int getdec(void); 70d6dfd9efSDavid du Colombier u32int getesr(void); 71d6dfd9efSDavid du Colombier u32int getmsr(void); 72d6dfd9efSDavid du Colombier u32int getpid(void); 73d6dfd9efSDavid du Colombier u32int getpir(void); 74d6dfd9efSDavid du Colombier u32int getpit(void); 75d6dfd9efSDavid du Colombier u32int getpvr(void); 76d6dfd9efSDavid du Colombier u32int gettbl(void); 77d6dfd9efSDavid du Colombier u32int gettsr(void); 78d6dfd9efSDavid du Colombier void gotopc(uintptr); 79d6dfd9efSDavid du Colombier int gotsecuremem(void); 80d6dfd9efSDavid du Colombier int havetimer(void); 81d6dfd9efSDavid du Colombier void icflush(uintptr, usize); 82d6dfd9efSDavid du Colombier void idlehands(void); 83d6dfd9efSDavid du Colombier int inb(int); 84d6dfd9efSDavid du Colombier long incref(Ref*); 85d6dfd9efSDavid du Colombier void insb(int, void*, int); 86d6dfd9efSDavid du Colombier ushort ins(int); 87d6dfd9efSDavid du Colombier void inss(int, void*, int); 88d6dfd9efSDavid du Colombier ulong inl(int); 89d6dfd9efSDavid du Colombier void insl(int, void*, int); 90d6dfd9efSDavid du Colombier void intr(Ureg*); 91d6dfd9efSDavid du Colombier void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*); 92d6dfd9efSDavid du Colombier void intrfmtcounts(char *s, char *se); 93d6dfd9efSDavid du Colombier void intrinit(void); 94d6dfd9efSDavid du Colombier void intrshutdown(void); 95d6dfd9efSDavid du Colombier int ioalloc(int, int, int, char*); 96d6dfd9efSDavid du Colombier void iofree(int); 97d6dfd9efSDavid du Colombier void ioinit(void); 98d6dfd9efSDavid du Colombier int iprint(char*, ...); 99d6dfd9efSDavid du Colombier void isync(void); 100d6dfd9efSDavid du Colombier void itlbmiss(void); 101d6dfd9efSDavid du Colombier void kexit(Ureg*); 102d6dfd9efSDavid du Colombier void* kmapphys(uintptr, uintptr, ulong, ulong, ulong); 103d6dfd9efSDavid du Colombier uchar lightbitoff(int); 104d6dfd9efSDavid du Colombier uchar lightbiton(int); 105d6dfd9efSDavid du Colombier uchar lightstate(int); 106d6dfd9efSDavid du Colombier void links(void); 107d6dfd9efSDavid du Colombier void malinit(void); 108d6dfd9efSDavid du Colombier void meminit(void); 109d6dfd9efSDavid du Colombier void mmuinit(void); 110d6dfd9efSDavid du Colombier void* mmucacheinhib(void*, ulong); 111d6dfd9efSDavid du Colombier ulong mmumapsize(ulong); 112d6dfd9efSDavid du Colombier void mutateproc(void *); 113d6dfd9efSDavid du Colombier int mutatetrigger(void); 114d6dfd9efSDavid du Colombier int newmmupid(void); 115d6dfd9efSDavid du Colombier int notify(Ureg*); 116d6dfd9efSDavid du Colombier void outb(int, int); 117d6dfd9efSDavid du Colombier void outsb(int, void*, int); 118d6dfd9efSDavid du Colombier void outs(int, ushort); 119d6dfd9efSDavid du Colombier void outss(int, void*, int); 120d6dfd9efSDavid du Colombier void outl(int, ulong); 121d6dfd9efSDavid du Colombier void outsl(int, void*, int); 122d6dfd9efSDavid du Colombier #define pokeaddr(a, v, w) probeaddr(a) 123d6dfd9efSDavid du Colombier void ppc405console(void); 124d6dfd9efSDavid du Colombier vlong probeaddr(uintptr addr); 125d6dfd9efSDavid du Colombier #define procrestore(p) 126d6dfd9efSDavid du Colombier void procsave(Proc*); 127d6dfd9efSDavid du Colombier void procsetup(Proc*); 128d6dfd9efSDavid du Colombier void putdcr(int, u32int); 129d6dfd9efSDavid du Colombier void putdec(ulong); 130d6dfd9efSDavid du Colombier void putesr(ulong); 131d6dfd9efSDavid du Colombier void putevpr(ulong); 132d6dfd9efSDavid du Colombier void putmsr(u32int); 133d6dfd9efSDavid du Colombier void putpid(u32int); 134d6dfd9efSDavid du Colombier void putpit(u32int); 135d6dfd9efSDavid du Colombier void putsdr1(u32int); 136d6dfd9efSDavid du Colombier void puttcr(u32int); 137d6dfd9efSDavid du Colombier void puttsr(u32int); 138d6dfd9efSDavid du Colombier ulong qtmborder(void); 139d6dfd9efSDavid du Colombier void qtmclock(void); 140d6dfd9efSDavid du Colombier void qtmerr(void); 141d6dfd9efSDavid du Colombier void qtmerrs(char *); 142d6dfd9efSDavid du Colombier void qtminit(void); 143d6dfd9efSDavid du Colombier void shutdown(int ispanic); 144d6dfd9efSDavid du Colombier void spldone(void); 145d6dfd9efSDavid du Colombier int splhi(void); 146d6dfd9efSDavid du Colombier int spllo(void); 147d6dfd9efSDavid du Colombier void splx(int); 148d6dfd9efSDavid du Colombier void splxpc(int); 149d6dfd9efSDavid du Colombier void startcpu(int); 150d6dfd9efSDavid du Colombier void sync(void); 151d6dfd9efSDavid du Colombier void syscall(Ureg*); 152d6dfd9efSDavid du Colombier uintptr sysexecstack(uintptr, int); 153d6dfd9efSDavid du Colombier void sysprocsetup(Proc*); 154d6dfd9efSDavid du Colombier #define tas tas32 155d6dfd9efSDavid du Colombier void temactransmit(Ether *); 156d6dfd9efSDavid du Colombier void touser(uintptr); 157d6dfd9efSDavid du Colombier void trapinit(void); 158d6dfd9efSDavid du Colombier void trapcritvec(void); 159d6dfd9efSDavid du Colombier void trapvec(void); 160d6dfd9efSDavid du Colombier void tlbdump(char *s); 161d6dfd9efSDavid du Colombier u32int tlbrehi(int); 162d6dfd9efSDavid du Colombier u32int tlbrelo(int); 163d6dfd9efSDavid du Colombier int tlbsxcc(uintptr); 164d6dfd9efSDavid du Colombier void tlbwrx(int, u32int, u32int); 165d6dfd9efSDavid du Colombier void uartliteconsole(void); 166d6dfd9efSDavid du Colombier void uartlputc(int); 167d6dfd9efSDavid du Colombier void uartlputs(char *s); 168d6dfd9efSDavid du Colombier void uncinit(void); 169d6dfd9efSDavid du Colombier void uncinitwait(void); 170d6dfd9efSDavid du Colombier #define userureg(ur) (((ur)->status & MSR_PR) != 0) 171f80d550dSDavid du Colombier void validalign(uintptr, unsigned); 172d6dfd9efSDavid du Colombier void verifyproc(Proc *); 173d6dfd9efSDavid du Colombier void verifymach(Mach *); 174d6dfd9efSDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 175d6dfd9efSDavid du Colombier void watchreset(void); 176d6dfd9efSDavid du Colombier void whackether(Ether *); 177d6dfd9efSDavid du Colombier void writeconf(void); 178d6dfd9efSDavid du Colombier 179d6dfd9efSDavid du Colombier /* 180d6dfd9efSDavid du Colombier * dma.c 181d6dfd9efSDavid du Colombier */ 182d6dfd9efSDavid du Colombier void dma0init(void); 183d6dfd9efSDavid du Colombier void dmainit(void); 184d6dfd9efSDavid du Colombier int dmastart(int, void *dest, void *src, ulong len, ulong flags, void (*f)(int)); 185d6dfd9efSDavid du Colombier void dmawait(int); 186d6dfd9efSDavid du Colombier 187d6dfd9efSDavid du Colombier /* 188d6dfd9efSDavid du Colombier * intr.c 189d6dfd9efSDavid du Colombier */ 190d6dfd9efSDavid du Colombier void intrack(ulong); 191d6dfd9efSDavid du Colombier void intrenable(ulong bit, int (*func)(ulong), char *); 192d6dfd9efSDavid du Colombier void intrinit(void); 193d6dfd9efSDavid du Colombier 194d6dfd9efSDavid du Colombier int cas32(void*, u32int, u32int); 195d6dfd9efSDavid du Colombier int tas32(void*); 196d6dfd9efSDavid du Colombier 197d6dfd9efSDavid du Colombier #define CASU(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) 198d6dfd9efSDavid du Colombier #define CASV(p, e, n) cas32((p), (u32int)(e), (u32int)(n)) 199d6dfd9efSDavid du Colombier #define CASW(addr, exp, new) cas32((addr), (exp), (new)) 200d6dfd9efSDavid du Colombier #define TAS(addr) tas32(addr) 201d6dfd9efSDavid du Colombier 202d6dfd9efSDavid du Colombier void forkret(void); 203d6dfd9efSDavid du Colombier 204d6dfd9efSDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 205d6dfd9efSDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 206d6dfd9efSDavid du Colombier 207d6dfd9efSDavid du Colombier #define isphys(a) (((ulong)(a)&KSEGM)!=KSEG0 && ((ulong)(a)&KSEGM)!=KSEG1) 208d6dfd9efSDavid du Colombier #define KADDR(a) ((void*)((ulong)(a) | KZERO)) 209d6dfd9efSDavid du Colombier #define PADDR(a) (isphys(a)? (ulong)(a): ((ulong)(a) & ~KSEGM)) 210d6dfd9efSDavid du Colombier 211d6dfd9efSDavid du Colombier /* 212d6dfd9efSDavid du Colombier * this low-level printing stuff is ugly, 213d6dfd9efSDavid du Colombier * but there appears to be no other way to 214d6dfd9efSDavid du Colombier * print until after #t is populated. 215d6dfd9efSDavid du Colombier */ 216d6dfd9efSDavid du Colombier 217d6dfd9efSDavid du Colombier #define wave(c) { \ 218d6dfd9efSDavid du Colombier barriers(); \ 219d6dfd9efSDavid du Colombier *(ulong *)Uartlite = (c); \ 220d6dfd9efSDavid du Colombier barriers(); \ 221d6dfd9efSDavid du Colombier } 222