xref: /plan9/sys/src/cmd/disk/kfs/portdat.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * fundamental constants
33e12c5d1SDavid du Colombier  */
4*9a747e4fSDavid du Colombier #define	NAMELEN		28		/* size of names */
53e12c5d1SDavid du Colombier #define	NDBLOCK		6		/* number of direct blocks in Dentry */
63e12c5d1SDavid du Colombier #define	MAXDAT		8192		/* max allowable data message */
73e12c5d1SDavid du Colombier #define NTLOCK		200		/* number of active file Tlocks */
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier typedef	struct	Fbuf	Fbuf;
103e12c5d1SDavid du Colombier typedef	struct	Super1	Super1;
113e12c5d1SDavid du Colombier typedef	struct	Superb	Superb;
127dd7cddfSDavid du Colombier // typedef struct	Qid	Qid;
133e12c5d1SDavid du Colombier typedef	struct	Dentry	Dentry;
143e12c5d1SDavid du Colombier typedef	struct	Tag	Tag;
153e12c5d1SDavid du Colombier 
163e12c5d1SDavid du Colombier typedef struct	Device	Device;
17*9a747e4fSDavid du Colombier typedef struct	Qid9p1	Qid9p1;
183e12c5d1SDavid du Colombier typedef	struct	File	File;
193e12c5d1SDavid du Colombier typedef	struct	Filsys	Filsys;
203e12c5d1SDavid du Colombier typedef	struct	Filta	Filta;
213e12c5d1SDavid du Colombier typedef	struct	Filter	Filter;
223e12c5d1SDavid du Colombier typedef		ulong	Float;
233e12c5d1SDavid du Colombier typedef	struct	Hiob	Hiob;
243e12c5d1SDavid du Colombier typedef	struct	Iobuf	Iobuf;
253e12c5d1SDavid du Colombier typedef	struct	P9call	P9call;
263e12c5d1SDavid du Colombier typedef	struct	Tlock	Tlock;
277dd7cddfSDavid du Colombier // typedef	struct	Tm	Tm;
283e12c5d1SDavid du Colombier typedef	struct	Uid	Uid;
293e12c5d1SDavid du Colombier typedef	struct	Wpath	Wpath;
303e12c5d1SDavid du Colombier 
313e12c5d1SDavid du Colombier /*
323e12c5d1SDavid du Colombier  * DONT TOUCH -- data structures stored on disk
333e12c5d1SDavid du Colombier  */
34*9a747e4fSDavid du Colombier /* DONT TOUCH, this is the disk structure */
35*9a747e4fSDavid du Colombier struct	Qid9p1
36*9a747e4fSDavid du Colombier {
37*9a747e4fSDavid du Colombier 	long	path;
38*9a747e4fSDavid du Colombier 	long	version;
39*9a747e4fSDavid du Colombier };
403e12c5d1SDavid du Colombier 
413e12c5d1SDavid du Colombier /* DONT TOUCH, this is the disk structure */
423e12c5d1SDavid du Colombier struct	Dentry
433e12c5d1SDavid du Colombier {
443e12c5d1SDavid du Colombier 	char	name[NAMELEN];
453e12c5d1SDavid du Colombier 	short	uid;
463e12c5d1SDavid du Colombier 	short	gid;
473e12c5d1SDavid du Colombier 	ushort	mode;
483e12c5d1SDavid du Colombier 		#define	DALLOC	0x8000
493e12c5d1SDavid du Colombier 		#define	DDIR	0x4000
503e12c5d1SDavid du Colombier 		#define	DAPND	0x2000
513e12c5d1SDavid du Colombier 		#define	DLOCK	0x1000
523e12c5d1SDavid du Colombier 		#define	DREAD	0x4
533e12c5d1SDavid du Colombier 		#define	DWRITE	0x2
543e12c5d1SDavid du Colombier 		#define	DEXEC	0x1
55*9a747e4fSDavid du Colombier 	Qid9p1	qid;
563e12c5d1SDavid du Colombier 	long	size;
573e12c5d1SDavid du Colombier 	long	dblock[NDBLOCK];
583e12c5d1SDavid du Colombier 	long	iblock;
593e12c5d1SDavid du Colombier 	long	diblock;
603e12c5d1SDavid du Colombier 	long	atime;
613e12c5d1SDavid du Colombier 	long	mtime;
623e12c5d1SDavid du Colombier };
633e12c5d1SDavid du Colombier 
643e12c5d1SDavid du Colombier /* DONT TOUCH, this is the disk structure */
653e12c5d1SDavid du Colombier struct	Tag
663e12c5d1SDavid du Colombier {
673e12c5d1SDavid du Colombier 	short	pad;
683e12c5d1SDavid du Colombier 	short	tag;
693e12c5d1SDavid du Colombier 	long	path;
703e12c5d1SDavid du Colombier };
713e12c5d1SDavid du Colombier 
723e12c5d1SDavid du Colombier /* DONT TOUCH, this is the disk structure */
733e12c5d1SDavid du Colombier struct	Super1
743e12c5d1SDavid du Colombier {
753e12c5d1SDavid du Colombier 	long	fstart;
763e12c5d1SDavid du Colombier 	long	fsize;
773e12c5d1SDavid du Colombier 	long	tfree;
783e12c5d1SDavid du Colombier 	long	qidgen;		/* generator for unique ids */
79219b2ee8SDavid du Colombier 
80219b2ee8SDavid du Colombier 	long	fsok;		/* file system ok */
81219b2ee8SDavid du Colombier 
823e12c5d1SDavid du Colombier 	/*
83219b2ee8SDavid du Colombier 	 * garbage for WWC device
843e12c5d1SDavid du Colombier 	 */
853e12c5d1SDavid du Colombier 	long	roraddr;	/* dump root addr */
863e12c5d1SDavid du Colombier 	long	last;		/* last super block addr */
873e12c5d1SDavid du Colombier 	long	next;		/* next super block addr */
883e12c5d1SDavid du Colombier };
893e12c5d1SDavid du Colombier 
903e12c5d1SDavid du Colombier /* DONT TOUCH, this is the disk structure */
913e12c5d1SDavid du Colombier struct	Fbuf
923e12c5d1SDavid du Colombier {
933e12c5d1SDavid du Colombier 	long	nfree;
943e12c5d1SDavid du Colombier 	long	free[1];		/* changes based on BUFSIZE */
953e12c5d1SDavid du Colombier };
963e12c5d1SDavid du Colombier 
973e12c5d1SDavid du Colombier /* DONT TOUCH, this is the disk structure */
983e12c5d1SDavid du Colombier struct	Superb
993e12c5d1SDavid du Colombier {
1003e12c5d1SDavid du Colombier 	Super1;
1013e12c5d1SDavid du Colombier 	Fbuf	fbuf;
1023e12c5d1SDavid du Colombier };
1033e12c5d1SDavid du Colombier 
1043e12c5d1SDavid du Colombier struct	Device
1053e12c5d1SDavid du Colombier {
1063e12c5d1SDavid du Colombier 	char	type;
1073e12c5d1SDavid du Colombier 	char	ctrl;
1083e12c5d1SDavid du Colombier 	char	unit;
1093e12c5d1SDavid du Colombier 	char	part;
1103e12c5d1SDavid du Colombier };
1113e12c5d1SDavid du Colombier 
1123e12c5d1SDavid du Colombier /*
1133e12c5d1SDavid du Colombier  * for load stats
1143e12c5d1SDavid du Colombier  */
1153e12c5d1SDavid du Colombier struct	Filter
1163e12c5d1SDavid du Colombier {
1173e12c5d1SDavid du Colombier 	ulong	count;			/* count and old count kept separate */
1183e12c5d1SDavid du Colombier 	ulong	oldcount;		/* so interrput can read them */
1193e12c5d1SDavid du Colombier 	Float	filter[3];		/* filters for 1m 10m 100m */
1203e12c5d1SDavid du Colombier };
1213e12c5d1SDavid du Colombier 
1223e12c5d1SDavid du Colombier struct	Filta
1233e12c5d1SDavid du Colombier {
1243e12c5d1SDavid du Colombier 	Filter*	f;
1253e12c5d1SDavid du Colombier 	int	scale;
1263e12c5d1SDavid du Colombier };
1273e12c5d1SDavid du Colombier 
1283e12c5d1SDavid du Colombier /*
1293e12c5d1SDavid du Colombier  * array of qids that are locked
1303e12c5d1SDavid du Colombier  */
1313e12c5d1SDavid du Colombier struct	Tlock
1323e12c5d1SDavid du Colombier {
1333e12c5d1SDavid du Colombier 	Device	dev;
1343e12c5d1SDavid du Colombier 	long	time;
1353e12c5d1SDavid du Colombier 	long	qpath;
1363e12c5d1SDavid du Colombier 	File*	file;
1373e12c5d1SDavid du Colombier };
1383e12c5d1SDavid du Colombier 
1393e12c5d1SDavid du Colombier struct	File
1403e12c5d1SDavid du Colombier {
1413e12c5d1SDavid du Colombier 	QLock;
1423e12c5d1SDavid du Colombier 	Qid	qid;
1433e12c5d1SDavid du Colombier 	Wpath*	wpath;
1443e12c5d1SDavid du Colombier 	Chan*	cp;		/* null means a free slot */
1453e12c5d1SDavid du Colombier 	Tlock*	tlock;		/* if file is locked */
1463e12c5d1SDavid du Colombier 	File*	next;		/* in cp->flist */
1477dd7cddfSDavid du Colombier 	File*	list;		/* in list of free files */
1483e12c5d1SDavid du Colombier 	Filsys*	fs;
1493e12c5d1SDavid du Colombier 	long	addr;
1503e12c5d1SDavid du Colombier 	long	slot;
1513e12c5d1SDavid du Colombier 	long	lastra;		/* read ahead address */
1523e12c5d1SDavid du Colombier 	short	fid;
1533e12c5d1SDavid du Colombier 	short	uid;
1543e12c5d1SDavid du Colombier 	char	open;
1553e12c5d1SDavid du Colombier 		#define	FREAD	1
1563e12c5d1SDavid du Colombier 		#define	FWRITE	2
1573e12c5d1SDavid du Colombier 		#define	FREMOV	4
158*9a747e4fSDavid du Colombier 	long	doffset;	/* directory reading */
159*9a747e4fSDavid du Colombier 	ulong	dvers;
160*9a747e4fSDavid du Colombier 	long	dslot;
161*9a747e4fSDavid du Colombier 
162*9a747e4fSDavid du Colombier 	/* for network authentication */
163*9a747e4fSDavid du Colombier 	int ffd;
164*9a747e4fSDavid du Colombier 	int authokay;
165*9a747e4fSDavid du Colombier 
1663e12c5d1SDavid du Colombier };
1673e12c5d1SDavid du Colombier 
1683e12c5d1SDavid du Colombier struct	Filsys
1693e12c5d1SDavid du Colombier {
1707dd7cddfSDavid du Colombier 	char*	name;		/* name of filesys */
1717dd7cddfSDavid du Colombier 	Device	dev;		/* device that filesys is on */
1723e12c5d1SDavid du Colombier 	int	flags;
1733e12c5d1SDavid du Colombier 		#define	FREAM		(1<<1)	/* mkfs */
1743e12c5d1SDavid du Colombier 		#define	FRECOVER	(1<<2)	/* install last dump */
1753e12c5d1SDavid du Colombier };
1763e12c5d1SDavid du Colombier 
1773e12c5d1SDavid du Colombier struct	Hiob
1783e12c5d1SDavid du Colombier {
1793e12c5d1SDavid du Colombier 	Iobuf*	link;
1803e12c5d1SDavid du Colombier 	Lock;
1813e12c5d1SDavid du Colombier };
1823e12c5d1SDavid du Colombier 
1833e12c5d1SDavid du Colombier struct	Iobuf
1843e12c5d1SDavid du Colombier {
1853e12c5d1SDavid du Colombier 	QLock;
1863e12c5d1SDavid du Colombier 	Device	dev;
1873e12c5d1SDavid du Colombier 	Iobuf	*next;		/* for hash */
1883e12c5d1SDavid du Colombier 	Iobuf	*fore;		/* for lru */
1893e12c5d1SDavid du Colombier 	Iobuf	*back;		/* for lru */
1903e12c5d1SDavid du Colombier 	char	*iobuf;		/* only active while locked */
1913e12c5d1SDavid du Colombier 	char	*xiobuf;	/* "real" buffer pointer */
1923e12c5d1SDavid du Colombier 	long	addr;
1933e12c5d1SDavid du Colombier 	int	flags;
1943e12c5d1SDavid du Colombier };
1953e12c5d1SDavid du Colombier 
1963e12c5d1SDavid du Colombier struct	P9call
1973e12c5d1SDavid du Colombier {
1983e12c5d1SDavid du Colombier 	uchar	calln;
1993e12c5d1SDavid du Colombier 	uchar	rxflag;
2003e12c5d1SDavid du Colombier 	short	msize;
2013e12c5d1SDavid du Colombier 	void	(*func)(Chan*, int);
2023e12c5d1SDavid du Colombier };
2033e12c5d1SDavid du Colombier 
2047dd7cddfSDavid du Colombier // struct	Tm
2057dd7cddfSDavid du Colombier // {
2067dd7cddfSDavid du Colombier // 	/* see ctime(3) */
2077dd7cddfSDavid du Colombier // 	int	sec;
2087dd7cddfSDavid du Colombier // 	int	min;
2097dd7cddfSDavid du Colombier // 	int	hour;
2107dd7cddfSDavid du Colombier // 	int	mday;
2117dd7cddfSDavid du Colombier // 	int	mon;
2127dd7cddfSDavid du Colombier // 	int	year;
2137dd7cddfSDavid du Colombier // 	int	wday;
2147dd7cddfSDavid du Colombier // 	int	yday;
2157dd7cddfSDavid du Colombier // 	int	isdst;
2167dd7cddfSDavid du Colombier // };
2173e12c5d1SDavid du Colombier 
2183e12c5d1SDavid du Colombier struct	Uid
2193e12c5d1SDavid du Colombier {
2203e12c5d1SDavid du Colombier 	short	uid;		/* user id */
2213e12c5d1SDavid du Colombier 	short	lead;		/* leader of group */
2223e12c5d1SDavid du Colombier 	short	offset;		/* byte offset in uidspace */
2233e12c5d1SDavid du Colombier };
2243e12c5d1SDavid du Colombier 
2253e12c5d1SDavid du Colombier struct	Wpath
2263e12c5d1SDavid du Colombier {
2273e12c5d1SDavid du Colombier 	Wpath	*up;		/* pointer upwards in path */
2287dd7cddfSDavid du Colombier 	Wpath	*list;		/* link in free chain */
229*9a747e4fSDavid du Colombier 	long	addr;		/* directory entry addr of parent */
230*9a747e4fSDavid du Colombier 	long	slot;		/* directory entry slot of parent */
231*9a747e4fSDavid du Colombier 	long faddr;		/* directory entry addr */
232*9a747e4fSDavid du Colombier 	long fslot;			/* directory entry slot */
233*9a747e4fSDavid du Colombier 	Qid qid;			/* qid of current */
2343e12c5d1SDavid du Colombier 	short	refs;		/* number of files using this structure */
2353e12c5d1SDavid du Colombier };
2363e12c5d1SDavid du Colombier 
2373e12c5d1SDavid du Colombier #define	MAXFDATA	8192
2383e12c5d1SDavid du Colombier 
2393e12c5d1SDavid du Colombier /*
2403e12c5d1SDavid du Colombier  * error codes generated from the file server
2413e12c5d1SDavid du Colombier  */
2423e12c5d1SDavid du Colombier enum
2433e12c5d1SDavid du Colombier {
2443e12c5d1SDavid du Colombier 	Ebadspc = 1,
2453e12c5d1SDavid du Colombier 	Efid,
246*9a747e4fSDavid du Colombier 	Efidinuse,
2473e12c5d1SDavid du Colombier 	Echar,
2483e12c5d1SDavid du Colombier 	Eopen,
2493e12c5d1SDavid du Colombier 	Ecount,
2503e12c5d1SDavid du Colombier 	Ealloc,
2513e12c5d1SDavid du Colombier 	Eqid,
2523e12c5d1SDavid du Colombier 	Eauth,
253*9a747e4fSDavid du Colombier 	Eauthmsg,
2543e12c5d1SDavid du Colombier 	Eaccess,
2553e12c5d1SDavid du Colombier 	Eentry,
2563e12c5d1SDavid du Colombier 	Emode,
2573e12c5d1SDavid du Colombier 	Edir1,
2583e12c5d1SDavid du Colombier 	Edir2,
2593e12c5d1SDavid du Colombier 	Ephase,
2603e12c5d1SDavid du Colombier 	Eexist,
2613e12c5d1SDavid du Colombier 	Edot,
2623e12c5d1SDavid du Colombier 	Eempty,
2633e12c5d1SDavid du Colombier 	Ebadu,
2643e12c5d1SDavid du Colombier 	Enotu,
2653e12c5d1SDavid du Colombier 	Enotg,
2663e12c5d1SDavid du Colombier 	Ename,
2673e12c5d1SDavid du Colombier 	Ewalk,
2683e12c5d1SDavid du Colombier 	Eronly,
2693e12c5d1SDavid du Colombier 	Efull,
2703e12c5d1SDavid du Colombier 	Eoffset,
2713e12c5d1SDavid du Colombier 	Elocked,
2723e12c5d1SDavid du Colombier 	Ebroken,
273*9a747e4fSDavid du Colombier 	Etoolong,
274*9a747e4fSDavid du Colombier 	Ersc,
275*9a747e4fSDavid du Colombier 	Eqidmode,
276*9a747e4fSDavid du Colombier 	Econvert,
277*9a747e4fSDavid du Colombier 	Enotm,
278*9a747e4fSDavid du Colombier 	Enotd,
279*9a747e4fSDavid du Colombier 	Enotl,
280*9a747e4fSDavid du Colombier 	Enotw,
281*9a747e4fSDavid du Colombier 	Esystem,
2823e12c5d1SDavid du Colombier 
2833e12c5d1SDavid du Colombier 	MAXERR
2843e12c5d1SDavid du Colombier };
2853e12c5d1SDavid du Colombier 
2863e12c5d1SDavid du Colombier /*
2873e12c5d1SDavid du Colombier  * devnone block numbers
2883e12c5d1SDavid du Colombier  */
2893e12c5d1SDavid du Colombier enum
2903e12c5d1SDavid du Colombier {
2913e12c5d1SDavid du Colombier 	Cwio1 	= 1,
2923e12c5d1SDavid du Colombier 	Cwio2,
2933e12c5d1SDavid du Colombier 	Cwxx1,
2943e12c5d1SDavid du Colombier 	Cwxx2,
2953e12c5d1SDavid du Colombier 	Cwxx3,
2963e12c5d1SDavid du Colombier 	Cwxx4,
2973e12c5d1SDavid du Colombier 	Cwdump1,
2983e12c5d1SDavid du Colombier 	Cwdump2,
2993e12c5d1SDavid du Colombier 	Cuidbuf,
3003e12c5d1SDavid du Colombier };
3013e12c5d1SDavid du Colombier 
3023e12c5d1SDavid du Colombier /*
3033e12c5d1SDavid du Colombier  * tags on block
3043e12c5d1SDavid du Colombier  */
3053e12c5d1SDavid du Colombier enum
3063e12c5d1SDavid du Colombier {
3073e12c5d1SDavid du Colombier 	Tnone		= 0,
3083e12c5d1SDavid du Colombier 	Tsuper,			/* the super block */
3093e12c5d1SDavid du Colombier 	Tdir,			/* directory contents */
3103e12c5d1SDavid du Colombier 	Tind1,			/* points to blocks */
3113e12c5d1SDavid du Colombier 	Tind2,			/* points to Tind1 */
3123e12c5d1SDavid du Colombier 	Tfile,			/* file contents */
3133e12c5d1SDavid du Colombier 	Tfree,			/* in free list */
3143e12c5d1SDavid du Colombier 	Tbuck,			/* cache fs bucket */
3153e12c5d1SDavid du Colombier 	Tvirgo,			/* fake worm virgin bits */
3163e12c5d1SDavid du Colombier 	Tcache,			/* cw cache things */
3173e12c5d1SDavid du Colombier 	MAXTAG
3183e12c5d1SDavid du Colombier };
3193e12c5d1SDavid du Colombier 
3203e12c5d1SDavid du Colombier /*
3213e12c5d1SDavid du Colombier  * flags to getbuf
3223e12c5d1SDavid du Colombier  */
3233e12c5d1SDavid du Colombier enum
3243e12c5d1SDavid du Colombier {
3253e12c5d1SDavid du Colombier 	Bread	= (1<<0),	/* read the block if miss */
3263e12c5d1SDavid du Colombier 	Bprobe	= (1<<1),	/* return null if miss */
3273e12c5d1SDavid du Colombier 	Bmod	= (1<<2),	/* set modified bit in buffer */
3283e12c5d1SDavid du Colombier 	Bimm	= (1<<3),	/* set immediate bit in buffer */
3293e12c5d1SDavid du Colombier 	Bres	= (1<<4),	/* reserved, never renammed */
3303e12c5d1SDavid du Colombier };
3313e12c5d1SDavid du Colombier 
3323e12c5d1SDavid du Colombier /*
3333e12c5d1SDavid du Colombier  * open modes passed into P9 open/create
3343e12c5d1SDavid du Colombier  */
3353e12c5d1SDavid du Colombier enum
3363e12c5d1SDavid du Colombier {
3373e12c5d1SDavid du Colombier 	MREAD	= 0,
3383e12c5d1SDavid du Colombier 	MWRITE,
3393e12c5d1SDavid du Colombier 	MBOTH,
3403e12c5d1SDavid du Colombier 	MEXEC,
3413e12c5d1SDavid du Colombier 	MTRUNC	= (1<<4),	/* truncate on open */
3423e12c5d1SDavid du Colombier 	MCEXEC	= (1<<5),	/* close on exec (host) */
3433e12c5d1SDavid du Colombier 	MRCLOSE	= (1<<6),	/* remove on close */
3443e12c5d1SDavid du Colombier };
3453e12c5d1SDavid du Colombier 
3463e12c5d1SDavid du Colombier /*
3473e12c5d1SDavid du Colombier  * check flags
3483e12c5d1SDavid du Colombier  */
3493e12c5d1SDavid du Colombier enum
3503e12c5d1SDavid du Colombier {
3513e12c5d1SDavid du Colombier 	Crdall	= (1<<0),	/* read all files */
3523e12c5d1SDavid du Colombier 	Ctag	= (1<<1),	/* rebuild tags */
3533e12c5d1SDavid du Colombier 	Cpfile	= (1<<2),	/* print files */
3543e12c5d1SDavid du Colombier 	Cpdir	= (1<<3),	/* print directories */
3553e12c5d1SDavid du Colombier 	Cfree	= (1<<4),	/* rebuild free list */
3563e12c5d1SDavid du Colombier 	Cream	= (1<<6),	/* clear all bad tags */
3573e12c5d1SDavid du Colombier 	Cbad	= (1<<7),	/* clear all bad blocks */
3583e12c5d1SDavid du Colombier 	Ctouch	= (1<<8),	/* touch old dir and indir */
3593e12c5d1SDavid du Colombier 	Cquiet	= (1<<9),	/* report just nasty things */
3603e12c5d1SDavid du Colombier };
3613e12c5d1SDavid du Colombier 
3623e12c5d1SDavid du Colombier /*
3633e12c5d1SDavid du Colombier  * buffer size variables
3643e12c5d1SDavid du Colombier  */
3653e12c5d1SDavid du Colombier extern int	RBUFSIZE;
3663e12c5d1SDavid du Colombier extern int	BUFSIZE;
3673e12c5d1SDavid du Colombier extern int	DIRPERBUF;
3683e12c5d1SDavid du Colombier extern int	INDPERBUF;
3693e12c5d1SDavid du Colombier extern int	INDPERBUF2;
3703e12c5d1SDavid du Colombier extern int	FEPERBUF;
371