xref: /plan9/sys/src/cmd/9660srv/dat.h (revision 31919746d29e97103db3d69867a88794af3e8b99)
19a747e4fSDavid du Colombier typedef	struct Ioclust	Ioclust;
23e12c5d1SDavid du Colombier typedef	struct Iobuf	Iobuf;
39a747e4fSDavid du Colombier typedef	struct Isofile	Isofile;
43e12c5d1SDavid du Colombier typedef struct Xdata	Xdata;
53e12c5d1SDavid du Colombier typedef struct Xfile	Xfile;
63e12c5d1SDavid du Colombier typedef struct Xfs	Xfs;
73e12c5d1SDavid du Colombier typedef struct Xfsub	Xfsub;
83e12c5d1SDavid du Colombier 
912fd1c83SDavid du Colombier #pragma incomplete Isofile
1012fd1c83SDavid du Colombier 
11bd389b36SDavid du Colombier enum
12bd389b36SDavid du Colombier {
139a747e4fSDavid du Colombier 	Sectorsize = 2048,
149a747e4fSDavid du Colombier 	Maxname = 256,
153e12c5d1SDavid du Colombier };
163e12c5d1SDavid du Colombier 
173e12c5d1SDavid du Colombier struct Iobuf
183e12c5d1SDavid du Colombier {
199a747e4fSDavid du Colombier 	Ioclust* clust;
203e12c5d1SDavid du Colombier 	long	addr;
219a747e4fSDavid du Colombier 	uchar*	iobuf;
229a747e4fSDavid du Colombier };
239a747e4fSDavid du Colombier 
249a747e4fSDavid du Colombier struct Ioclust
259a747e4fSDavid du Colombier {
26e67f3b95SDavid du Colombier 	long	addr;			/* in sectors; good to 8TB */
279a747e4fSDavid du Colombier 	Xdata*	dev;
289a747e4fSDavid du Colombier 	Ioclust* next;
299a747e4fSDavid du Colombier 	Ioclust* prev;
303e12c5d1SDavid du Colombier 	int	busy;
319a747e4fSDavid du Colombier 	int	nbuf;
329a747e4fSDavid du Colombier 	Iobuf*	buf;
333e12c5d1SDavid du Colombier 	uchar*	iobuf;
343e12c5d1SDavid du Colombier };
353e12c5d1SDavid du Colombier 
363e12c5d1SDavid du Colombier struct Xdata
373e12c5d1SDavid du Colombier {
383e12c5d1SDavid du Colombier 	Xdata*	next;
393e12c5d1SDavid du Colombier 	char*	name;		/* of underlying file */
403e12c5d1SDavid du Colombier 	Qid	qid;
413e12c5d1SDavid du Colombier 	short	type;
423e12c5d1SDavid du Colombier 	short	fdev;
433e12c5d1SDavid du Colombier 	int	ref;		/* attach count */
443e12c5d1SDavid du Colombier 	int	dev;		/* for read/write */
453e12c5d1SDavid du Colombier };
463e12c5d1SDavid du Colombier 
47bd389b36SDavid du Colombier struct Xfsub
48bd389b36SDavid du Colombier {
493e12c5d1SDavid du Colombier 	void	(*reset)(void);
503e12c5d1SDavid du Colombier 	int	(*attach)(Xfile*);
513e12c5d1SDavid du Colombier 	void	(*clone)(Xfile*, Xfile*);
523e12c5d1SDavid du Colombier 	void	(*walkup)(Xfile*);
533e12c5d1SDavid du Colombier 	void	(*walk)(Xfile*, char*);
543e12c5d1SDavid du Colombier 	void	(*open)(Xfile*, int);
553e12c5d1SDavid du Colombier 	void	(*create)(Xfile*, char*, long, int);
569a747e4fSDavid du Colombier 	long	(*readdir)(Xfile*, uchar*, long, long);
57*31919746SDavid du Colombier 	long	(*read)(Xfile*, char*, vlong, long);
58*31919746SDavid du Colombier 	long	(*write)(Xfile*, char*, vlong, long);
593e12c5d1SDavid du Colombier 	void	(*clunk)(Xfile*);
603e12c5d1SDavid du Colombier 	void	(*remove)(Xfile*);
613e12c5d1SDavid du Colombier 	void	(*stat)(Xfile*, Dir*);
623e12c5d1SDavid du Colombier 	void	(*wstat)(Xfile*, Dir*);
633e12c5d1SDavid du Colombier };
643e12c5d1SDavid du Colombier 
65bd389b36SDavid du Colombier struct Xfs
66bd389b36SDavid du Colombier {
673e12c5d1SDavid du Colombier 	Xdata*	d;		/* how to get the bits */
683e12c5d1SDavid du Colombier 	Xfsub*	s;		/* how to use them */
693e12c5d1SDavid du Colombier 	int	ref;
7059cc4ca5SDavid du Colombier 	int	issusp;	/* follows system use sharing protocol */
7159cc4ca5SDavid du Colombier 	long	suspoff;	/* if so, offset at which SUSP area begins */
7259cc4ca5SDavid du Colombier 	int	isrock;	/* Rock Ridge format */
733e12c5d1SDavid du Colombier 	int	isplan9;	/* has Plan 9-specific directory info */
743e12c5d1SDavid du Colombier 	Qid	rootqid;
759a747e4fSDavid du Colombier 	Isofile*	ptr;		/* private data */
763e12c5d1SDavid du Colombier };
773e12c5d1SDavid du Colombier 
78bd389b36SDavid du Colombier struct Xfile
79bd389b36SDavid du Colombier {
803e12c5d1SDavid du Colombier 	Xfile*	next;		/* in fid hash bucket */
813e12c5d1SDavid du Colombier 	Xfs*	xf;
823e12c5d1SDavid du Colombier 	long	fid;
833e12c5d1SDavid du Colombier 	ulong	flags;
843e12c5d1SDavid du Colombier 	Qid	qid;
853e12c5d1SDavid du Colombier 	int	len;		/* of private data */
869a747e4fSDavid du Colombier 	Isofile*	ptr;
873e12c5d1SDavid du Colombier };
883e12c5d1SDavid du Colombier 
89bd389b36SDavid du Colombier enum
90bd389b36SDavid du Colombier {
913e12c5d1SDavid du Colombier 	Asis,
923e12c5d1SDavid du Colombier 	Clean,
933e12c5d1SDavid du Colombier 	Clunk
943e12c5d1SDavid du Colombier };
953e12c5d1SDavid du Colombier 
96bd389b36SDavid du Colombier enum
97bd389b36SDavid du Colombier {
983e12c5d1SDavid du Colombier 	Oread = 1,
993e12c5d1SDavid du Colombier 	Owrite = 2,
1003e12c5d1SDavid du Colombier 	Orclose = 4,
1013e12c5d1SDavid du Colombier 	Omodes = 3,
1023e12c5d1SDavid du Colombier };
1033e12c5d1SDavid du Colombier 
1043e12c5d1SDavid du Colombier extern char	Enonexist[];	/* file does not exist */
1053e12c5d1SDavid du Colombier extern char	Eperm[];	/* permission denied */
1063e12c5d1SDavid du Colombier extern char	Enofile[];	/* no file system specified */
1073e12c5d1SDavid du Colombier extern char	Eauth[];	/* authentication failed */
1083e12c5d1SDavid du Colombier 
1093e12c5d1SDavid du Colombier extern char	*srvname;
1103e12c5d1SDavid du Colombier extern char	*deffile;
1113e12c5d1SDavid du Colombier extern int	chatty;
1123e12c5d1SDavid du Colombier extern jmp_buf	err_lab[];
1133e12c5d1SDavid du Colombier extern int	nerr_lab;
1143e12c5d1SDavid du Colombier extern char	err_msg[];
1157dd7cddfSDavid du Colombier 
1167dd7cddfSDavid du Colombier extern int nojoliet;
1177dd7cddfSDavid du Colombier extern int noplan9;
11859cc4ca5SDavid du Colombier extern int norock;
119