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