xref: /plan9-contrib/sys/src/cmd/ramcfs/cformat.h (revision 206fef1c8a79725587ecb1892b58204f8235c098)
1*206fef1cSDavid du Colombier /*
2*206fef1cSDavid du Colombier  *  format of cache on disk
3*206fef1cSDavid du Colombier  */
4*206fef1cSDavid du Colombier typedef struct Dptr	Dptr;
5*206fef1cSDavid du Colombier typedef struct Dahdr	Dahdr;
6*206fef1cSDavid du Colombier typedef struct Dalloc	Dalloc;
7*206fef1cSDavid du Colombier typedef struct Fphdr	Fphdr;
8*206fef1cSDavid du Colombier typedef struct Fptr	Fptr;
9*206fef1cSDavid du Colombier typedef struct Inode	Inode;
10*206fef1cSDavid du Colombier typedef struct Dihdr	Dihdr;
11*206fef1cSDavid du Colombier typedef struct Dinode	Dinode;
12*206fef1cSDavid du Colombier 
13*206fef1cSDavid du Colombier enum
14*206fef1cSDavid du Colombier {
15*206fef1cSDavid du Colombier 	Amagic= 	0xbebeefed,	/* allocation block magic */
16*206fef1cSDavid du Colombier 	Imagic=		0xbadc00ce,	/* inode block magic */
17*206fef1cSDavid du Colombier 	BtoUL=		8*sizeof(ulong),/* bits in a ulong */
18*206fef1cSDavid du Colombier 	CACHENAMELEN=	128
19*206fef1cSDavid du Colombier };
20*206fef1cSDavid du Colombier #define	Indbno		0x80000000	/* indirect block */
21*206fef1cSDavid du Colombier #define	Notabno		0xFFFFFFFF	/* not a block number */
22*206fef1cSDavid du Colombier 
23*206fef1cSDavid du Colombier /*
24*206fef1cSDavid du Colombier  *  Allocation blocks at the begining of the disk.  There are
25*206fef1cSDavid du Colombier  *  enough of these blocks to supply 1 bit for each block on the
26*206fef1cSDavid du Colombier  *  disk;
27*206fef1cSDavid du Colombier  */
28*206fef1cSDavid du Colombier struct Dahdr
29*206fef1cSDavid du Colombier {
30*206fef1cSDavid du Colombier 	ulong	magic;
31*206fef1cSDavid du Colombier 	ulong	bsize;		/* logical block size */
32*206fef1cSDavid du Colombier 	char	name[CACHENAMELEN];
33*206fef1cSDavid du Colombier 	short	nab;		/* number of allocation blocks */
34*206fef1cSDavid du Colombier };
35*206fef1cSDavid du Colombier struct Dalloc
36*206fef1cSDavid du Colombier {
37*206fef1cSDavid du Colombier 	Dahdr;
38*206fef1cSDavid du Colombier 	ulong	bits[1];
39*206fef1cSDavid du Colombier };
40*206fef1cSDavid du Colombier 
41*206fef1cSDavid du Colombier /*
42*206fef1cSDavid du Colombier  *  A pointer to disk data
43*206fef1cSDavid du Colombier  */
44*206fef1cSDavid du Colombier struct Dptr
45*206fef1cSDavid du Colombier {
46*206fef1cSDavid du Colombier 	ulong	fbno;		/* file block number */
47*206fef1cSDavid du Colombier 	ulong	bno;		/* disk block number */
48*206fef1cSDavid du Colombier 	ushort	start;		/* offset into block of valid data */
49*206fef1cSDavid du Colombier 	ushort	end;		/* offset into block after valid data */
50*206fef1cSDavid du Colombier };
51*206fef1cSDavid du Colombier 
52*206fef1cSDavid du Colombier /*
53*206fef1cSDavid du Colombier  *  A file descriptor.
54*206fef1cSDavid du Colombier  */
55*206fef1cSDavid du Colombier struct Inode
56*206fef1cSDavid du Colombier {
57*206fef1cSDavid du Colombier 	Qid	qid;
58*206fef1cSDavid du Colombier 	vlong	length;
59*206fef1cSDavid du Colombier 	Dptr	ptr;		/* pointer page */
60*206fef1cSDavid du Colombier 	char	inuse;
61*206fef1cSDavid du Colombier };
62*206fef1cSDavid du Colombier 
63*206fef1cSDavid du Colombier /*
64*206fef1cSDavid du Colombier  *  inode blocks (after allocation blocks)
65*206fef1cSDavid du Colombier  */
66*206fef1cSDavid du Colombier struct Dihdr
67*206fef1cSDavid du Colombier {
68*206fef1cSDavid du Colombier 	ulong	magic;
69*206fef1cSDavid du Colombier 	ulong	nino;		/* number of inodes */
70*206fef1cSDavid du Colombier };
71*206fef1cSDavid du Colombier struct Dinode
72*206fef1cSDavid du Colombier {
73*206fef1cSDavid du Colombier 	Dihdr;
74*206fef1cSDavid du Colombier 	Inode	inode[1];
75*206fef1cSDavid du Colombier };
76