xref: /plan9/sys/src/cmd/dossrv/iotrack.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1 typedef struct MLock	MLock;
2 typedef	struct Iosect	Iosect;
3 typedef	struct Iotrack	Iotrack;
4 typedef struct Track	Track;
5 typedef struct Xfs	Xfs;
6 
7 struct MLock
8 {
9 	char	key;
10 };
11 
12 struct Iosect
13 {
14 	Iosect *next;
15 	short	flags;
16 	MLock	lock;
17 	Iotrack *t;
18 	uchar *	iobuf;
19 };
20 
21 struct Iotrack
22 {
23 	short	flags;
24 	Xfs *	xf;
25 	long	addr;
26 	Iotrack	*next;		/* in lru list */
27 	Iotrack	*prev;
28 	Iotrack	*hnext;		/* in hash list */
29 	Iotrack	*hprev;
30 	MLock	lock;
31 	int	ref;
32 	Track	*tp;
33 };
34 
35 enum{
36 	Sectorsize = 512,
37 	Sect2trk = 9,
38 	Trksize = Sectorsize*Sect2trk
39 };
40 
41 struct Track
42 {
43 	Iosect *p[Sect2trk];
44 	uchar	buf[Sect2trk][Sectorsize];
45 };
46 
47 #define	BMOD		(1<<0)
48 #define	BIMM		(1<<1)
49 #define	BSTALE		(1<<2)
50 
51 Iosect*	getiosect(Xfs*, long, int);
52 Iosect*	getosect(Xfs*, long);
53 Iosect*	getsect(Xfs*, long);
54 Iosect*	newsect(void);
55 Iotrack*	getiotrack(Xfs*, long);
56 int	canmlock(MLock*);
57 int	devcheck(Xfs*);
58 int	devread(Xfs*, long, void*, long);
59 int	devwrite(Xfs*, long, void*, long);
60 int	tread(Iotrack*);
61 int	twrite(Iotrack*);
62 void	freesect(Iosect*);
63 void	iotrack_init(void);
64 void	mlock(MLock*);
65 void	purgebuf(Xfs*);
66 void	purgetrack(Iotrack*);
67 void	putsect(Iosect*);
68 void	sync(void);
69 void	unmlock(MLock*);
70