xref: /plan9-contrib/sys/src/cmd/dossrv/iotrack.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier typedef struct MLock	MLock;
23e12c5d1SDavid du Colombier typedef	struct Iosect	Iosect;
33e12c5d1SDavid du Colombier typedef	struct Iotrack	Iotrack;
43e12c5d1SDavid du Colombier typedef struct Track	Track;
53e12c5d1SDavid du Colombier typedef struct Xfs	Xfs;
63e12c5d1SDavid du Colombier 
7*7dd7cddfSDavid du Colombier struct MLock
83e12c5d1SDavid du Colombier {
93e12c5d1SDavid du Colombier 	char	key;
103e12c5d1SDavid du Colombier };
113e12c5d1SDavid du Colombier 
123e12c5d1SDavid du Colombier struct Iosect
133e12c5d1SDavid du Colombier {
143e12c5d1SDavid du Colombier 	Iosect *next;
153e12c5d1SDavid du Colombier 	short	flags;
16*7dd7cddfSDavid du Colombier 	MLock	lock;
173e12c5d1SDavid du Colombier 	Iotrack *t;
183e12c5d1SDavid du Colombier 	uchar *	iobuf;
193e12c5d1SDavid du Colombier };
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier struct Iotrack
223e12c5d1SDavid du Colombier {
233e12c5d1SDavid du Colombier 	short	flags;
243e12c5d1SDavid du Colombier 	Xfs *	xf;
253e12c5d1SDavid du Colombier 	long	addr;
263e12c5d1SDavid du Colombier 	Iotrack	*next;		/* in lru list */
273e12c5d1SDavid du Colombier 	Iotrack	*prev;
283e12c5d1SDavid du Colombier 	Iotrack	*hnext;		/* in hash list */
293e12c5d1SDavid du Colombier 	Iotrack	*hprev;
30*7dd7cddfSDavid du Colombier 	MLock	lock;
313e12c5d1SDavid du Colombier 	int	ref;
323e12c5d1SDavid du Colombier 	Track	*tp;
333e12c5d1SDavid du Colombier };
343e12c5d1SDavid du Colombier 
353e12c5d1SDavid du Colombier enum{
363e12c5d1SDavid du Colombier 	Sectorsize = 512,
373e12c5d1SDavid du Colombier 	Sect2trk = 9,
383e12c5d1SDavid du Colombier 	Trksize = Sectorsize*Sect2trk
393e12c5d1SDavid du Colombier };
403e12c5d1SDavid du Colombier 
413e12c5d1SDavid du Colombier struct Track
423e12c5d1SDavid du Colombier {
433e12c5d1SDavid du Colombier 	Iosect *p[Sect2trk];
443e12c5d1SDavid du Colombier 	uchar	buf[Sect2trk][Sectorsize];
453e12c5d1SDavid du Colombier };
463e12c5d1SDavid du Colombier 
473e12c5d1SDavid du Colombier #define	BMOD		(1<<0)
483e12c5d1SDavid du Colombier #define	BIMM		(1<<1)
493e12c5d1SDavid du Colombier #define	BSTALE		(1<<2)
503e12c5d1SDavid du Colombier 
513e12c5d1SDavid du Colombier Iosect*	getiosect(Xfs*, long, int);
523e12c5d1SDavid du Colombier Iosect*	getosect(Xfs*, long);
533e12c5d1SDavid du Colombier Iosect*	getsect(Xfs*, long);
543e12c5d1SDavid du Colombier Iosect*	newsect(void);
553e12c5d1SDavid du Colombier Iotrack*	getiotrack(Xfs*, long);
56*7dd7cddfSDavid du Colombier int	canmlock(MLock*);
57219b2ee8SDavid du Colombier int	devcheck(Xfs*);
583e12c5d1SDavid du Colombier int	devread(Xfs*, long, void*, long);
593e12c5d1SDavid du Colombier int	devwrite(Xfs*, long, void*, long);
603e12c5d1SDavid du Colombier int	tread(Iotrack*);
613e12c5d1SDavid du Colombier int	twrite(Iotrack*);
623e12c5d1SDavid du Colombier void	freesect(Iosect*);
633e12c5d1SDavid du Colombier void	iotrack_init(void);
64*7dd7cddfSDavid du Colombier void	mlock(MLock*);
653e12c5d1SDavid du Colombier void	purgebuf(Xfs*);
663e12c5d1SDavid du Colombier void	purgetrack(Iotrack*);
673e12c5d1SDavid du Colombier void	putsect(Iosect*);
683e12c5d1SDavid du Colombier void	sync(void);
69*7dd7cddfSDavid du Colombier void	unmlock(MLock*);
70