19ef1f84bSDavid du Colombier #include "../port/portfns.h" 29ef1f84bSDavid du Colombier 39ef1f84bSDavid du Colombier void aamloop(int); 49ef1f84bSDavid du Colombier int acpiinit(void); 59ef1f84bSDavid du Colombier Dirtab* addarchfile(char*, int, long(*)(Chan*,void*,long,vlong), long(*)(Chan*,void*,long,vlong)); 69ef1f84bSDavid du Colombier void archfmtinstall(void); 79ef1f84bSDavid du Colombier void archinit(void); 89ef1f84bSDavid du Colombier int archmmu(void); 99ef1f84bSDavid du Colombier void archreset(void); 109ef1f84bSDavid du Colombier vlong archhz(void); 119ef1f84bSDavid du Colombier int asmfree(uvlong, uvlong, int); 129ef1f84bSDavid du Colombier uvlong asmalloc(uvlong, uvlong, int, int); 139ef1f84bSDavid du Colombier void asminit(void); 149ef1f84bSDavid du Colombier void asmmapinit(u64int, u64int, int); 159ef1f84bSDavid du Colombier void asmmodinit(u32int, u32int, char*); 169ef1f84bSDavid du Colombier void cgaconsputs(char*, int); 179ef1f84bSDavid du Colombier void cgainit(void); 189ef1f84bSDavid du Colombier void cgapost(int); 199ef1f84bSDavid du Colombier #define clearmmucache() /* x86 doesn't have one */ 209ef1f84bSDavid du Colombier void (*coherence)(void); 219ef1f84bSDavid du Colombier int corecolor(int); 229ef1f84bSDavid du Colombier u32int cpuid(u32int, u32int, u32int[4]); 239ef1f84bSDavid du Colombier int dbgprint(char*, ...); 249ef1f84bSDavid du Colombier #define decref(r) adec(&(r)->ref) 259ef1f84bSDavid du Colombier void delay(int); 269ef1f84bSDavid du Colombier #define evenaddr(x) /* x86 doesn't care */ 279ef1f84bSDavid du Colombier int fpudevprocio(Proc*, void*, long, uintptr, int); 289ef1f84bSDavid du Colombier void fpuinit(void); 299ef1f84bSDavid du Colombier void fpunoted(void); 309ef1f84bSDavid du Colombier void fpunotify(Ureg*); 319ef1f84bSDavid du Colombier void fpuprocrestore(Proc*); 329ef1f84bSDavid du Colombier void fpuprocsave(Proc*); 339ef1f84bSDavid du Colombier void fpusysprocsetup(Proc*); 349ef1f84bSDavid du Colombier void fpusysrfork(Ureg*); 359ef1f84bSDavid du Colombier void fpusysrforkchild(Proc*, Proc*); 369ef1f84bSDavid du Colombier char* getconf(char*); 379ef1f84bSDavid du Colombier void halt(void); 389ef1f84bSDavid du Colombier int i8042auxcmd(int); 399ef1f84bSDavid du Colombier int i8042auxcmds(uchar*, int); 409ef1f84bSDavid du Colombier void i8042auxenable(void (*)(int, int)); 419ef1f84bSDavid du Colombier void i8042reset(void); 429ef1f84bSDavid du Colombier Uart* i8250console(char*); 439ef1f84bSDavid du Colombier void* i8250alloc(int, int, int); 4445e6af3bSDavid du Colombier void i8250mouse(char*, int (*)(Queue*, int), int); 4545e6af3bSDavid du Colombier void i8250setmouseputc(char*, int (*)(Queue*, int)); 469ef1f84bSDavid du Colombier vlong i8254hz(u32int[2][4]); 479ef1f84bSDavid du Colombier void idlehands(void); 489ef1f84bSDavid du Colombier void idthandlers(void); 499ef1f84bSDavid du Colombier int inb(int); 509ef1f84bSDavid du Colombier #define incref(r) ainc(&(r)->ref) 519ef1f84bSDavid du Colombier void insb(int, void*, int); 529ef1f84bSDavid du Colombier ushort ins(int); 539ef1f84bSDavid du Colombier void inss(int, void*, int); 549ef1f84bSDavid du Colombier ulong inl(int); 559ef1f84bSDavid du Colombier void insl(int, void*, int); 569ef1f84bSDavid du Colombier int intrdisable(void*); 579ef1f84bSDavid du Colombier void* intrenable(int, void (*)(Ureg*, void*), void*, int, char*); 589ef1f84bSDavid du Colombier void invlpg(uintptr); 599ef1f84bSDavid du Colombier void iofree(int); 609ef1f84bSDavid du Colombier void ioinit(void); 619ef1f84bSDavid du Colombier int iounused(int, int); 629ef1f84bSDavid du Colombier int ioalloc(int, int, int, char*); 639ef1f84bSDavid du Colombier int ioreserve(int, int, int, char*); 649ef1f84bSDavid du Colombier int iprint(char*, ...); 659ef1f84bSDavid du Colombier int isaconfig(char*, int, ISAConf*); 669ef1f84bSDavid du Colombier void kbdenable(void); 679ef1f84bSDavid du Colombier void kbdinit(void); 689ef1f84bSDavid du Colombier void kexit(Ureg*); 699ef1f84bSDavid du Colombier #define kmapinval() 709ef1f84bSDavid du Colombier void lfence(void); 719ef1f84bSDavid du Colombier void links(void); 729ef1f84bSDavid du Colombier void machinit(void); 739ef1f84bSDavid du Colombier void mach0init(void); 749ef1f84bSDavid du Colombier void mapraminit(uvlong, uvlong); 759ef1f84bSDavid du Colombier void mapupainit(uvlong, ulong); 769ef1f84bSDavid du Colombier int memcolor(uintmem, uintmem*); 779ef1f84bSDavid du Colombier void meminit(void); 789ef1f84bSDavid du Colombier void mfence(void); 790d74731bSDavid du Colombier void mmucachectl(Page*, uint); 809ef1f84bSDavid du Colombier void mmuflushtlb(u64int); 819ef1f84bSDavid du Colombier void mmuinit(void); 829ef1f84bSDavid du Colombier u64int mmuphysaddr(uintptr); 839ef1f84bSDavid du Colombier int mmuwalk(uintptr, int, PTE**, u64int (*)(usize)); 849ef1f84bSDavid du Colombier int multiboot(u32int, u32int, int); 859ef1f84bSDavid du Colombier void ndnr(void); 869ef1f84bSDavid du Colombier uchar nvramread(int); 879ef1f84bSDavid du Colombier void nvramwrite(int, uchar); 889ef1f84bSDavid du Colombier void optionsinit(char*); 899ef1f84bSDavid du Colombier void outb(int, int); 909ef1f84bSDavid du Colombier void outsb(int, void*, int); 919ef1f84bSDavid du Colombier void outs(int, ushort); 929ef1f84bSDavid du Colombier void outss(int, void*, int); 939ef1f84bSDavid du Colombier void outl(int, ulong); 949ef1f84bSDavid du Colombier void outsl(int, void*, int); 956c88371cSDavid du Colombier void pause(void); 969ef1f84bSDavid du Colombier int pciscan(int, Pcidev**); 979ef1f84bSDavid du Colombier ulong pcibarsize(Pcidev*, int); 988547cd99SDavid du Colombier int pcicap(Pcidev*, int); 99*da317bb8SDavid du Colombier int pcihtcap(Pcidev*, int); 100*da317bb8SDavid du Colombier int pcienumcaps(Pcidev*, int (*fmatch)(Pcidev*, int, int, int), int); 1019ef1f84bSDavid du Colombier int pcicfgr8(Pcidev*, int); 1029ef1f84bSDavid du Colombier int pcicfgr16(Pcidev*, int); 1039ef1f84bSDavid du Colombier int pcicfgr32(Pcidev*, int); 1049ef1f84bSDavid du Colombier void pcicfgw8(Pcidev*, int, int); 1059ef1f84bSDavid du Colombier void pcicfgw16(Pcidev*, int, int); 1069ef1f84bSDavid du Colombier void pcicfgw32(Pcidev*, int, int); 1079ef1f84bSDavid du Colombier void pciclrbme(Pcidev*); 1089ef1f84bSDavid du Colombier void pciclrioe(Pcidev*); 1099ef1f84bSDavid du Colombier void pciclrmwi(Pcidev*); 1109ef1f84bSDavid du Colombier int pcigetpms(Pcidev*); 1119ef1f84bSDavid du Colombier void pcihinv(Pcidev*); 1129ef1f84bSDavid du Colombier uchar pciipin(Pcidev*, uchar); 1139ef1f84bSDavid du Colombier Pcidev* pcimatch(Pcidev*, int, int); 1149ef1f84bSDavid du Colombier Pcidev* pcimatchtbdf(int); 1159ef1f84bSDavid du Colombier void pcireset(void); 1169ef1f84bSDavid du Colombier void pcisetbme(Pcidev*); 1179ef1f84bSDavid du Colombier void pcisetioe(Pcidev*); 1189ef1f84bSDavid du Colombier void pcisetmwi(Pcidev*); 1199ef1f84bSDavid du Colombier int pcisetpms(Pcidev*, int); 1209ef1f84bSDavid du Colombier void (*pmcupdate)(void); 1219ef1f84bSDavid du Colombier void printcpufreq(void); 1229ef1f84bSDavid du Colombier int screenprint(char*, ...); /* debugging */ 1239ef1f84bSDavid du Colombier void sfence(void); 1249ef1f84bSDavid du Colombier void spldone(void); 1259ef1f84bSDavid du Colombier u64int splhi(void); 1269ef1f84bSDavid du Colombier u64int spllo(void); 1279ef1f84bSDavid du Colombier void splx(u64int); 1289ef1f84bSDavid du Colombier void splxpc(u64int); 1299ef1f84bSDavid du Colombier void syncclock(void); 1309ef1f84bSDavid du Colombier void* sysexecregs(uintptr, ulong, ulong); 1319ef1f84bSDavid du Colombier uintptr sysexecstack(uintptr, int); 1329ef1f84bSDavid du Colombier void sysprocsetup(Proc*); 1339ef1f84bSDavid du Colombier void tssrsp0(u64int); 1349ef1f84bSDavid du Colombier void trapenable(int, void (*)(Ureg*, void*), void*, char*); 1359ef1f84bSDavid du Colombier void trapinit(void); 1369ef1f84bSDavid du Colombier int userureg(Ureg*); 137094d6818SDavid du Colombier void umeminit(void); 1389ef1f84bSDavid du Colombier void* vmap(uintmem, usize); 1399ef1f84bSDavid du Colombier void vsvminit(int); 1409ef1f84bSDavid du Colombier void vunmap(void*, usize); 1419ef1f84bSDavid du Colombier int (*waitfor)(int*, int); 1429ef1f84bSDavid du Colombier 1439ef1f84bSDavid du Colombier extern Mreg cr0get(void); 1449ef1f84bSDavid du Colombier extern void cr0put(Mreg); 1459ef1f84bSDavid du Colombier extern Mreg cr2get(void); 1469ef1f84bSDavid du Colombier extern Mreg cr3get(void); 1479ef1f84bSDavid du Colombier extern void cr3put(Mreg); 1489ef1f84bSDavid du Colombier extern Mreg cr4get(void); 1499ef1f84bSDavid du Colombier extern void cr4put(Mreg); 1509ef1f84bSDavid du Colombier extern void gdtget(void*); 1519ef1f84bSDavid du Colombier extern void gdtput(int, u64int, u16int); 1529ef1f84bSDavid du Colombier extern void idtput(int, u64int); 1539ef1f84bSDavid du Colombier extern u64int rdmsr(u32int); 1549ef1f84bSDavid du Colombier extern u64int rdtsc(void); 1559ef1f84bSDavid du Colombier extern void trput(u64int); 1569ef1f84bSDavid du Colombier extern void wrmsr(u32int, u64int); 1579ef1f84bSDavid du Colombier 1589ef1f84bSDavid du Colombier extern int islo(void); 1599ef1f84bSDavid du Colombier extern void spldone(void); 1609ef1f84bSDavid du Colombier extern Mreg splhi(void); 1619ef1f84bSDavid du Colombier extern Mreg spllo(void); 1629ef1f84bSDavid du Colombier extern void splx(Mreg); 1639ef1f84bSDavid du Colombier 1649ef1f84bSDavid du Colombier int cas32(void*, u32int, u32int); 1659ef1f84bSDavid du Colombier int cas64(void*, u64int, u64int); 1669ef1f84bSDavid du Colombier int tas32(void*); 1679ef1f84bSDavid du Colombier 1689ef1f84bSDavid du Colombier #define CASU(p, e, n) cas64((p), (u64int)(e), (u64int)(n)) 1699ef1f84bSDavid du Colombier #define CASV(p, e, n) cas64((p), (u64int)(e), (u64int)(n)) 1709ef1f84bSDavid du Colombier #define CASW(p, e, n) cas32((p), (e), (n)) 1719ef1f84bSDavid du Colombier #define TAS(addr) tas32((addr)) 1729ef1f84bSDavid du Colombier 1739ef1f84bSDavid du Colombier void touser(uintptr); 1749ef1f84bSDavid du Colombier void syscallentry(void); 1759ef1f84bSDavid du Colombier void syscallreturn(void); 1769ef1f84bSDavid du Colombier void sysrforkret(void); 1779ef1f84bSDavid du Colombier 1789ef1f84bSDavid du Colombier #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 1799ef1f84bSDavid du Colombier 1809ef1f84bSDavid du Colombier #define dcflush(a, b) 1819ef1f84bSDavid du Colombier 1829ef1f84bSDavid du Colombier #define PTR2UINT(p) ((uintptr)(p)) 1839ef1f84bSDavid du Colombier #define UINT2PTR(i) ((void*)(i)) 1849ef1f84bSDavid du Colombier 1859ef1f84bSDavid du Colombier //#define KADDR(a) UINT2PTR(kseg0+((uintptr)(a))) 1869ef1f84bSDavid du Colombier void* KADDR(uintptr); 1879ef1f84bSDavid du Colombier //#define PADDR(a) PTR2UINT(((uintptr)(a)) - kseg0) 1889ef1f84bSDavid du Colombier uintptr PADDR(void*); 1899ef1f84bSDavid du Colombier 1909ef1f84bSDavid du Colombier #define BIOSSEG(a) KADDR(((uint)(a))<<4) 1919ef1f84bSDavid du Colombier 1929ef1f84bSDavid du Colombier /* 1939ef1f84bSDavid du Colombier * apic.c 1949ef1f84bSDavid du Colombier */ 1959ef1f84bSDavid du Colombier extern int apiceoi(int); 1969ef1f84bSDavid du Colombier extern void apicinit(int, uintptr, int); 1979ef1f84bSDavid du Colombier extern int apicisr(int); 1989ef1f84bSDavid du Colombier extern int apiconline(void); 1999ef1f84bSDavid du Colombier extern void apicsipi(int, uintptr); 2009ef1f84bSDavid du Colombier extern void apictimerdisable(void); 2019ef1f84bSDavid du Colombier extern void apictimerenable(void); 2029ef1f84bSDavid du Colombier extern void apictimerintr(Ureg*, void*); 2039ef1f84bSDavid du Colombier extern void apictprput(int); 2049ef1f84bSDavid du Colombier 2059ef1f84bSDavid du Colombier extern void ioapicinit(int, uintmem); 206ffa640cdSDavid du Colombier extern void ioapicintrinit(int, int, int, int, int, u32int); 2079ef1f84bSDavid du Colombier extern void ioapiconline(void); 2089ef1f84bSDavid du Colombier 2099ef1f84bSDavid du Colombier /* 2109ef1f84bSDavid du Colombier * archk10.c 2119ef1f84bSDavid du Colombier */ 2129ef1f84bSDavid du Colombier extern void millidelay(int); 2139ef1f84bSDavid du Colombier 2149ef1f84bSDavid du Colombier /* 2159ef1f84bSDavid du Colombier * i8259.c 2169ef1f84bSDavid du Colombier */ 2179ef1f84bSDavid du Colombier extern int i8259init(int); 2189ef1f84bSDavid du Colombier extern int i8259irqdisable(int); 2199ef1f84bSDavid du Colombier extern int i8259irqenable(int); 2209ef1f84bSDavid du Colombier extern int i8259isr(int); 2219ef1f84bSDavid du Colombier 2229ef1f84bSDavid du Colombier /* 2239ef1f84bSDavid du Colombier * mp.c 2249ef1f84bSDavid du Colombier */ 2259ef1f84bSDavid du Colombier extern void mpsinit(void); 2269ef1f84bSDavid du Colombier 2279ef1f84bSDavid du Colombier /* 22859461365SDavid du Colombier * mpacpi.c 22959461365SDavid du Colombier */ 23059461365SDavid du Colombier extern void mpacpi(void); 23159461365SDavid du Colombier 23259461365SDavid du Colombier /* 2339ef1f84bSDavid du Colombier * sipi.c 2349ef1f84bSDavid du Colombier */ 2359ef1f84bSDavid du Colombier extern void sipi(void); 236