fns.h 11 KB

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