1 void _assert(char*); 2 void accounttime(void); 3 Timer* addclock0link(void (*)(void), int); 4 int addphysseg(Physseg*); 5 void addbootfile(char*, uchar*, ulong); 6 void addwatchdog(Watchdog*); 7 Block* adjustblock(Block*, int); 8 void alarmkproc(void*); 9 Block* allocb(int); 10 int anyhigher(void); 11 int anyready(void); 12 Image* attachimage(int, Chan*, ulong, ulong); 13 Page* auxpage(void); 14 Block* bl2mem(uchar*, Block*, int); 15 int blocklen(Block*); 16 ulong blocksize(ulong); 17 void bootlinks(void); 18 void cachedel(Image*, ulong); 19 void cachepage(Page*, Image*); 20 void callwithureg(void(*)(Ureg*)); 21 char* chanpath(Chan*); 22 int canlock(Lock*); 23 int canpage(Proc*); 24 int canqlock(QLock*); 25 int canrlock(RWlock*); 26 void chandevinit(void); 27 void chandevreset(void); 28 void chandevshutdown(void); 29 void chanfree(Chan*); 30 void checkalarms(void); 31 void checkb(Block*, char*); 32 void cinit(void); 33 Chan* cclone(Chan*); 34 void cclose(Chan*); 35 void ccloseq(Chan*); 36 void closeegrp(Egrp*); 37 void closefgrp(Fgrp*); 38 void closepgrp(Pgrp*); 39 void closergrp(Rgrp*); 40 long clrfpintr(void); 41 int clz(ulong); 42 void cmderror(Cmdbuf*, char*); 43 int cmount(Chan**, Chan*, int, char*); 44 void confinit(void); 45 int consactive(void); 46 void (*consdebug)(void); 47 void copen(Chan*); 48 Block* concatblock(Block*); 49 Block* copyblock(Block*, int); 50 void copypage(Page*, Page*); 51 void countpagerefs(ulong*, int); 52 void cpuactive(uint); 53 void cpuinactive(uint); 54 int cread(Chan*, uchar*, int, vlong); 55 void cunmount(Chan*, Chan*); 56 void cupdate(Chan*, uchar*, int, vlong); 57 void cwrite(Chan*, uchar*, int, vlong); 58 ulong dbgpc(Proc*); 59 long decref(Ref*); 60 int decrypt(void*, void*, int); 61 void delay(int); 62 Proc* dequeueproc(Schedq*, Proc*); 63 Chan* devattach(int, char*); 64 Block* devbread(Chan*, long, ulong); 65 long devbwrite(Chan*, Block*, ulong); 66 Chan* devclone(Chan*); 67 int devconfig(int, char *, DevConf *); 68 void devcreate(Chan*, char*, int, ulong); 69 void devdir(Chan*, Qid, char*, vlong, char*, long, Dir*); 70 long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*); 71 Devgen devgen; 72 void devinit(void); 73 int devno(int, int); 74 Chan* devopen(Chan*, int, Dirtab*, int, Devgen*); 75 void devpermcheck(char*, ulong, int); 76 void devpower(int); 77 void devremove(Chan*); 78 void devreset(void); 79 void devshutdown(void); 80 int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*); 81 Walkqid* devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*); 82 int devwstat(Chan*, uchar*, int); 83 void drawactive(int); 84 void drawcmap(void); 85 void dumpaproc(Proc*); 86 void dumpregs(Ureg*); 87 void dumpstack(void); 88 Fgrp* dupfgrp(Fgrp*); 89 int duppage(Page*); 90 void dupswap(Page*); 91 void edfinit(Proc*); 92 char* edfadmit(Proc*); 93 int edfready(Proc*); 94 void edfrecord(Proc*); 95 void edfrun(Proc*, int); 96 void edfstop(Proc*); 97 void edfyield(void); 98 int emptystr(char*); 99 int encrypt(void*, void*, int); 100 void envcpy(Egrp*, Egrp*); 101 int eqchan(Chan*, Chan*, int); 102 int eqchantdqid(Chan*, int, int, Qid, int); 103 int eqqid(Qid, Qid); 104 void error(char*); 105 long execregs(ulong, ulong, ulong); 106 void exhausted(char*); 107 void exit(int); 108 uvlong fastticks(uvlong*); 109 uvlong fastticks2ns(uvlong); 110 uvlong fastticks2us(uvlong); 111 int fault(ulong, int); 112 void fdclose(int, int); 113 Chan* fdtochan(int, int, int, int); 114 int findmount(Chan**, Mhead**, int, int, Qid); 115 int fixfault(Segment*, ulong, int, int); 116 void flushmmu(void); 117 void forceclosefgrp(void); 118 void forkchild(Proc*, Ureg*); 119 void forkret(void); 120 void free(void*); 121 void freeb(Block*); 122 void freeblist(Block*); 123 int freebroken(void); 124 void freepte(Segment*, Pte*); 125 void getcolor(ulong, ulong*, ulong*, ulong*); 126 ulong getmalloctag(void*); 127 ulong getrealloctag(void*); 128 void gotolabel(Label*); 129 char* getconfenv(void); 130 int haswaitq(void*); 131 long hostdomainwrite(char*, int); 132 long hostownerwrite(char*, int); 133 void hzsched(void); 134 Block* iallocb(int); 135 void iallocsummary(void); 136 long ibrk(ulong, int); 137 void ilock(Lock*); 138 void iunlock(Lock*); 139 long incref(Ref*); 140 void initmark(Watermark *, int, char *); 141 void initseg(void); 142 int iprint(char*, ...); 143 int iscpuactive(uint); 144 void isdir(Chan*); 145 int iseve(void); 146 int islo(void); 147 Segment* isoverlap(Proc*, ulong, int); 148 int ispages(void*); 149 int isphysseg(char*); 150 #define ISPOW2(i) (((i) & ((i) - 1)) == 0) /* see Hacker's Delight */ 151 int ispow2(uvlong); 152 void ixsummary(void); 153 int kbdcr2nl(Queue*, int); 154 int kbdgetmap(uint, int*, int*, Rune*); 155 int kbdputc(Queue*, int); 156 void kbdputmap(ushort, ushort, Rune); 157 void kickpager(void); 158 void killbig(char*); 159 void kproc(char*, void(*)(void*), void*); 160 void kprocchild(Proc*, void (*)(void*), void*); 161 void (*kproftimer)(ulong); 162 void ksetenv(char*, char*, int); 163 void kstrcpy(char*, char*, int); 164 void kstrdup(char**, char*); 165 ulong l2be(long); 166 long latin1(Rune*, int); 167 int lock(Lock*); 168 void logopen(Log*); 169 int log2(ulong); 170 void logclose(Log*); 171 char* logctl(Log*, int, char**, Logflag*); 172 void logn(Log*, int, void*, int); 173 long logread(Log*, void*, ulong, long); 174 void log(Log*, int, char*, ...); 175 Cmdtab* lookupcmd(Cmdbuf*, Cmdtab*, int); 176 Page* lookpage(Image*, ulong); 177 #define MS2NS(n) (((vlong)(n))*1000000LL) 178 void machinit(void); 179 void* mallocz(ulong, int); 180 void* malloc(ulong); 181 void* mallocalign(ulong, ulong, long, ulong); 182 void mallocsummary(void); 183 Block* mem2bl(uchar*, int); 184 Block* mem2block(void *, ulong, int); 185 void mfreeseg(Segment*, ulong, int); 186 void microdelay(int); 187 uvlong mk64fract(uvlong, uvlong); 188 void mkqid(Qid*, vlong, ulong, int); 189 void mmurelease(Proc*); 190 void mmuswitch(Proc*); 191 Chan* mntauth(Chan*, char*); 192 long mntversion(Chan*, char*, int, int); 193 void mouseresize(void); 194 void mountfree(Mount*); 195 ulong ms2tk(ulong); 196 ulong msize(void*); 197 ulong ms2tk(ulong); 198 uvlong ms2fastticks(ulong); 199 void mul64fract(uvlong*, uvlong, uvlong); 200 void muxclose(Mnt*); 201 Chan* namec(char*, int, int, ulong); 202 void nameerror(char*, char*); 203 Chan* newchan(void); 204 int newfd(Chan*); 205 Mhead* newmhead(Chan*); 206 Mount* newmount(Mhead*, Chan*, int, char*); 207 Page* newpage(int, Segment **, ulong); 208 Path* newpath(char*); 209 Pgrp* newpgrp(void); 210 Rgrp* newrgrp(void); 211 Proc* newproc(void); 212 void nexterror(void); 213 void notemark(Watermark *, int); 214 int notify(Ureg*); 215 int nrand(int); 216 uvlong ns2fastticks(uvlong); 217 int okaddr(ulong, ulong, int); 218 int openmode(ulong); 219 Block* packblock(Block*); 220 Block* padblock(Block*, int); 221 void pagechainhead(Page*); 222 void pageinit(void); 223 ulong pagenumber(Page*); 224 void pagersummary(void); 225 void pageunchain(Page *p); 226 void panic(char*, ...); 227 Cmdbuf* parsecmd(char *a, int n); 228 void pathclose(Path*); 229 ulong perfticks(void); 230 void pexit(char*, int); 231 void pgrpcpy(Pgrp*, Pgrp*); 232 void pgrpnote(ulong, char*, long, int); 233 void pio(Segment *, ulong, ulong, Page **); 234 #define poperror() up->nerrlab-- 235 void portcountpagerefs(ulong*, int); 236 int postnote(Proc*, int, char*, int); 237 int pprint(char*, ...); 238 int preempted(void); 239 void prflush(void); 240 void printinit(void); 241 ulong procalarm(ulong); 242 void procctl(Proc*); 243 void procdump(void); 244 int procfdprint(Chan*, int, int, char*, int); 245 int procindex(ulong); 246 void procinit0(void); 247 void procflushseg(Segment*); 248 void procpriority(Proc*, int, int); 249 Proc* proctab(int); 250 extern void (*proctrace)(Proc*, int, vlong); 251 void procwired(Proc*, int); 252 Pte* ptealloc(void); 253 Pte* ptecpy(Pte*); 254 int pullblock(Block**, int); 255 Block* pullupblock(Block*, int); 256 Block* pullupqueue(Queue*, int); 257 void putimage(Image*); 258 void putmhead(Mhead*); 259 void putmmu(ulong, ulong, Page*); 260 void putpage(Page*); 261 void putseg(Segment*); 262 void putstrn(char*, int); 263 void putswap(Page*); 264 ulong pwait(Waitmsg*); 265 void qaddlist(Queue*, Block*); 266 Block* qbread(Queue*, int); 267 long qbwrite(Queue*, Block*); 268 Queue* qbypass(void (*)(void*, Block*), void*); 269 int qcanread(Queue*); 270 void qclose(Queue*); 271 int qconsume(Queue*, void*, int); 272 Block* qcopy(Queue*, int, ulong); 273 int qdiscard(Queue*, int); 274 void qflush(Queue*); 275 void qfree(Queue*); 276 int qfull(Queue*); 277 Block* qget(Queue*); 278 void qhangup(Queue*, char*); 279 int qisclosed(Queue*); 280 int qiwrite(Queue*, void*, int); 281 int qlen(Queue*); 282 void qlock(QLock*); 283 Queue* qopen(int, int, void (*)(void*), void*); 284 int qpass(Queue*, Block*); 285 int qpassnolim(Queue*, Block*); 286 int qproduce(Queue*, void*, int); 287 void qputback(Queue*, Block*); 288 long qread(Queue*, void*, int); 289 Block* qremove(Queue*); 290 void qreopen(Queue*); 291 void qsetlimit(Queue*, int); 292 void qunlock(QLock*); 293 int qwindow(Queue*); 294 int qwrite(Queue*, void*, int); 295 void qnoblock(Queue*, int); 296 int rand(void); 297 void randominit(void); 298 ulong randomread(void*, ulong); 299 void rdb(void); 300 void readn(Chan *, void *, long); 301 int readnum(ulong, char*, ulong, ulong, int); 302 int readstr(ulong, char*, ulong, char*); 303 void ready(Proc*); 304 void* realloc(void *v, ulong size); 305 void rebootcmd(int, char**); 306 void reboot(void*, void*, ulong); 307 void relocateseg(Segment*, ulong); 308 void renameuser(char*, char*); 309 void resched(char*); 310 void resrcwait(char*); 311 int return0(void*); 312 void rlock(RWlock*); 313 long rtctime(void); 314 void runlock(RWlock*); 315 Proc* runproc(void); 316 void savefpregs(FPsave*); 317 void sched(void); 318 void scheddump(void); 319 void schedinit(void); 320 void (*screenputs)(char*, int); 321 long seconds(void); 322 ulong segattach(Proc*, ulong, char *, ulong, ulong); 323 void segclock(ulong); 324 void segpage(Segment*, Page*); 325 char* seprintmark(char *, char *, Watermark *); 326 int setcolor(ulong, ulong, ulong, ulong); 327 void setkernur(Ureg*, Proc*); 328 int setlabel(Label*); 329 void setmalloctag(void*, ulong); 330 void setrealloctag(void*, ulong); 331 void setregisters(Ureg*, char*, char*, int); 332 void setswapchan(Chan*); 333 char* skipslash(char*); 334 void sleep(Rendez*, int(*)(void*), void*); 335 void* smalloc(ulong); 336 int splhi(void); 337 int spllo(void); 338 void splx(int); 339 void splxpc(int); 340 char* srvname(Chan*); 341 int swapcount(ulong); 342 int swapfull(void); 343 void swapinit(void); 344 void timeradd(Timer*); 345 void timerdel(Timer*); 346 void timersinit(void); 347 void timerintr(Ureg*, Tval); 348 void timerset(Tval); 349 ulong tk2ms(ulong); 350 #define TK2MS(x) ((x)*(1000/HZ)) 351 uvlong tod2fastticks(vlong); 352 vlong todget(vlong*); 353 void todsetfreq(vlong); 354 void todinit(void); 355 void todset(vlong, vlong, int); 356 Block* trimblock(Block*, int, int); 357 void tsleep(Rendez*, int (*)(void*), void*, ulong); 358 int uartctl(Uart*, char*); 359 int uartgetc(void); 360 void uartkick(void*); 361 void uartmouse(Uart*, int (*)(Queue*, int), int); 362 void uartsetmouseputc(Uart*, int (*)(Queue*, int)); 363 void uartputc(int); 364 void uartputs(char*, int); 365 void uartrecv(Uart*, char); 366 int uartstageoutput(Uart*); 367 void unbreak(Proc*); 368 void uncachepage(Page*); 369 long unionread(Chan*, void*, long); 370 void unlock(Lock*); 371 uvlong us2fastticks(uvlong); 372 void userinit(void); 373 ulong userpc(void); 374 long userwrite(char*, int); 375 void validaddr(ulong, ulong, int); 376 void validname(char*, int); 377 char* validnamedup(char*, int); 378 void validstat(uchar*, int); 379 void* vmemchr(void*, int, int); 380 Proc* wakeup(Rendez*); 381 int walk(Chan**, char**, int, int, int*); 382 void wlock(RWlock*); 383 void wunlock(RWlock*); 384 void* xalloc(ulong); 385 void* xallocz(ulong, int); 386 void xfree(void*); 387 void xhole(ulong, ulong); 388 void xinit(void); 389 int xmerge(void*, void*); 390 void* xspanalloc(ulong, int, ulong); 391 void xsummary(void); 392 void yield(void); 393 Segment* data2txt(Segment*); 394 Segment* dupseg(Segment**, int, int); 395 Segment* newseg(int, ulong, ulong); 396 Segment* seg(Proc*, ulong, int); 397 void hnputv(void*, uvlong); 398 void hnputl(void*, uint); 399 void hnputs(void*, ushort); 400 uvlong nhgetv(void*); 401 uint nhgetl(void*); 402 ushort nhgets(void*); 403 ulong µs(void); 404 long ainc(long*); 405 long adec(long*); 406 long lcycles(void); 407 408 #pragma varargck argpos iprint 1 409 #pragma varargck argpos panic 1 410 #pragma varargck argpos pprint 1 411