xref: /plan9-contrib/sys/src/cmd/ramcfs/bcache.h (revision 206fef1c8a79725587ecb1892b58204f8235c098)
1*206fef1cSDavid du Colombier typedef struct Bbuf	Bbuf;
2*206fef1cSDavid du Colombier typedef struct Bcache	Bcache;
3*206fef1cSDavid du Colombier 
4*206fef1cSDavid du Colombier enum
5*206fef1cSDavid du Colombier {
6*206fef1cSDavid du Colombier 	Nbcache=	32,		/* number of blocks kept in pool */
7*206fef1cSDavid du Colombier };
8*206fef1cSDavid du Colombier 
9*206fef1cSDavid du Colombier /*
10*206fef1cSDavid du Colombier  *  block cache descriptor
11*206fef1cSDavid du Colombier  */
12*206fef1cSDavid du Colombier struct Bbuf
13*206fef1cSDavid du Colombier {
14*206fef1cSDavid du Colombier 	Lru;				/* must be first in struct */
15*206fef1cSDavid du Colombier 	ulong	bno;
16*206fef1cSDavid du Colombier 	int	inuse;
17*206fef1cSDavid du Colombier 	Bbuf	*next;			/* next in dirty list */
18*206fef1cSDavid du Colombier 	int	dirty;
19*206fef1cSDavid du Colombier 	char	*data;
20*206fef1cSDavid du Colombier };
21*206fef1cSDavid du Colombier 
22*206fef1cSDavid du Colombier /*
23*206fef1cSDavid du Colombier  *  the buffer cache
24*206fef1cSDavid du Colombier  */
25*206fef1cSDavid du Colombier struct Bcache
26*206fef1cSDavid du Colombier {
27*206fef1cSDavid du Colombier 	Lru;
28*206fef1cSDavid du Colombier 	int	bsize;			/* block size in bytes */
29*206fef1cSDavid du Colombier 	char	*memcache;		/* memory cache base */
30*206fef1cSDavid du Colombier 	Bbuf	*dfirst;		/* dirty list */
31*206fef1cSDavid du Colombier 	Bbuf	*dlast;
32*206fef1cSDavid du Colombier 	Bbuf	bb[Nbcache];
33*206fef1cSDavid du Colombier };
34*206fef1cSDavid du Colombier 
35*206fef1cSDavid du Colombier int	bcinit(Bcache*, char*, int);
36*206fef1cSDavid du Colombier Bbuf*	bcalloc(Bcache*, ulong);
37*206fef1cSDavid du Colombier Bbuf*	bcread(Bcache*, ulong);
38*206fef1cSDavid du Colombier void	bcmark(Bcache*, Bbuf*);
39*206fef1cSDavid du Colombier int	bcwrite(Bcache*, Bbuf*);
40*206fef1cSDavid du Colombier int	bcsync(Bcache*);
41*206fef1cSDavid du Colombier int	bread(Bcache*, ulong, void*);
42*206fef1cSDavid du Colombier int	bwrite(Bcache*, ulong, void*);
43*206fef1cSDavid du Colombier int	bref(Bcache*, Bbuf*);
44*206fef1cSDavid du Colombier void	error(char*, ...);
45*206fef1cSDavid du Colombier void	warning(char*);
46