xref: /plan9/sys/src/cmd/disk/kfs/dat.h (revision 5d459b5a09e427ae1acd4e6afcf028853c73946e)
1 typedef	struct	Chan	Chan;
2 typedef struct	Command	Command;
3 typedef	struct	Conf	Conf;
4 typedef	struct	Cons	Cons;
5 typedef struct	Devcall	Devcall;
6 
7 #define MAXBUFSIZE	(16*1024)	/* max. buffer size */
8 
9 #include "portdat.h"
10 
11 struct	Chan
12 {
13 	int	chan;			/* fd request came in on */
14 	QLock rlock, wlock;		/* lock for reading/writing messages on chan */
15 	int	type;
16 	int	flags;
17 	long	whotime;
18 	File*	flist;			/* base of file structures */
19 	Lock	flock;			/* manipulate flist */
20 	RWLock	reflock;		/* lock for Tflush */
21 	int	msize;			/* version */
22 	int	authed;		/* someone other than ``none'' has authed */
23 
24 /* 9p1 auth */
25 	uchar	chal[8];
26 	uchar	rchal[8];
27 	int	idoffset;
28 	int	idvec;
29 	Lock	idlock;
30 };
31 
32 /*
33  * console cons.flag flags
34  */
35 enum
36 {
37 	Fchat	= (1<<0),	/* print out filesys rpc traffic */
38 	Fuid	= (1<<2),	/* print out uids */
39 				/* debugging flags for drivers */
40 };
41 
42 struct	Cons
43 {
44 	int	flags;		/* overall flags for all channels */
45 	int	uid;		/* botch -- used to get uid on cons_create */
46 	int	gid;		/* botch -- used to get gid on cons_create */
47 	int	allow;		/* no-protection flag */
48 	long	offset;		/* used to read files, c.f. fchar */
49 	char*	arg;		/* pointer to remaining line */
50 
51 	Chan	*chan;	/* console channel */
52 	Chan	*srvchan;	/* local server channel */
53 
54 	Filter	work;		/* thruput in messages */
55 	Filter	rate;		/* thruput in bytes */
56 	Filter	bhit;		/* getbufs that hit */
57 	Filter	bread;		/* getbufs that miss and read */
58 	Filter	binit;		/* getbufs that miss and dont read */
59 	Filter	tags[MAXTAG];	/* reads of each type of block */
60 };
61 
62 struct	Conf
63 {
64 	ulong	niobuf;		/* number of iobufs to allocate */
65 	ulong	nuid;		/* distinct uids */
66 	ulong	uidspace;	/* space for uid names -- derrived from nuid */
67 	ulong	gidspace;	/* space for gid names -- derrived from nuid */
68 	ulong	nserve;		/* server processes */
69 	ulong	nfile;		/* number of fid -- system wide */
70 	ulong	nwpath;		/* number of active paths, derrived from nfile */
71 	ulong	bootsize;	/* number of bytes reserved for booting */
72 };
73 
74 struct	Command
75 {
76 	char	*string;
77 	void	(*func)(void);
78 	char	*args;
79 };
80 
81 struct Devcall
82 {
83 	void	(*init)(Device);
84 	void	(*ream)(Device);
85 	int	(*check)(Device);
86 	long	(*super)(Device);
87 	long	(*root)(Device);
88 	long	(*size)(Device);
89 	int	(*read)(Device, long, void*);
90 	int	(*write)(Device, long, void*);
91 };
92 
93 /*
94  * device types
95  */
96 enum
97 {
98 	Devnone 	= 0,
99 	Devwren,
100 	MAXDEV
101 };
102 
103 /*
104  * file systems
105  */
106 enum
107 {
108 	MAXFILSYS = 4
109 };
110 
111 /*
112  * should be in portdat.h
113  */
114 #define	QPDIR	0x80000000L
115 #define	QPNONE	0
116 #define	QPROOT	1
117 #define	QPSUPER	2
118 
119 /*
120  * perm argument in p9 create
121  */
122 #define	PDIR	(1L<<31)	/* is a directory */
123 #define	PAPND	(1L<<30)	/* is append only */
124 #define	PLOCK	(1L<<29)	/* is locked on open */
125 
126 #define	NOF	(-1)
127 
128 #define	FID1		1
129 #define	FID2		2
130 #define	FID3		3
131 
132 #define SECOND(n) 	(n)
133 #define MINUTE(n)	(n*SECOND(60))
134 #define HOUR(n)		(n*MINUTE(60))
135 #define DAY(n)		(n*HOUR(24))
136 #define	TLOCK		MINUTE(5)
137 
138 #define	CHAT(cp)	(chat)
139 #define	QID9P1(a,b)	(Qid9p1){a,b}
140 
141 extern	Uid*	uid;
142 extern	char*	uidspace;
143 extern	short*	gidspace;
144 extern	char*	errstring[MAXERR];
145 extern	Chan*	chans;
146 extern	RWLock	mainlock;
147 extern	long	boottime;
148 extern	Tlock	*tlocks;
149 extern	Device	devnone;
150 extern	Filsys	filesys[];
151 extern	char	service[];
152 extern	char*	tagnames[];
153 extern	Conf	conf;
154 extern	Cons	cons;
155 extern	Command	command[];
156 extern	Chan	*chan;
157 extern	Devcall	devcall[];
158 extern	char	*progname;
159 extern	char	*procname;
160 extern	long	niob;
161 extern	long	nhiob;
162 extern	Hiob	*hiob;
163 extern	int	chat;
164 extern	int	writeallow;
165 extern	int	wstatallow;
166 extern	int	allownone;
167 extern	int	noatime;
168 extern	int	writegroup;
169 
170 extern Lock wpathlock;
171