13e12c5d1SDavid du Colombier typedef struct Chan Chan; 23e12c5d1SDavid du Colombier typedef struct Command Command; 33e12c5d1SDavid du Colombier typedef struct Conf Conf; 43e12c5d1SDavid du Colombier typedef struct Cons Cons; 53e12c5d1SDavid du Colombier typedef struct Devcall Devcall; 63e12c5d1SDavid du Colombier 79a747e4fSDavid du Colombier #define MAXBUFSIZE (16*1024) /* max. buffer size */ 89a747e4fSDavid du Colombier 93e12c5d1SDavid du Colombier #include "portdat.h" 103e12c5d1SDavid du Colombier 113e12c5d1SDavid du Colombier struct Chan 123e12c5d1SDavid du Colombier { 133e12c5d1SDavid du Colombier int chan; /* fd request came in on */ 149a747e4fSDavid du Colombier QLock rlock, wlock; /* lock for reading/writing messages on chan */ 159a747e4fSDavid du Colombier int type; 163e12c5d1SDavid du Colombier int flags; 173e12c5d1SDavid du Colombier long whotime; 183e12c5d1SDavid du Colombier File* flist; /* base of file structures */ 193e12c5d1SDavid du Colombier Lock flock; /* manipulate flist */ 207dd7cddfSDavid du Colombier RWLock reflock; /* lock for Tflush */ 219a747e4fSDavid du Colombier int msize; /* version */ 229a747e4fSDavid du Colombier int authed; /* someone other than ``none'' has authed */ 2359cc4ca5SDavid du Colombier 249a747e4fSDavid du Colombier /* 9p1 auth */ 259a747e4fSDavid du Colombier uchar chal[8]; 269a747e4fSDavid du Colombier uchar rchal[8]; 279a747e4fSDavid du Colombier int idoffset; 289a747e4fSDavid du Colombier int idvec; 2959cc4ca5SDavid du Colombier Lock idlock; 303e12c5d1SDavid du Colombier }; 313e12c5d1SDavid du Colombier 323e12c5d1SDavid du Colombier /* 333e12c5d1SDavid du Colombier * console cons.flag flags 343e12c5d1SDavid du Colombier */ 353e12c5d1SDavid du Colombier enum 363e12c5d1SDavid du Colombier { 377dd7cddfSDavid du Colombier Fchat = (1<<0), /* print out filesys rpc traffic */ 383e12c5d1SDavid du Colombier Fuid = (1<<2), /* print out uids */ 393e12c5d1SDavid du Colombier /* debugging flags for drivers */ 403e12c5d1SDavid du Colombier }; 413e12c5d1SDavid du Colombier 423e12c5d1SDavid du Colombier struct Cons 433e12c5d1SDavid du Colombier { 443e12c5d1SDavid du Colombier int flags; /* overall flags for all channels */ 453e12c5d1SDavid du Colombier int uid; /* botch -- used to get uid on cons_create */ 463e12c5d1SDavid du Colombier int gid; /* botch -- used to get gid on cons_create */ 473e12c5d1SDavid du Colombier int allow; /* no-protection flag */ 483e12c5d1SDavid du Colombier long offset; /* used to read files, c.f. fchar */ 493e12c5d1SDavid du Colombier char* arg; /* pointer to remaining line */ 503e12c5d1SDavid du Colombier 5159cc4ca5SDavid du Colombier Chan *chan; /* console channel */ 5259cc4ca5SDavid du Colombier Chan *srvchan; /* local server channel */ 533e12c5d1SDavid du Colombier 543e12c5d1SDavid du Colombier Filter work; /* thruput in messages */ 553e12c5d1SDavid du Colombier Filter rate; /* thruput in bytes */ 563e12c5d1SDavid du Colombier Filter bhit; /* getbufs that hit */ 573e12c5d1SDavid du Colombier Filter bread; /* getbufs that miss and read */ 583e12c5d1SDavid du Colombier Filter binit; /* getbufs that miss and dont read */ 593e12c5d1SDavid du Colombier Filter tags[MAXTAG]; /* reads of each type of block */ 603e12c5d1SDavid du Colombier }; 613e12c5d1SDavid du Colombier 623e12c5d1SDavid du Colombier struct Conf 633e12c5d1SDavid du Colombier { 643e12c5d1SDavid du Colombier ulong niobuf; /* number of iobufs to allocate */ 653e12c5d1SDavid du Colombier ulong nuid; /* distinct uids */ 663e12c5d1SDavid du Colombier ulong uidspace; /* space for uid names -- derrived from nuid */ 673e12c5d1SDavid du Colombier ulong gidspace; /* space for gid names -- derrived from nuid */ 683e12c5d1SDavid du Colombier ulong nserve; /* server processes */ 693e12c5d1SDavid du Colombier ulong nfile; /* number of fid -- system wide */ 703e12c5d1SDavid du Colombier ulong nwpath; /* number of active paths, derrived from nfile */ 713e12c5d1SDavid du Colombier ulong bootsize; /* number of bytes reserved for booting */ 723e12c5d1SDavid du Colombier }; 733e12c5d1SDavid du Colombier 743e12c5d1SDavid du Colombier struct Command 753e12c5d1SDavid du Colombier { 763e12c5d1SDavid du Colombier char *string; 773e12c5d1SDavid du Colombier void (*func)(void); 783e12c5d1SDavid du Colombier char *args; 793e12c5d1SDavid du Colombier }; 803e12c5d1SDavid du Colombier 813e12c5d1SDavid du Colombier struct Devcall 823e12c5d1SDavid du Colombier { 833e12c5d1SDavid du Colombier void (*init)(Device); 843e12c5d1SDavid du Colombier void (*ream)(Device); 853e12c5d1SDavid du Colombier int (*check)(Device); 863e12c5d1SDavid du Colombier long (*super)(Device); 873e12c5d1SDavid du Colombier long (*root)(Device); 883e12c5d1SDavid du Colombier long (*size)(Device); 893e12c5d1SDavid du Colombier int (*read)(Device, long, void*); 903e12c5d1SDavid du Colombier int (*write)(Device, long, void*); 913e12c5d1SDavid du Colombier }; 923e12c5d1SDavid du Colombier 933e12c5d1SDavid du Colombier /* 943e12c5d1SDavid du Colombier * device types 953e12c5d1SDavid du Colombier */ 963e12c5d1SDavid du Colombier enum 973e12c5d1SDavid du Colombier { 983e12c5d1SDavid du Colombier Devnone = 0, 993e12c5d1SDavid du Colombier Devwren, 1003e12c5d1SDavid du Colombier MAXDEV 1013e12c5d1SDavid du Colombier }; 1023e12c5d1SDavid du Colombier 1033e12c5d1SDavid du Colombier /* 1043e12c5d1SDavid du Colombier * file systems 1053e12c5d1SDavid du Colombier */ 1063e12c5d1SDavid du Colombier enum 1073e12c5d1SDavid du Colombier { 1083e12c5d1SDavid du Colombier MAXFILSYS = 4 1093e12c5d1SDavid du Colombier }; 1103e12c5d1SDavid du Colombier 1113e12c5d1SDavid du Colombier /* 1123e12c5d1SDavid du Colombier * should be in portdat.h 1133e12c5d1SDavid du Colombier */ 1143e12c5d1SDavid du Colombier #define QPDIR 0x80000000L 1153e12c5d1SDavid du Colombier #define QPNONE 0 1163e12c5d1SDavid du Colombier #define QPROOT 1 1173e12c5d1SDavid du Colombier #define QPSUPER 2 1183e12c5d1SDavid du Colombier 1193e12c5d1SDavid du Colombier /* 1203e12c5d1SDavid du Colombier * perm argument in p9 create 1213e12c5d1SDavid du Colombier */ 1223e12c5d1SDavid du Colombier #define PDIR (1L<<31) /* is a directory */ 1233e12c5d1SDavid du Colombier #define PAPND (1L<<30) /* is append only */ 1243e12c5d1SDavid du Colombier #define PLOCK (1L<<29) /* is locked on open */ 1253e12c5d1SDavid du Colombier 1263e12c5d1SDavid du Colombier #define NOF (-1) 1273e12c5d1SDavid du Colombier 1283e12c5d1SDavid du Colombier #define FID1 1 1293e12c5d1SDavid du Colombier #define FID2 2 1309a747e4fSDavid du Colombier #define FID3 3 1313e12c5d1SDavid du Colombier 1323e12c5d1SDavid du Colombier #define SECOND(n) (n) 1333e12c5d1SDavid du Colombier #define MINUTE(n) (n*SECOND(60)) 1343e12c5d1SDavid du Colombier #define HOUR(n) (n*MINUTE(60)) 1353e12c5d1SDavid du Colombier #define DAY(n) (n*HOUR(24)) 1363e12c5d1SDavid du Colombier #define TLOCK MINUTE(5) 1373e12c5d1SDavid du Colombier 1383e12c5d1SDavid du Colombier #define CHAT(cp) (chat) 1399a747e4fSDavid du Colombier #define QID9P1(a,b) (Qid9p1){a,b} 1403e12c5d1SDavid du Colombier 1413e12c5d1SDavid du Colombier extern Uid* uid; 1423e12c5d1SDavid du Colombier extern char* uidspace; 1433e12c5d1SDavid du Colombier extern short* gidspace; 1447dd7cddfSDavid du Colombier extern char* errstring[MAXERR]; 1453e12c5d1SDavid du Colombier extern Chan* chans; 1467dd7cddfSDavid du Colombier extern RWLock mainlock; 1473e12c5d1SDavid du Colombier extern long boottime; 1483e12c5d1SDavid du Colombier extern Tlock *tlocks; 1493e12c5d1SDavid du Colombier extern Device devnone; 1507dd7cddfSDavid du Colombier extern Filsys filesys[]; 1513e12c5d1SDavid du Colombier extern char service[]; 1523e12c5d1SDavid du Colombier extern char* tagnames[]; 1533e12c5d1SDavid du Colombier extern Conf conf; 1543e12c5d1SDavid du Colombier extern Cons cons; 1553e12c5d1SDavid du Colombier extern Command command[]; 1563e12c5d1SDavid du Colombier extern Chan *chan; 1573e12c5d1SDavid du Colombier extern Devcall devcall[]; 1583e12c5d1SDavid du Colombier extern char *progname; 1593e12c5d1SDavid du Colombier extern char *procname; 1603e12c5d1SDavid du Colombier extern long niob; 1613e12c5d1SDavid du Colombier extern long nhiob; 1623e12c5d1SDavid du Colombier extern Hiob *hiob; 1633e12c5d1SDavid du Colombier extern int chat; 164bd389b36SDavid du Colombier extern int writeallow; 165bd389b36SDavid du Colombier extern int wstatallow; 16659cc4ca5SDavid du Colombier extern int allownone; 1679a747e4fSDavid du Colombier extern int noatime; 168*5d459b5aSDavid du Colombier extern int writegroup; 1699a747e4fSDavid du Colombier 1709a747e4fSDavid du Colombier extern Lock wpathlock; 171