13e12c5d1SDavid du Colombier #include "../port/portfns.h" 23e12c5d1SDavid du Colombier 3219b2ee8SDavid du Colombier void aamloop(int); 423173ec1SDavid du Colombier void acpiscan(void (*func)(uchar *)); 580ee5cbfSDavid du Colombier Dirtab* addarchfile(char*, int, long(*)(Chan*,void*,long,vlong), long(*)(Chan*,void*,long,vlong)); 67dd7cddfSDavid du Colombier void archinit(void); 7abfa367dSDavid du Colombier void archrevert(void); 84fafed5dSDavid du Colombier int bios32call(BIOS32ci*, u16int[3]); 94fafed5dSDavid du Colombier int bios32ci(BIOS32si*, BIOS32ci*); 104fafed5dSDavid du Colombier void bios32close(BIOS32si*); 114fafed5dSDavid du Colombier BIOS32si* bios32open(char*); 124de34a7eSDavid du Colombier void bootargs(void*); 13208510e1SDavid du Colombier ulong cankaddr(ulong); 141045bea1SDavid du Colombier void cgapost(int); 157dd7cddfSDavid du Colombier void clockintr(Ureg*, void*); 163c2ddefeSDavid du Colombier int (*cmpswap)(long*, long, long); 173c2ddefeSDavid du Colombier int cmpswap486(long*, long, long); 187dd7cddfSDavid du Colombier void (*coherence)(void); 1926d1d1dfSDavid du Colombier void cpuid(int, ulong regs[]); 207dd7cddfSDavid du Colombier int cpuidentify(void); 217dd7cddfSDavid du Colombier void cpuidprint(void); 22179dd269SDavid du Colombier void (*cycles)(uvlong*); 233e12c5d1SDavid du Colombier void delay(int); 247dd7cddfSDavid du Colombier int dmacount(int); 257dd7cddfSDavid du Colombier int dmadone(int); 263e12c5d1SDavid du Colombier void dmaend(int); 277dd7cddfSDavid du Colombier int dmainit(int, int); 283e12c5d1SDavid du Colombier long dmasetup(int, void*, long, int); 299d1c31b1SDavid du Colombier void fpclear(void); 303e12c5d1SDavid du Colombier void fpenv(FPsave*); 313e12c5d1SDavid du Colombier void fpinit(void); 323e12c5d1SDavid du Colombier void fpoff(void); 33781103c4SDavid du Colombier void fpon(void); 3491e577b2SDavid du Colombier void (*fprestore)(FPsave*); 3591e577b2SDavid du Colombier void (*fpsave)(FPsave*); 364e3613abSDavid du Colombier void fpsavealloc(void); 3791e577b2SDavid du Colombier void fpsserestore(FPsave*); 38401314a3SDavid du Colombier void fpsserestore0(FPsave*); 3991e577b2SDavid du Colombier void fpssesave(FPsave*); 40401314a3SDavid du Colombier void fpssesave0(FPsave*); 413e12c5d1SDavid du Colombier ulong fpstatus(void); 4291e577b2SDavid du Colombier void fpx87restore(FPsave*); 4391e577b2SDavid du Colombier void fpx87save(FPsave*); 443e12c5d1SDavid du Colombier ulong getcr0(void); 453e12c5d1SDavid du Colombier ulong getcr2(void); 467dd7cddfSDavid du Colombier ulong getcr3(void); 477dd7cddfSDavid du Colombier ulong getcr4(void); 48219b2ee8SDavid du Colombier char* getconf(char*); 499a747e4fSDavid du Colombier void guesscpuhz(int); 509a747e4fSDavid du Colombier void halt(void); 517dd7cddfSDavid du Colombier int i8042auxcmd(int); 523ff48bf5SDavid du Colombier int i8042auxcmds(uchar*, int); 537dd7cddfSDavid du Colombier void i8042auxenable(void (*)(int, int)); 543e12c5d1SDavid du Colombier void i8042reset(void); 559a747e4fSDavid du Colombier void i8250console(void); 563d8d68ddSDavid du Colombier void i8250config(char *); 579a747e4fSDavid du Colombier void* i8250alloc(int, int, int); 58b7b24591SDavid du Colombier void i8250mouse(char*, int (*)(Queue*, int), int); 59aa46331bSDavid du Colombier void i8250setmouseputc(char*, int (*)(Queue*, int)); 607dd7cddfSDavid du Colombier void i8253enable(void); 613ff48bf5SDavid du Colombier void i8253init(void); 623ff48bf5SDavid du Colombier void i8253link(void); 637dd7cddfSDavid du Colombier uvlong i8253read(uvlong*); 643ff48bf5SDavid du Colombier void i8253timerset(uvlong); 654de34a7eSDavid du Colombier int i8259disable(int); 664de34a7eSDavid du Colombier int i8259enable(Vctl*); 677dd7cddfSDavid du Colombier void i8259init(void); 689a747e4fSDavid du Colombier int i8259isr(int); 694de34a7eSDavid du Colombier void i8259on(void); 704de34a7eSDavid du Colombier void i8259off(void); 719a747e4fSDavid du Colombier int i8259vecno(int); 727dd7cddfSDavid du Colombier void idle(void); 7380ee5cbfSDavid du Colombier void idlehands(void); 743e12c5d1SDavid du Colombier int inb(int); 75bd389b36SDavid du Colombier void insb(int, void*, int); 76bd389b36SDavid du Colombier ushort ins(int); 773e12c5d1SDavid du Colombier void inss(int, void*, int); 78219b2ee8SDavid du Colombier ulong inl(int); 79bd389b36SDavid du Colombier void insl(int, void*, int); 8007a38badSDavid du Colombier int intrdisable(int, void (*)(Ureg *, void *), void*, int, char*); 817dd7cddfSDavid du Colombier void intrenable(int, void (*)(Ureg*, void*), void*, int, char*); 824de34a7eSDavid du Colombier void introff(void); 834de34a7eSDavid du Colombier void intron(void); 844de34a7eSDavid du Colombier void invlpg(ulong); 857dd7cddfSDavid du Colombier void iofree(int); 867dd7cddfSDavid du Colombier void ioinit(void); 877dd7cddfSDavid du Colombier int iounused(int, int); 887dd7cddfSDavid du Colombier int ioalloc(int, int, int, char*); 899a747e4fSDavid du Colombier int ioreserve(int, int, int, char*); 907dd7cddfSDavid du Colombier int iprint(char*, ...); 91219b2ee8SDavid du Colombier int isaconfig(char*, int, ISAConf*); 924de34a7eSDavid du Colombier void* kaddr(ulong); 939a747e4fSDavid du Colombier void kbdenable(void); 943e12c5d1SDavid du Colombier void kbdinit(void); 959a747e4fSDavid du Colombier #define kmapinval() 967dd7cddfSDavid du Colombier void lgdt(ushort[3]); 977dd7cddfSDavid du Colombier void lidt(ushort[3]); 987dd7cddfSDavid du Colombier void links(void); 997dd7cddfSDavid du Colombier void ltr(ulong); 1009a747e4fSDavid du Colombier void mach0init(void); 1013e12c5d1SDavid du Colombier void mathinit(void); 102b985bfb9SDavid du Colombier void mb386(void); 103b985bfb9SDavid du Colombier void mb586(void); 1049a747e4fSDavid du Colombier void meminit(void); 1054de34a7eSDavid du Colombier void memorysummary(void); 106fdc61599SDavid du Colombier void mfence(void); 1077dd7cddfSDavid du Colombier #define mmuflushtlb(pdb) putcr3(pdb) 1083e12c5d1SDavid du Colombier void mmuinit(void); 1097dd7cddfSDavid du Colombier ulong* mmuwalk(ulong*, ulong, int, int); 110e4ac449cSDavid du Colombier int mtrr(uvlong, uvlong, char *); 11126d1d1dfSDavid du Colombier void mtrrclock(void); 11226d1d1dfSDavid du Colombier int mtrrprint(char *, long); 113bd389b36SDavid du Colombier uchar nvramread(int); 1147dd7cddfSDavid du Colombier void nvramwrite(int, uchar); 1153e12c5d1SDavid du Colombier void outb(int, int); 116bd389b36SDavid du Colombier void outsb(int, void*, int); 117bd389b36SDavid du Colombier void outs(int, ushort); 1183e12c5d1SDavid du Colombier void outss(int, void*, int); 119219b2ee8SDavid du Colombier void outl(int, ulong); 120bd389b36SDavid du Colombier void outsl(int, void*, int); 1214de34a7eSDavid du Colombier ulong paddr(void*); 1229a747e4fSDavid du Colombier ulong pcibarsize(Pcidev*, int); 123c91329d7SDavid du Colombier void pcibussize(Pcidev*, ulong*, ulong*); 124ee52d9b2SDavid du Colombier int pcicap(Pcidev*, int); 125*0336b12dSDavid du Colombier int pcihtcap(Pcidev*, int); 126*0336b12dSDavid du Colombier int pcienumcaps(Pcidev*, int (*fmatch)(Pcidev*, int, int, int), int); 1277dd7cddfSDavid du Colombier int pcicfgr8(Pcidev*, int); 1287dd7cddfSDavid du Colombier int pcicfgr16(Pcidev*, int); 1297dd7cddfSDavid du Colombier int pcicfgr32(Pcidev*, int); 1307dd7cddfSDavid du Colombier void pcicfgw8(Pcidev*, int, int); 1317dd7cddfSDavid du Colombier void pcicfgw16(Pcidev*, int, int); 1327dd7cddfSDavid du Colombier void pcicfgw32(Pcidev*, int, int); 1339a747e4fSDavid du Colombier void pciclrbme(Pcidev*); 134220e960cSDavid du Colombier void pciclrioe(Pcidev*); 135c91329d7SDavid du Colombier void pciclrmwi(Pcidev*); 136e569ccb5SDavid du Colombier int pcigetpms(Pcidev*); 1377dd7cddfSDavid du Colombier void pcihinv(Pcidev*); 1389a747e4fSDavid du Colombier uchar pciipin(Pcidev*, uchar); 1397dd7cddfSDavid du Colombier Pcidev* pcimatch(Pcidev*, int, int); 1407dd7cddfSDavid du Colombier Pcidev* pcimatchtbdf(int); 1417dd7cddfSDavid du Colombier void pcireset(void); 1425979f962SDavid du Colombier int pciscan(int, Pcidev**); 1437dd7cddfSDavid du Colombier void pcisetbme(Pcidev*); 144220e960cSDavid du Colombier void pcisetioe(Pcidev*); 145c91329d7SDavid du Colombier void pcisetmwi(Pcidev*); 146e569ccb5SDavid du Colombier int pcisetpms(Pcidev*, int); 14780ee5cbfSDavid du Colombier void pcmcisread(PCMslot*); 14880ee5cbfSDavid du Colombier int pcmcistuple(int, int, int, void*, int); 149219b2ee8SDavid du Colombier PCMmap* pcmmap(int, ulong, int, int); 150219b2ee8SDavid du Colombier int pcmspecial(char*, ISAConf*); 1519a747e4fSDavid du Colombier int (*_pcmspecial)(char *, ISAConf *); 152219b2ee8SDavid du Colombier void pcmspecialclose(int); 1539a747e4fSDavid du Colombier void (*_pcmspecialclose)(int); 154219b2ee8SDavid du Colombier void pcmunmap(int, PCMmap*); 1554de34a7eSDavid du Colombier int pdbmap(ulong*, ulong, ulong, int); 156e288d156SDavid du Colombier void procrestore(Proc*); 1573e12c5d1SDavid du Colombier void procsave(Proc*); 1583e12c5d1SDavid du Colombier void procsetup(Proc*); 15926d1d1dfSDavid du Colombier void putcr0(ulong); 1603e12c5d1SDavid du Colombier void putcr3(ulong); 1617dd7cddfSDavid du Colombier void putcr4(ulong); 1624de34a7eSDavid du Colombier void* rampage(void); 1637dd7cddfSDavid du Colombier void rdmsr(int, vlong*); 1644de34a7eSDavid du Colombier void realmode(Ureg*); 1653e12c5d1SDavid du Colombier void screeninit(void); 1667dd7cddfSDavid du Colombier void (*screenputs)(char*, int); 16700a4193cSDavid du Colombier void* sigsearch(char*); 1689a747e4fSDavid du Colombier void syncclock(void); 169fcbb35d1SDavid du Colombier void syscallfmt(int syscallno, ulong pc, va_list list); 170fcbb35d1SDavid du Colombier void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); 1714de34a7eSDavid du Colombier void* tmpmap(Page*); 1724de34a7eSDavid du Colombier void tmpunmap(void*); 1733e12c5d1SDavid du Colombier void touser(void*); 1747dd7cddfSDavid du Colombier void trapenable(int, void (*)(Ureg*, void*), void*, char*); 1753e12c5d1SDavid du Colombier void trapinit(void); 1764de34a7eSDavid du Colombier void trapinit0(void); 1773e12c5d1SDavid du Colombier int tas(void*); 1789a747e4fSDavid du Colombier uvlong tscticks(uvlong*); 1797dd7cddfSDavid du Colombier ulong umbmalloc(ulong, int, int); 1807dd7cddfSDavid du Colombier void umbfree(ulong, int); 1817dd7cddfSDavid du Colombier ulong umbrwmalloc(ulong, int, int); 1827dd7cddfSDavid du Colombier void umbrwfree(ulong, int); 1834de34a7eSDavid du Colombier ulong upaalloc(int, int); 1847dd7cddfSDavid du Colombier void upafree(ulong, int); 1854de34a7eSDavid du Colombier void upareserve(ulong, int); 18680ee5cbfSDavid du Colombier #define userureg(ur) (((ur)->cs & 0xFFFF) == UESEL) 187fac6300fSDavid du Colombier void validalign(uintptr, unsigned); 1887dd7cddfSDavid du Colombier void vectortable(void); 1894de34a7eSDavid du Colombier void* vmap(ulong, int); 1904de34a7eSDavid du Colombier int vmapsync(ulong); 1914de34a7eSDavid du Colombier void vunmap(void*, int); 19226d1d1dfSDavid du Colombier void wbinvd(void); 1937dd7cddfSDavid du Colombier void wrmsr(int, vlong); 1947dd7cddfSDavid du Colombier int xchgw(ushort*, int); 195219b2ee8SDavid du Colombier 196fac6300fSDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 197fac6300fSDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 198fac6300fSDavid du Colombier 1997dd7cddfSDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 2004de34a7eSDavid du Colombier #define KADDR(a) kaddr(a) 2014de34a7eSDavid du Colombier #define PADDR(a) paddr((void*)(a)) 2027dd7cddfSDavid du Colombier 2037dd7cddfSDavid du Colombier #define dcflush(a, b) 204e360d427SDavid du Colombier 205e360d427SDavid du Colombier #define BIOSSEG(a) KADDR(((uint)(a))<<4) 206e360d427SDavid du Colombier 207e360d427SDavid du Colombier #define L16GET(p) (((p)[1]<<8)|(p)[0]) 208e360d427SDavid du Colombier #define L32GET(p) (((u32int)L16GET((p)+2)<<16)|L16GET(p)) 209