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