xref: /inferno-os/os/boot/rpcg/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 FATHUGE	0x06
22*74a4d8c2SCharles.Forsyth #define DMDDO	0x54
23*74a4d8c2SCharles.Forsyth 
24*74a4d8c2SCharles.Forsyth struct Dosboot{
25*74a4d8c2SCharles.Forsyth 	uchar	magic[3];
26*74a4d8c2SCharles.Forsyth 	uchar	version[8];
27*74a4d8c2SCharles.Forsyth 	uchar	sectsize[2];
28*74a4d8c2SCharles.Forsyth 	uchar	clustsize;
29*74a4d8c2SCharles.Forsyth 	uchar	nresrv[2];
30*74a4d8c2SCharles.Forsyth 	uchar	nfats;
31*74a4d8c2SCharles.Forsyth 	uchar	rootsize[2];
32*74a4d8c2SCharles.Forsyth 	uchar	volsize[2];
33*74a4d8c2SCharles.Forsyth 	uchar	mediadesc;
34*74a4d8c2SCharles.Forsyth 	uchar	fatsize[2];
35*74a4d8c2SCharles.Forsyth 	uchar	trksize[2];
36*74a4d8c2SCharles.Forsyth 	uchar	nheads[2];
37*74a4d8c2SCharles.Forsyth 	uchar	nhidden[4];
38*74a4d8c2SCharles.Forsyth 	uchar	bigvolsize[4];
39*74a4d8c2SCharles.Forsyth 	uchar	driveno;
40*74a4d8c2SCharles.Forsyth 	uchar	reserved0;
41*74a4d8c2SCharles.Forsyth 	uchar	bootsig;
42*74a4d8c2SCharles.Forsyth 	uchar	volid[4];
43*74a4d8c2SCharles.Forsyth 	uchar	label[11];
44*74a4d8c2SCharles.Forsyth 	uchar	reserved1[8];
45*74a4d8c2SCharles.Forsyth };
46*74a4d8c2SCharles.Forsyth 
47*74a4d8c2SCharles.Forsyth struct Dosfile{
48*74a4d8c2SCharles.Forsyth 	Dos	*dos;		/* owning dos file system */
49*74a4d8c2SCharles.Forsyth 	char	name[8];
50*74a4d8c2SCharles.Forsyth 	char	ext[3];
51*74a4d8c2SCharles.Forsyth 	uchar	attr;
52*74a4d8c2SCharles.Forsyth 	long	length;
53*74a4d8c2SCharles.Forsyth 	long	pstart;		/* physical start cluster address */
54*74a4d8c2SCharles.Forsyth 	long	pcurrent;	/* physical current cluster address */
55*74a4d8c2SCharles.Forsyth 	long	lcurrent;	/* logical current cluster address */
56*74a4d8c2SCharles.Forsyth 	long	offset;
57*74a4d8c2SCharles.Forsyth };
58*74a4d8c2SCharles.Forsyth 
59*74a4d8c2SCharles.Forsyth struct Dos{
60*74a4d8c2SCharles.Forsyth 	int	dev;				/* device id */
61*74a4d8c2SCharles.Forsyth 	long	(*read)(int, void*, long);	/* read routine */
62*74a4d8c2SCharles.Forsyth 	long	(*seek)(int, long);		/* seek routine */
63*74a4d8c2SCharles.Forsyth 
64*74a4d8c2SCharles.Forsyth 	int	start;		/* start of file system */
65*74a4d8c2SCharles.Forsyth 	int	sectsize;	/* in bytes */
66*74a4d8c2SCharles.Forsyth 	int	clustsize;	/* in sectors */
67*74a4d8c2SCharles.Forsyth 	int	clustbytes;	/* in bytes */
68*74a4d8c2SCharles.Forsyth 	int	nresrv;		/* sectors */
69*74a4d8c2SCharles.Forsyth 	int	nfats;		/* usually 2 */
70*74a4d8c2SCharles.Forsyth 	int	rootsize;	/* number of entries */
71*74a4d8c2SCharles.Forsyth 	int	volsize;	/* in sectors */
72*74a4d8c2SCharles.Forsyth 	int	mediadesc;
73*74a4d8c2SCharles.Forsyth 	int	fatsize;	/* in sectors */
74*74a4d8c2SCharles.Forsyth 	int	fatclusters;
75*74a4d8c2SCharles.Forsyth 	int	fatbits;	/* 12 or 16 */
76*74a4d8c2SCharles.Forsyth 	long	fataddr;	/* sector number */
77*74a4d8c2SCharles.Forsyth 	long	rootaddr;
78*74a4d8c2SCharles.Forsyth 	long	dataaddr;
79*74a4d8c2SCharles.Forsyth 	long	freeptr;
80*74a4d8c2SCharles.Forsyth 
81*74a4d8c2SCharles.Forsyth 	Dosfile	root;
82*74a4d8c2SCharles.Forsyth };
83*74a4d8c2SCharles.Forsyth 
84*74a4d8c2SCharles.Forsyth struct Dosdir{
85*74a4d8c2SCharles.Forsyth 	uchar	name[8];
86*74a4d8c2SCharles.Forsyth 	uchar	ext[3];
87*74a4d8c2SCharles.Forsyth 	uchar	attr;
88*74a4d8c2SCharles.Forsyth 	uchar	reserved[10];
89*74a4d8c2SCharles.Forsyth 	uchar	time[2];
90*74a4d8c2SCharles.Forsyth 	uchar	date[2];
91*74a4d8c2SCharles.Forsyth 	uchar	start[2];
92*74a4d8c2SCharles.Forsyth 	uchar	length[4];
93*74a4d8c2SCharles.Forsyth };
94*74a4d8c2SCharles.Forsyth 
95*74a4d8c2SCharles.Forsyth #define	DRONLY	0x01
96*74a4d8c2SCharles.Forsyth #define	DHIDDEN	0x02
97*74a4d8c2SCharles.Forsyth #define	DSYSTEM	0x04
98*74a4d8c2SCharles.Forsyth #define	DVLABEL	0x08
99*74a4d8c2SCharles.Forsyth #define	DDIR	0x10
100*74a4d8c2SCharles.Forsyth #define	DARCH	0x20
101*74a4d8c2SCharles.Forsyth 
102*74a4d8c2SCharles.Forsyth extern int chatty;
103*74a4d8c2SCharles.Forsyth 
104*74a4d8c2SCharles.Forsyth extern int dosboot(Dos*, char*);
105*74a4d8c2SCharles.Forsyth extern int dosinit(Dos*, int, int);
106*74a4d8c2SCharles.Forsyth extern long dosread(Dosfile*, void*, long);
107*74a4d8c2SCharles.Forsyth extern int dosstat(Dos*, char*, Dosfile*);
108*74a4d8c2SCharles.Forsyth extern int doswalk(Dosfile*, char*);
109*74a4d8c2SCharles.Forsyth 
110*74a4d8c2SCharles.Forsyth extern int plan9ini(Dos*, char*);
111