3 typedef struct Block Block;
4 typedef struct Chan Chan;
5 typedef struct Cname Cname;
6 typedef struct Dev Dev;
7 typedef struct Dirtab Dirtab;
8 typedef struct Proc Proc;
9 typedef struct Ref Ref;
10 typedef struct Rendez Rendez;
11 typedef struct Walkqid Walkqid;
12 typedef int Devgen(Chan*, Dirtab*, int, int, Dir*);
19 COPEN = 0x0001, /* for i/o */
20 CFREE = 0x0010, /* not in use */
38 Chan* next; /* allocation */
40 vlong offset; /* in file */
43 ushort mode; /* read/write */
46 int fid; /* for devmnt */
47 ulong iounit; /* chunk size for i/o; 0==default */
55 int alen; /* allocated length */
56 int len; /* strlen(s) */
67 Chan* (*attach)(char*);
68 Walkqid* (*walk)(Chan*, Chan*, char**, int);
69 int (*stat)(Chan*, uchar*, int);
70 Chan* (*open)(Chan*, int);
71 void (*create)(Chan*, char*, int, ulong);
73 long (*read)(Chan*, void*, long, vlong);
74 Block* (*bread)(Chan*, long, ulong);
75 long (*write)(Chan*, void*, long, vlong);
76 long (*bwrite)(Chan*, Block*, ulong);
77 void (*remove)(Chan*);
78 int (*wstat)(Chan*, uchar*, int);
98 Lock rlock; /* for rendsleep, rendwakeup, intr */
106 jmp_buf errlab[NERR];
107 char genbuf[128]; /* buffer used e.g. for last name element from namec */
112 extern Proc **privup;
115 extern Dev* devtab[];
119 void cnameclose(Cname*);
121 Chan* devattach(int, char*);
122 Block* devbread(Chan*, long, ulong);
123 long devbwrite(Chan*, Block*, ulong);
124 void devcreate(Chan*, char*, int, ulong);
125 void devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);
126 long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
129 Chan* devopen(Chan*, int, Dirtab*, int, Devgen*);
130 void devremove(Chan*);
132 int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);
133 Walkqid* devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);
134 int devwstat(Chan*, uchar*, int);
138 void kproc(char*, void(*)(void*), void*);
139 void mkqid(Qid*, vlong, ulong, int);
140 void nexterror(void);
142 Cname* newcname(char*);
144 void panic(char*, ...);
145 int readstr(ulong, char*, ulong, char*);
147 void* smalloc(ulong);
149 #define poperror() up->nerrlab--
150 #define waserror() (up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))
152 void initcompat(void);
153 void rendintr(void *v);
154 void rendclearintr(void);
155 void rendsleep(Rendez*, int(*)(void*), void*);
156 int rendwakeup(Rendez*);
158 int sysexport(int fd, Chan **roots, int nroots);
159 int errdepth(int ed);
160 void newup(char *name);
162 int exporter(Dev**, int*, int*);
163 int mounter(char *mntpt, int how, int fds, int n);
166 void screeninit(int, int, char*);
168 #pragma varargck argpos panic 1