compat.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. typedef struct Block Block;
  2. typedef struct Chan Chan;
  3. typedef struct Cname Cname;
  4. typedef struct Dev Dev;
  5. typedef struct Dirtab Dirtab;
  6. typedef struct Proc Proc;
  7. typedef struct Ref Ref;
  8. typedef struct Rendez Rendez;
  9. typedef struct Walkqid Walkqid;
  10. typedef int Devgen(Chan*, Dirtab*, int, int, Dir*);
  11. enum
  12. {
  13. KNAMELEN = 28,
  14. NERR = 15,
  15. COPEN = 0x0001, /* for i/o */
  16. CFREE = 0x0010, /* not in use */
  17. };
  18. struct Ref
  19. {
  20. Lock;
  21. int ref;
  22. };
  23. struct Rendez
  24. {
  25. Lock;
  26. Proc *p;
  27. };
  28. struct Chan
  29. {
  30. Ref;
  31. Chan* next; /* allocation */
  32. Chan* link;
  33. vlong offset; /* in file */
  34. ushort type;
  35. ulong dev;
  36. ushort mode; /* read/write */
  37. ushort flag;
  38. Qid qid;
  39. int fid; /* for devmnt */
  40. ulong iounit; /* chunk size for i/o; 0==default */
  41. void* aux;
  42. Cname *name;
  43. };
  44. struct Cname
  45. {
  46. Ref;
  47. int alen; /* allocated length */
  48. int len; /* strlen(s) */
  49. char *s;
  50. };
  51. struct Dev
  52. {
  53. int dc;
  54. char* name;
  55. void (*reset)(void);
  56. void (*init)(void);
  57. Chan* (*attach)(char*);
  58. Walkqid* (*walk)(Chan*, Chan*, char**, int);
  59. int (*stat)(Chan*, uchar*, int);
  60. Chan* (*open)(Chan*, int);
  61. void (*create)(Chan*, char*, int, ulong);
  62. void (*close)(Chan*);
  63. long (*read)(Chan*, void*, long, vlong);
  64. Block* (*bread)(Chan*, long, ulong);
  65. long (*write)(Chan*, void*, long, vlong);
  66. long (*bwrite)(Chan*, Block*, ulong);
  67. void (*remove)(Chan*);
  68. int (*wstat)(Chan*, uchar*, int);
  69. };
  70. struct Dirtab
  71. {
  72. char name[KNAMELEN];
  73. Qid qid;
  74. vlong length;
  75. long perm;
  76. };
  77. struct Walkqid
  78. {
  79. Chan *clone;
  80. int nqid;
  81. Qid qid[1];
  82. };
  83. struct Proc
  84. {
  85. Lock rlock; /* for rendsleep, rendwakeup, intr */
  86. Rendez *r;
  87. int intr;
  88. char name[KNAMELEN];
  89. char *user;
  90. char error[ERRMAX];
  91. int nerrlab;
  92. jmp_buf errlab[NERR];
  93. char genbuf[128]; /* buffer used e.g. for last name element from namec */
  94. };
  95. #define DEVDOTDOT -1
  96. extern Proc **privup;
  97. #define up (*privup)
  98. extern char *eve;
  99. extern Dev* devtab[];
  100. Chan* cclone(Chan*);
  101. void cclose(Chan*);
  102. void cnameclose(Cname*);
  103. int decref(Ref*);
  104. Chan* devattach(int, char*);
  105. Block* devbread(Chan*, long, ulong);
  106. long devbwrite(Chan*, Block*, ulong);
  107. void devcreate(Chan*, char*, int, ulong);
  108. void devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);
  109. long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
  110. Devgen devgen;
  111. void devinit(void);
  112. Chan* devopen(Chan*, int, Dirtab*, int, Devgen*);
  113. void devremove(Chan*);
  114. void devreset(void);
  115. int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);
  116. Walkqid* devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);
  117. int devwstat(Chan*, uchar*, int);
  118. void error(char*);
  119. int incref(Ref*);
  120. void isdir(Chan*);
  121. void kproc(char*, void(*)(void*), void*);
  122. void mkqid(Qid*, vlong, ulong, int);
  123. void nexterror(void);
  124. Chan* newchan(void);
  125. Cname* newcname(char*);
  126. int openmode(ulong);
  127. void panic(char*, ...);
  128. int readstr(ulong, char*, ulong, char*);
  129. long seconds(void);
  130. void* smalloc(ulong);
  131. #define poperror() up->nerrlab--
  132. #define waserror() (up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))
  133. void initcompat(void);
  134. void rendintr(void *v);
  135. void rendclearintr(void);
  136. void rendsleep(Rendez*, int(*)(void*), void*);
  137. int rendwakeup(Rendez*);
  138. void kexit(void);
  139. int sysexport(int fd, Chan **roots, int nroots);
  140. int errdepth(int ed);
  141. void newup(char *name);
  142. int exporter(Dev**, int*, int*);
  143. int mounter(char *mntpt, int how, int fds, int n);
  144. void shutdown(void);
  145. void screeninit(int, int, char*);