xref: /inferno-os/os/boot/pc/dosfs.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth typedef struct Dosboot	Dosboot;
2*74a4d8c2SCharles.Forsyth typedef struct Dos	Dos;
3*74a4d8c2SCharles.Forsyth typedef struct Dosdir	Dosdir;
4*74a4d8c2SCharles.Forsyth typedef struct Dosfile	Dosfile;
5*74a4d8c2SCharles.Forsyth typedef struct Dospart	Dospart;
6*74a4d8c2SCharles.Forsyth 
7*74a4d8c2SCharles.Forsyth struct Dospart
8*74a4d8c2SCharles.Forsyth {
9*74a4d8c2SCharles.Forsyth 	uchar flag;		/* active flag */
10*74a4d8c2SCharles.Forsyth 	uchar shead;		/* starting head */
11*74a4d8c2SCharles.Forsyth 	uchar scs[2];		/* starting cylinder/sector */
12*74a4d8c2SCharles.Forsyth 	uchar type;		/* partition type */
13*74a4d8c2SCharles.Forsyth 	uchar ehead;		/* ending head */
14*74a4d8c2SCharles.Forsyth 	uchar ecs[2];		/* ending cylinder/sector */
15*74a4d8c2SCharles.Forsyth 	uchar start[4];		/* starting sector */
16*74a4d8c2SCharles.Forsyth 	uchar len[4];		/* length in sectors */
17*74a4d8c2SCharles.Forsyth };
18*74a4d8c2SCharles.Forsyth 
19*74a4d8c2SCharles.Forsyth #define FAT12	0x01
20*74a4d8c2SCharles.Forsyth #define FAT16	0x04
21*74a4d8c2SCharles.Forsyth #define EXTEND	0x05
22*74a4d8c2SCharles.Forsyth #define FATHUGE	0x06
23*74a4d8c2SCharles.Forsyth #define FAT32	0x0b
24*74a4d8c2SCharles.Forsyth #define FAT32X	0x0c
25*74a4d8c2SCharles.Forsyth #define EXTHUGE	0x0f
26*74a4d8c2SCharles.Forsyth #define DMDDO	0x54
27*74a4d8c2SCharles.Forsyth #define PLAN9	0x39
28*74a4d8c2SCharles.Forsyth #define LEXTEND 0x85
29*74a4d8c2SCharles.Forsyth 
30*74a4d8c2SCharles.Forsyth struct Dosfile{
31*74a4d8c2SCharles.Forsyth 	Dos	*dos;		/* owning dos file system */
32*74a4d8c2SCharles.Forsyth 	char	name[8];
33*74a4d8c2SCharles.Forsyth 	char	ext[3];
34*74a4d8c2SCharles.Forsyth 	uchar	attr;
35*74a4d8c2SCharles.Forsyth 	long	length;
36*74a4d8c2SCharles.Forsyth 	long	pstart;		/* physical start cluster address */
37*74a4d8c2SCharles.Forsyth 	long	pcurrent;	/* physical current cluster address */
38*74a4d8c2SCharles.Forsyth 	long	lcurrent;	/* logical current cluster address */
39*74a4d8c2SCharles.Forsyth 	long	offset;
40*74a4d8c2SCharles.Forsyth };
41*74a4d8c2SCharles.Forsyth 
42*74a4d8c2SCharles.Forsyth struct Dos{
43*74a4d8c2SCharles.Forsyth 	long	start;		/* start of file system */
44*74a4d8c2SCharles.Forsyth 	int	sectsize;	/* in bytes */
45*74a4d8c2SCharles.Forsyth 	int	clustsize;	/* in sectors */
46*74a4d8c2SCharles.Forsyth 	int	clustbytes;	/* in bytes */
47*74a4d8c2SCharles.Forsyth 	int	nresrv;		/* sectors */
48*74a4d8c2SCharles.Forsyth 	int	nfats;		/* usually 2 */
49*74a4d8c2SCharles.Forsyth 	int	rootsize;	/* number of entries */
50*74a4d8c2SCharles.Forsyth 	int	volsize;	/* in sectors */
51*74a4d8c2SCharles.Forsyth 	int	mediadesc;
52*74a4d8c2SCharles.Forsyth 	int	fatsize;	/* in sectors */
53*74a4d8c2SCharles.Forsyth 	int	fatclusters;
54*74a4d8c2SCharles.Forsyth 	int	fatbits;	/* 12 or 16 */
55*74a4d8c2SCharles.Forsyth 	long	fataddr;	/* sector number */
56*74a4d8c2SCharles.Forsyth 	long	rootaddr;
57*74a4d8c2SCharles.Forsyth 	long	rootclust;
58*74a4d8c2SCharles.Forsyth 	long	dataaddr;
59*74a4d8c2SCharles.Forsyth 	long	freeptr;
60*74a4d8c2SCharles.Forsyth };
61*74a4d8c2SCharles.Forsyth 
62*74a4d8c2SCharles.Forsyth extern int	dosinit(Fs*);
63