123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #define Rendez KRendez
- typedef struct Block Block;
- typedef struct Chan Chan;
- typedef struct Cname Cname;
- typedef struct Dev Dev;
- typedef struct Dirtab Dirtab;
- typedef struct Proc Proc;
- typedef struct Ref Ref;
- typedef struct Rendez Rendez;
- typedef struct Walkqid Walkqid;
- typedef int Devgen(Chan*, Dirtab*, int, int, Dir*);
- enum
- {
- KNAMELEN = 28,
- NERR = 15,
- COPEN = 0x0001, /* for i/o */
- CFREE = 0x0010, /* not in use */
- };
- struct Ref
- {
- Lock;
- int ref;
- };
- struct Rendez
- {
- Lock;
- Proc *p;
- };
- struct Chan
- {
- Ref;
- Chan* next; /* allocation */
- Chan* link;
- vlong offset; /* in file */
- ushort type;
- ulong dev;
- ushort mode; /* read/write */
- ushort flag;
- Qid qid;
- int fid; /* for devmnt */
- ulong iounit; /* chunk size for i/o; 0==default */
- void* aux;
- Cname *name;
- };
- struct Cname
- {
- Ref;
- int alen; /* allocated length */
- int len; /* strlen(s) */
- char *s;
- };
- struct Dev
- {
- int dc;
- char* name;
- void (*reset)(void);
- void (*init)(void);
- Chan* (*attach)(char*);
- Walkqid* (*walk)(Chan*, Chan*, char**, int);
- int (*stat)(Chan*, uchar*, int);
- Chan* (*open)(Chan*, int);
- void (*create)(Chan*, char*, int, ulong);
- void (*close)(Chan*);
- long (*read)(Chan*, void*, long, vlong);
- Block* (*bread)(Chan*, long, ulong);
- long (*write)(Chan*, void*, long, vlong);
- long (*bwrite)(Chan*, Block*, ulong);
- void (*remove)(Chan*);
- int (*wstat)(Chan*, uchar*, int);
- };
- struct Dirtab
- {
- char name[KNAMELEN];
- Qid qid;
- vlong length;
- long perm;
- };
- struct Walkqid
- {
- Chan *clone;
- int nqid;
- Qid qid[1];
- };
- struct Proc
- {
- Lock rlock; /* for rendsleep, rendwakeup, intr */
- Rendez *r;
- int intr;
- char name[KNAMELEN];
- char *user;
- char error[ERRMAX];
- int nerrlab;
- jmp_buf errlab[NERR];
- char genbuf[128]; /* buffer used e.g. for last name element from namec */
- };
- #define DEVDOTDOT -1
- extern Proc **privup;
- #define up (*privup)
- extern char *eve;
- extern Dev* devtab[];
- Chan* cclone(Chan*);
- void cclose(Chan*);
- void cnameclose(Cname*);
- int decref(Ref*);
- Chan* devattach(int, char*);
- Block* devbread(Chan*, long, ulong);
- long devbwrite(Chan*, Block*, ulong);
- void devcreate(Chan*, char*, int, ulong);
- void devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);
- long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
- Devgen devgen;
- void devinit(void);
- Chan* devopen(Chan*, int, Dirtab*, int, Devgen*);
- void devremove(Chan*);
- void devreset(void);
- int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);
- Walkqid* devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);
- int devwstat(Chan*, uchar*, int);
- void error(char*);
- int incref(Ref*);
- void isdir(Chan*);
- void kproc(char*, void(*)(void*), void*);
- void mkqid(Qid*, vlong, ulong, int);
- void nexterror(void);
- Chan* newchan(void);
- Cname* newcname(char*);
- int openmode(ulong);
- void panic(char*, ...);
- int readstr(ulong, char*, ulong, char*);
- long seconds(void);
- void* smalloc(ulong);
- #define poperror() up->nerrlab--
- #define waserror() (up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))
- void initcompat(void);
- void rendintr(void *v);
- void rendclearintr(void);
- void rendsleep(Rendez*, int(*)(void*), void*);
- int rendwakeup(Rendez*);
- void kexit(void);
- int sysexport(int fd, Chan **roots, int nroots);
- int errdepth(int ed);
- void newup(char *name);
- int exporter(Dev**, int*, int*);
- int mounter(char *mntpt, int how, int fds, int n);
- void shutdown(void);
- void screeninit(int, int, char*);
- #pragma varargck argpos panic 1
|