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