1*a81c3ea0SDavid du Colombier #include "../port/portfns.h" 2*a81c3ea0SDavid du Colombier 3*a81c3ea0SDavid du Colombier void arginit(void); 4*a81c3ea0SDavid du Colombier int busprobe(ulong); 5*a81c3ea0SDavid du Colombier ulong cankaddr(ulong); 6*a81c3ea0SDavid du Colombier void cleancache(void); 7*a81c3ea0SDavid du Colombier void clearmmucache(void); 8*a81c3ea0SDavid du Colombier void clock(Ureg*); 9*a81c3ea0SDavid du Colombier void clockinit(void); 10*a81c3ea0SDavid du Colombier void clockshutdown(void); 11*a81c3ea0SDavid du Colombier int cmpswap(long*, long, long); 12*a81c3ea0SDavid du Colombier void coherence(void); 13*a81c3ea0SDavid du Colombier void cycles(uvlong *); 14*a81c3ea0SDavid du Colombier void dcflush(void*, ulong); 15*a81c3ea0SDavid du Colombier void dcinvalid(void*, ulong); 16*a81c3ea0SDavid du Colombier void dumptlb(void); 17*a81c3ea0SDavid du Colombier void faultmips(Ureg*, int, int); 18*a81c3ea0SDavid du Colombier void* fbinit(void); 19*a81c3ea0SDavid du Colombier ulong fcr31(void); 20*a81c3ea0SDavid du Colombier void firmware(int); 21*a81c3ea0SDavid du Colombier void fpclear(void); 22*a81c3ea0SDavid du Colombier void fpsave(FPsave *); 23*a81c3ea0SDavid du Colombier void fptrap(Ureg*); 24*a81c3ea0SDavid du Colombier void fpwatch(Ureg *); 25*a81c3ea0SDavid du Colombier ulong getcause(void); 26*a81c3ea0SDavid du Colombier char* getconf(char*); 27*a81c3ea0SDavid du Colombier ulong getconfig(void); 28*a81c3ea0SDavid du Colombier ulong getpagemask(void); 29*a81c3ea0SDavid du Colombier ulong getstatus(void); 30*a81c3ea0SDavid du Colombier int gettlbp(ulong, ulong*); 31*a81c3ea0SDavid du Colombier ulong gettlbvirt(int); 32*a81c3ea0SDavid du Colombier void gettlbx(int, Softtlb*); 33*a81c3ea0SDavid du Colombier void gotopc(ulong); 34*a81c3ea0SDavid du Colombier void hinv(void); 35*a81c3ea0SDavid du Colombier int i8042auxcmd(int); 36*a81c3ea0SDavid du Colombier int i8042auxcmds(uchar*, int); 37*a81c3ea0SDavid du Colombier void i8042auxenable(void (*)(int, int)); 38*a81c3ea0SDavid du Colombier void i8042reset(void); 39*a81c3ea0SDavid du Colombier int i8250console(void); 40*a81c3ea0SDavid du Colombier int i8259disable(int); 41*a81c3ea0SDavid du Colombier int i8259enable(int); 42*a81c3ea0SDavid du Colombier void i8259init(void); 43*a81c3ea0SDavid du Colombier int i8259intack(void); 44*a81c3ea0SDavid du Colombier int i8259isr(int); 45*a81c3ea0SDavid du Colombier void icflush(void *, ulong); 46*a81c3ea0SDavid du Colombier void idle(void); 47*a81c3ea0SDavid du Colombier #define idlehands() /* no wait instruction, do nothing */ 48*a81c3ea0SDavid du Colombier #define inb(r) (*(uchar*)(IOBASE+(r))) 49*a81c3ea0SDavid du Colombier void insb(int, void*, int); 50*a81c3ea0SDavid du Colombier #define ins(r) (*(ushort*)(IOBASE+(r))) 51*a81c3ea0SDavid du Colombier void inss(int, void*, int); 52*a81c3ea0SDavid du Colombier #define inl(r) (*(ulong*)(IOBASE+(r))) 53*a81c3ea0SDavid du Colombier void insl(int, void*, int); 54*a81c3ea0SDavid du Colombier void intrenable(int, void(*)(Ureg*, void *), void *, int); 55*a81c3ea0SDavid du Colombier void introff(int); 56*a81c3ea0SDavid du Colombier void intron(int); 57*a81c3ea0SDavid du Colombier void intrshutdown(void); 58*a81c3ea0SDavid du Colombier void ioinit(void); 59*a81c3ea0SDavid du Colombier int isaconfig(char*, int, ISAConf*); 60*a81c3ea0SDavid du Colombier void kbdinit(void); 61*a81c3ea0SDavid du Colombier void kfault(Ureg*); 62*a81c3ea0SDavid du Colombier KMap* kmap(Page*); 63*a81c3ea0SDavid du Colombier void kmapinit(void); 64*a81c3ea0SDavid du Colombier void kmapinval(void); 65*a81c3ea0SDavid du Colombier void kunmap(KMap*); 66*a81c3ea0SDavid du Colombier void launchinit(void); 67*a81c3ea0SDavid du Colombier void launch(int); 68*a81c3ea0SDavid du Colombier void links(void); 69*a81c3ea0SDavid du Colombier ulong machstatus(void); 70*a81c3ea0SDavid du Colombier void newstart(void); 71*a81c3ea0SDavid du Colombier int newtlbpid(Proc*); 72*a81c3ea0SDavid du Colombier void online(void); 73*a81c3ea0SDavid du Colombier #define outb(r, v) (*(uchar*)(IOBASE+(r)) = v) 74*a81c3ea0SDavid du Colombier void outsb(int, void*, int); 75*a81c3ea0SDavid du Colombier #define outs(r, v) (*(ushort*)(IOBASE+(r)) = v) 76*a81c3ea0SDavid du Colombier void outss(int, void*, int); 77*a81c3ea0SDavid du Colombier #define outl(r, v) (*(ulong*)(IOBASE+(r)) = v) 78*a81c3ea0SDavid du Colombier void outsl(int, void*, int); 79*a81c3ea0SDavid du Colombier ulong pcibarsize(Pcidev*, int); 80*a81c3ea0SDavid du Colombier void pcibussize(Pcidev*, ulong*, ulong*); 81*a81c3ea0SDavid du Colombier int pcicfgr8(Pcidev*, int); 82*a81c3ea0SDavid du Colombier int pcicfgr16(Pcidev*, int); 83*a81c3ea0SDavid du Colombier int pcicfgr32(Pcidev*, int); 84*a81c3ea0SDavid du Colombier void pcicfgw8(Pcidev*, int, int); 85*a81c3ea0SDavid du Colombier void pcicfgw16(Pcidev*, int, int); 86*a81c3ea0SDavid du Colombier void pcicfgw32(Pcidev*, int, int); 87*a81c3ea0SDavid du Colombier void pciclrbme(Pcidev*); 88*a81c3ea0SDavid du Colombier void pciclrioe(Pcidev*); 89*a81c3ea0SDavid du Colombier void pciclrmwi(Pcidev*); 90*a81c3ea0SDavid du Colombier int pcigetpms(Pcidev*); 91*a81c3ea0SDavid du Colombier void pcihinv(Pcidev*); 92*a81c3ea0SDavid du Colombier uchar pciipin(Pcidev*, uchar); 93*a81c3ea0SDavid du Colombier Pcidev* pcimatch(Pcidev*, int, int); 94*a81c3ea0SDavid du Colombier Pcidev* pcimatchtbdf(int); 95*a81c3ea0SDavid du Colombier void pcireset(void); 96*a81c3ea0SDavid du Colombier int pciscan(int, Pcidev**); 97*a81c3ea0SDavid du Colombier void pcisetbme(Pcidev*); 98*a81c3ea0SDavid du Colombier void pcisetioe(Pcidev*); 99*a81c3ea0SDavid du Colombier void pcisetmwi(Pcidev*); 100*a81c3ea0SDavid du Colombier int pcisetpms(Pcidev*, int); 101*a81c3ea0SDavid du Colombier int pcisubirq(int); 102*a81c3ea0SDavid du Colombier ulong prid(void); 103*a81c3ea0SDavid du Colombier void procrestore(Proc *); 104*a81c3ea0SDavid du Colombier void procsave(Proc *); 105*a81c3ea0SDavid du Colombier #define procsetup(p) ((p)->fpstate = FPinit) 106*a81c3ea0SDavid du Colombier void purgetlb(int); 107*a81c3ea0SDavid du Colombier Softtlb* putstlb(ulong, ulong); 108*a81c3ea0SDavid du Colombier int puttlb(ulong, ulong, ulong); 109*a81c3ea0SDavid du Colombier void puttlbx(int, ulong, ulong, ulong, int); 110*a81c3ea0SDavid du Colombier ulong rdcompare(void); 111*a81c3ea0SDavid du Colombier ulong rdcount(void); 112*a81c3ea0SDavid du Colombier ulong* reg(Ureg*, int); 113*a81c3ea0SDavid du Colombier void restfpregs(FPsave*, ulong); 114*a81c3ea0SDavid du Colombier void screeninit(void); 115*a81c3ea0SDavid du Colombier void setleveldest(int, int, uvlong*); 116*a81c3ea0SDavid du Colombier void setpagemask(ulong); 117*a81c3ea0SDavid du Colombier void setsp(ulong); 118*a81c3ea0SDavid du Colombier void setstatus(ulong); 119*a81c3ea0SDavid du Colombier void setwatchhi0(ulong); 120*a81c3ea0SDavid du Colombier void setwatchlo0(ulong); 121*a81c3ea0SDavid du Colombier void setwired(ulong); 122*a81c3ea0SDavid du Colombier ulong stlbhash(ulong); 123*a81c3ea0SDavid du Colombier void swcursorinit(void); 124*a81c3ea0SDavid du Colombier void syncclock(void); 125*a81c3ea0SDavid du Colombier long syscall(Ureg*); 126*a81c3ea0SDavid du Colombier void syscallfmt(int syscallno, ulong pc, va_list list); 127*a81c3ea0SDavid du Colombier void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 128*a81c3ea0SDavid du Colombier int tas(ulong*); 129*a81c3ea0SDavid du Colombier void tlbinit(void); 130*a81c3ea0SDavid du Colombier ulong tlbvirt(void); 131*a81c3ea0SDavid du Colombier void touser(uintptr); 132*a81c3ea0SDavid du Colombier void unleash(void); 133*a81c3ea0SDavid du Colombier #define userureg(ur) ((ur)->status & KUSER) 134*a81c3ea0SDavid du Colombier void validalign(uintptr, unsigned); 135*a81c3ea0SDavid du Colombier void vecinit(void); 136*a81c3ea0SDavid du Colombier void vector0(void); 137*a81c3ea0SDavid du Colombier void vector100(void); 138*a81c3ea0SDavid du Colombier void vector180(void); 139*a81c3ea0SDavid du Colombier void wrcompare(ulong); 140*a81c3ea0SDavid du Colombier void wrcount(ulong); 141*a81c3ea0SDavid du Colombier ulong wiredpte(vlong); 142*a81c3ea0SDavid du Colombier void machwire(void); 143*a81c3ea0SDavid du Colombier void _uartputs(char*, int); 144*a81c3ea0SDavid du Colombier int _uartprint(char*, ...); 145*a81c3ea0SDavid du Colombier 146*a81c3ea0SDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 147*a81c3ea0SDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 148*a81c3ea0SDavid du Colombier 149*a81c3ea0SDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 150*a81c3ea0SDavid du Colombier 151*a81c3ea0SDavid du Colombier #define KADDR(a) ((void*)((ulong)(a)|KSEG0)) 152*a81c3ea0SDavid du Colombier #define PADDR(a) ((ulong)(a)&~KSEGM) 153*a81c3ea0SDavid du Colombier 154*a81c3ea0SDavid du Colombier #define KSEG0ADDR(a) ((void*)(((ulong)(a)&~KSEGM)|KSEG0)) 155*a81c3ea0SDavid du Colombier #define KSEG1ADDR(a) ((void*)((ulong)(a)|KSEG1)) 156*a81c3ea0SDavid du Colombier 157*a81c3ea0SDavid du Colombier #define sdmalloc(n) mallocalign(n, CACHELINESZ, 0, 0) 158*a81c3ea0SDavid du Colombier #define sdfree(p) free(p) 159*a81c3ea0SDavid du Colombier 160*a81c3ea0SDavid du Colombier int pmonprint(char*, ...); 161