1 #include "../port/portfns.h" 2 3 void aamloop(int); 4 int acpiinit(void); 5 Dirtab* addarchfile(char*, int, long(*)(Chan*,void*,long,vlong), long(*)(Chan*,void*,long,vlong)); 6 void archfmtinstall(void); 7 void archinit(void); 8 int archmmu(void); 9 void archreset(void); 10 vlong archhz(void); 11 int asmfree(uvlong, uvlong, int); 12 uvlong asmalloc(uvlong, uvlong, int, int); 13 void asminit(void); 14 void asmmapinit(u64int, u64int, int); 15 void asmmodinit(u32int, u32int, char*); 16 void cgaconsputs(char*, int); 17 void cgainit(void); 18 void cgapost(int); 19 #define clearmmucache() /* x86 doesn't have one */ 20 void (*coherence)(void); 21 int corecolor(int); 22 u32int cpuid(u32int, u32int, u32int[4]); 23 int dbgprint(char*, ...); 24 #define decref(r) adec(&(r)->ref) 25 void delay(int); 26 #define evenaddr(x) /* x86 doesn't care */ 27 int fpudevprocio(Proc*, void*, long, uintptr, int); 28 void fpuinit(void); 29 void fpunoted(void); 30 void fpunotify(Ureg*); 31 void fpuprocrestore(Proc*); 32 void fpuprocsave(Proc*); 33 void fpusysprocsetup(Proc*); 34 void fpusysrfork(Ureg*); 35 void fpusysrforkchild(Proc*, Proc*); 36 char* getconf(char*); 37 void halt(void); 38 int i8042auxcmd(int); 39 int i8042auxcmds(uchar*, int); 40 void i8042auxenable(void (*)(int, int)); 41 void i8042reset(void); 42 Uart* i8250console(char*); 43 void* i8250alloc(int, int, int); 44 void i8250mouse(char*, int (*)(Queue*, int), int); 45 void i8250setmouseputc(char*, int (*)(Queue*, int)); 46 vlong i8254hz(u32int[2][4]); 47 void idlehands(void); 48 void idthandlers(void); 49 int inb(int); 50 #define incref(r) ainc(&(r)->ref) 51 void insb(int, void*, int); 52 ushort ins(int); 53 void inss(int, void*, int); 54 ulong inl(int); 55 void insl(int, void*, int); 56 int intrdisable(void*); 57 void* intrenable(int, void (*)(Ureg*, void*), void*, int, char*); 58 void invlpg(uintptr); 59 void iofree(int); 60 void ioinit(void); 61 int iounused(int, int); 62 int ioalloc(int, int, int, char*); 63 int ioreserve(int, int, int, char*); 64 int iprint(char*, ...); 65 int isaconfig(char*, int, ISAConf*); 66 void kbdenable(void); 67 void kbdinit(void); 68 void kexit(Ureg*); 69 #define kmapinval() 70 void lfence(void); 71 void links(void); 72 void machinit(void); 73 void mach0init(void); 74 void mapraminit(uvlong, uvlong); 75 void mapupainit(uvlong, ulong); 76 int memcolor(uintmem, uintmem*); 77 void meminit(void); 78 void mfence(void); 79 void mmucachectl(Page*, uint); 80 void mmuflushtlb(u64int); 81 void mmuinit(void); 82 u64int mmuphysaddr(uintptr); 83 int mmuwalk(uintptr, int, PTE**, u64int (*)(usize)); 84 int multiboot(u32int, u32int, int); 85 void ndnr(void); 86 uchar nvramread(int); 87 void nvramwrite(int, uchar); 88 void optionsinit(char*); 89 void outb(int, int); 90 void outsb(int, void*, int); 91 void outs(int, ushort); 92 void outss(int, void*, int); 93 void outl(int, ulong); 94 void outsl(int, void*, int); 95 void pause(void); 96 int pciscan(int, Pcidev**); 97 ulong pcibarsize(Pcidev*, int); 98 int pcicap(Pcidev*, int); 99 int pcihtcap(Pcidev*, int); 100 int pcienumcaps(Pcidev*, int (*fmatch)(Pcidev*, int, int, int), int); 101 int pcicfgr8(Pcidev*, int); 102 int pcicfgr16(Pcidev*, int); 103 int pcicfgr32(Pcidev*, int); 104 void pcicfgw8(Pcidev*, int, int); 105 void pcicfgw16(Pcidev*, int, int); 106 void pcicfgw32(Pcidev*, int, int); 107 void pciclrbme(Pcidev*); 108 void pciclrioe(Pcidev*); 109 void pciclrmwi(Pcidev*); 110 int pcigetpms(Pcidev*); 111 void pcihinv(Pcidev*); 112 uchar pciipin(Pcidev*, uchar); 113 Pcidev* pcimatch(Pcidev*, int, int); 114 Pcidev* pcimatchtbdf(int); 115 void pcireset(void); 116 void pcisetbme(Pcidev*); 117 void pcisetioe(Pcidev*); 118 void pcisetmwi(Pcidev*); 119 int pcisetpms(Pcidev*, int); 120 void (*pmcupdate)(void); 121 void printcpufreq(void); 122 int screenprint(char*, ...); /* debugging */ 123 void sfence(void); 124 void spldone(void); 125 u64int splhi(void); 126 u64int spllo(void); 127 void splx(u64int); 128 void splxpc(u64int); 129 void syncclock(void); 130 void* sysexecregs(uintptr, ulong, ulong); 131 uintptr sysexecstack(uintptr, int); 132 void sysprocsetup(Proc*); 133 void tssrsp0(u64int); 134 void trapenable(int, void (*)(Ureg*, void*), void*, char*); 135 void trapinit(void); 136 int userureg(Ureg*); 137 void umeminit(void); 138 void* vmap(uintmem, usize); 139 void vsvminit(int); 140 void vunmap(void*, usize); 141 int (*waitfor)(int*, int); 142 143 extern Mreg cr0get(void); 144 extern void cr0put(Mreg); 145 extern Mreg cr2get(void); 146 extern Mreg cr3get(void); 147 extern void cr3put(Mreg); 148 extern Mreg cr4get(void); 149 extern void cr4put(Mreg); 150 extern void gdtget(void*); 151 extern void gdtput(int, u64int, u16int); 152 extern void idtput(int, u64int); 153 extern u64int rdmsr(u32int); 154 extern u64int rdtsc(void); 155 extern void trput(u64int); 156 extern void wrmsr(u32int, u64int); 157 158 extern int islo(void); 159 extern void spldone(void); 160 extern Mreg splhi(void); 161 extern Mreg spllo(void); 162 extern void splx(Mreg); 163 164 int cas32(void*, u32int, u32int); 165 int cas64(void*, u64int, u64int); 166 int tas32(void*); 167 168 #define CASU(p, e, n) cas64((p), (u64int)(e), (u64int)(n)) 169 #define CASV(p, e, n) cas64((p), (u64int)(e), (u64int)(n)) 170 #define CASW(p, e, n) cas32((p), (e), (n)) 171 #define TAS(addr) tas32((addr)) 172 173 void touser(uintptr); 174 void syscallentry(void); 175 void syscallreturn(void); 176 void sysrforkret(void); 177 178 #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) 179 180 #define dcflush(a, b) 181 182 #define PTR2UINT(p) ((uintptr)(p)) 183 #define UINT2PTR(i) ((void*)(i)) 184 185 //#define KADDR(a) UINT2PTR(kseg0+((uintptr)(a))) 186 void* KADDR(uintptr); 187 //#define PADDR(a) PTR2UINT(((uintptr)(a)) - kseg0) 188 uintptr PADDR(void*); 189 190 #define BIOSSEG(a) KADDR(((uint)(a))<<4) 191 192 /* 193 * apic.c 194 */ 195 extern int apiceoi(int); 196 extern void apicinit(int, uintptr, int); 197 extern int apicisr(int); 198 extern int apiconline(void); 199 extern void apicsipi(int, uintptr); 200 extern void apictimerdisable(void); 201 extern void apictimerenable(void); 202 extern void apictimerintr(Ureg*, void*); 203 extern void apictprput(int); 204 205 extern void ioapicinit(int, uintmem); 206 extern void ioapicintrinit(int, int, int, int, int, u32int); 207 extern void ioapiconline(void); 208 209 /* 210 * archk10.c 211 */ 212 extern void millidelay(int); 213 214 /* 215 * i8259.c 216 */ 217 extern int i8259init(int); 218 extern int i8259irqdisable(int); 219 extern int i8259irqenable(int); 220 extern int i8259isr(int); 221 222 /* 223 * mp.c 224 */ 225 extern void mpsinit(void); 226 227 /* 228 * mpacpi.c 229 */ 230 extern void mpacpi(void); 231 232 /* 233 * sipi.c 234 */ 235 extern void sipi(void); 236