root / lab4 / .minix-src / include / msdosfs / bpb.h @ 14
History | View | Annotate | Download (7.24 KB)
1 | 13 | up20180614 | /* $NetBSD: bpb.h,v 1.7 2012/11/04 17:57:59 jakllsch Exp $ */
|
---|---|---|---|
2 | |||
3 | /*
|
||
4 | * Written by Paul Popelka (paulp@uts.amdahl.com)
|
||
5 | *
|
||
6 | * You can do anything you want with this software, just don't say you wrote
|
||
7 | * it, and don't remove this notice.
|
||
8 | *
|
||
9 | * This software is provided "as is".
|
||
10 | *
|
||
11 | * The author supplies this software to be publicly redistributed on the
|
||
12 | * understanding that the author is not responsible for the correct
|
||
13 | * functioning of this software in any circumstances and is not liable for
|
||
14 | * any damages caused by this software.
|
||
15 | *
|
||
16 | * October 1992
|
||
17 | */
|
||
18 | |||
19 | #ifndef _MSDOSFS_BPB_H_
|
||
20 | #define _MSDOSFS_BPB_H_
|
||
21 | |||
22 | /*
|
||
23 | * BIOS Parameter Block (BPB) for DOS 3.3
|
||
24 | */
|
||
25 | struct bpb33 {
|
||
26 | u_int16_t bpbBytesPerSec; /* bytes per sector */
|
||
27 | u_int8_t bpbSecPerClust; /* sectors per cluster */
|
||
28 | u_int16_t bpbResSectors; /* number of reserved sectors */
|
||
29 | u_int8_t bpbFATs; /* number of FATs */
|
||
30 | u_int16_t bpbRootDirEnts; /* number of root directory entries */
|
||
31 | u_int16_t bpbSectors; /* total number of sectors */
|
||
32 | u_int8_t bpbMedia; /* media descriptor */
|
||
33 | u_int16_t bpbFATsecs; /* number of sectors per FAT */
|
||
34 | u_int16_t bpbSecPerTrack; /* sectors per track */
|
||
35 | u_int16_t bpbHeads; /* number of heads */
|
||
36 | u_int16_t bpbHiddenSecs; /* number of hidden sectors */
|
||
37 | }; |
||
38 | |||
39 | /*
|
||
40 | * BPB for DOS 5.0 The difference is bpbHiddenSecs is a short for DOS 3.3,
|
||
41 | * and bpbHugeSectors is not in the 3.3 bpb.
|
||
42 | */
|
||
43 | struct bpb50 {
|
||
44 | u_int16_t bpbBytesPerSec; /* bytes per sector */
|
||
45 | u_int8_t bpbSecPerClust; /* sectors per cluster */
|
||
46 | u_int16_t bpbResSectors; /* number of reserved sectors */
|
||
47 | u_int8_t bpbFATs; /* number of FATs */
|
||
48 | u_int16_t bpbRootDirEnts; /* number of root directory entries */
|
||
49 | u_int16_t bpbSectors; /* total number of sectors */
|
||
50 | u_int8_t bpbMedia; /* media descriptor */
|
||
51 | u_int16_t bpbFATsecs; /* number of sectors per FAT */
|
||
52 | u_int16_t bpbSecPerTrack; /* sectors per track */
|
||
53 | u_int16_t bpbHeads; /* number of heads */
|
||
54 | u_int32_t bpbHiddenSecs; /* # of hidden sectors */
|
||
55 | u_int32_t bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
|
||
56 | }; |
||
57 | |||
58 | /*
|
||
59 | * BPB for DOS 7.10 (FAT32). This one has a few extensions to bpb50.
|
||
60 | */
|
||
61 | struct bpb710 {
|
||
62 | u_int16_t bpbBytesPerSec; /* bytes per sector */
|
||
63 | u_int8_t bpbSecPerClust; /* sectors per cluster */
|
||
64 | u_int16_t bpbResSectors; /* number of reserved sectors */
|
||
65 | u_int8_t bpbFATs; /* number of FATs */
|
||
66 | u_int16_t bpbRootDirEnts; /* number of root directory entries */
|
||
67 | u_int16_t bpbSectors; /* total number of sectors */
|
||
68 | u_int8_t bpbMedia; /* media descriptor */
|
||
69 | u_int16_t bpbFATsecs; /* number of sectors per FAT */
|
||
70 | u_int16_t bpbSecPerTrack; /* sectors per track */
|
||
71 | u_int16_t bpbHeads; /* number of heads */
|
||
72 | u_int32_t bpbHiddenSecs; /* # of hidden sectors */
|
||
73 | u_int32_t bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
|
||
74 | u_int32_t bpbBigFATsecs; /* like bpbFATsecs for FAT32 */
|
||
75 | u_int16_t bpbExtFlags; /* extended flags: */
|
||
76 | #define FATNUM 0xf /* mask for numbering active FAT */ |
||
77 | #define FATMIRROR 0x80 /* FAT is mirrored (like it always was) */ |
||
78 | u_int16_t bpbFSVers; /* filesystem version */
|
||
79 | #define FSVERS 0 /* currently only 0 is understood */ |
||
80 | u_int32_t bpbRootClust; /* start cluster for root directory */
|
||
81 | u_int16_t bpbFSInfo; /* filesystem info structure sector */
|
||
82 | u_int16_t bpbBackup; /* backup boot sector */
|
||
83 | u_int8_t bpbReserved[12]; /* Reserved for future expansion */ |
||
84 | }; |
||
85 | |||
86 | #ifdef atari
|
||
87 | /*
|
||
88 | * BPB for GEMDOS filesystems. Atari leaves the obsolete stuff undefined.
|
||
89 | * Currently there is no need for a separate BPB structure.
|
||
90 | */
|
||
91 | #if 0
|
||
92 | struct bpb_a {
|
||
93 | u_int16_t bpbBytesPerSec; /* bytes per sector */
|
||
94 | u_int8_t bpbSecPerClust; /* sectors per cluster */
|
||
95 | u_int16_t bpbResSectors; /* number of reserved sectors */
|
||
96 | u_int8_t bpbFATs; /* number of FATs */
|
||
97 | u_int16_t bpbRootDirEnts; /* number of root directory entries */
|
||
98 | u_int16_t bpbSectors; /* total number of sectors */
|
||
99 | u_int8_t bpbUseless1; /* meaningless on GEMDOS FS */
|
||
100 | u_int16_t bpbFATsecs; /* number of sectors per FAT */
|
||
101 | u_int16_t bpbUseless2; /* meaningless for harddisk fs */
|
||
102 | u_int16_t bpbUseless3; /* meaningless for harddisk fs */
|
||
103 | u_int16_t bpbHiddenSecs; /* the TOS-BIOS ignores this */
|
||
104 | };
|
||
105 | #endif
|
||
106 | #endif /* atari */ |
||
107 | |||
108 | /*
|
||
109 | * The following structures represent how the bpb's look on disk. shorts
|
||
110 | * and longs are just character arrays of the appropriate length. This is
|
||
111 | * because the compiler forces shorts and longs to align on word or
|
||
112 | * halfword boundaries.
|
||
113 | */
|
||
114 | |||
115 | #include <sys/endian.h> |
||
116 | |||
117 | #define getushort(p) le16dec(p)
|
||
118 | #define getulong(p) le32dec(p)
|
||
119 | #define putushort(p, v) le16enc((p), (v))
|
||
120 | #define putulong(p, v) le32enc((p), (v))
|
||
121 | |||
122 | /*
|
||
123 | * BIOS Parameter Block (BPB) for DOS 3.3
|
||
124 | */
|
||
125 | struct byte_bpb33 {
|
||
126 | int8_t bpbBytesPerSec[2]; /* bytes per sector */ |
||
127 | int8_t bpbSecPerClust; /* sectors per cluster */
|
||
128 | int8_t bpbResSectors[2]; /* number of reserved sectors */ |
||
129 | int8_t bpbFATs; /* number of FATs */
|
||
130 | int8_t bpbRootDirEnts[2]; /* number of root directory entries */ |
||
131 | int8_t bpbSectors[2]; /* total number of sectors */ |
||
132 | int8_t bpbMedia; /* media descriptor */
|
||
133 | int8_t bpbFATsecs[2]; /* number of sectors per FAT */ |
||
134 | int8_t bpbSecPerTrack[2]; /* sectors per track */ |
||
135 | int8_t bpbHeads[2]; /* number of heads */ |
||
136 | int8_t bpbHiddenSecs[2]; /* number of hidden sectors */ |
||
137 | }; |
||
138 | |||
139 | /*
|
||
140 | * BPB for DOS 5.0 The difference is bpbHiddenSecs is a short for DOS 3.3,
|
||
141 | * and bpbHugeSectors is not in the 3.3 bpb.
|
||
142 | */
|
||
143 | struct byte_bpb50 {
|
||
144 | int8_t bpbBytesPerSec[2]; /* bytes per sector */ |
||
145 | int8_t bpbSecPerClust; /* sectors per cluster */
|
||
146 | int8_t bpbResSectors[2]; /* number of reserved sectors */ |
||
147 | int8_t bpbFATs; /* number of FATs */
|
||
148 | int8_t bpbRootDirEnts[2]; /* number of root directory entries */ |
||
149 | int8_t bpbSectors[2]; /* total number of sectors */ |
||
150 | int8_t bpbMedia; /* media descriptor */
|
||
151 | int8_t bpbFATsecs[2]; /* number of sectors per FAT */ |
||
152 | int8_t bpbSecPerTrack[2]; /* sectors per track */ |
||
153 | int8_t bpbHeads[2]; /* number of heads */ |
||
154 | int8_t bpbHiddenSecs[4]; /* number of hidden sectors */ |
||
155 | int8_t bpbHugeSectors[4]; /* # of sectors if bpbSectors == 0 */ |
||
156 | }; |
||
157 | |||
158 | /*
|
||
159 | * BPB for DOS 7.10 (FAT32). This one has a few extensions to bpb50.
|
||
160 | */
|
||
161 | struct byte_bpb710 {
|
||
162 | u_int8_t bpbBytesPerSec[2]; /* bytes per sector */ |
||
163 | u_int8_t bpbSecPerClust; /* sectors per cluster */
|
||
164 | u_int8_t bpbResSectors[2]; /* number of reserved sectors */ |
||
165 | u_int8_t bpbFATs; /* number of FATs */
|
||
166 | u_int8_t bpbRootDirEnts[2]; /* number of root directory entries */ |
||
167 | u_int8_t bpbSectors[2]; /* total number of sectors */ |
||
168 | u_int8_t bpbMedia; /* media descriptor */
|
||
169 | u_int8_t bpbFATsecs[2]; /* number of sectors per FAT */ |
||
170 | u_int8_t bpbSecPerTrack[2]; /* sectors per track */ |
||
171 | u_int8_t bpbHeads[2]; /* number of heads */ |
||
172 | u_int8_t bpbHiddenSecs[4]; /* # of hidden sectors */ |
||
173 | u_int8_t bpbHugeSectors[4]; /* # of sectors if bpbSectors == 0 */ |
||
174 | u_int8_t bpbBigFATsecs[4]; /* like bpbFATsecs for FAT32 */ |
||
175 | u_int8_t bpbExtFlags[2]; /* extended flags: */ |
||
176 | u_int8_t bpbFSVers[2]; /* filesystem version */ |
||
177 | u_int8_t bpbRootClust[4]; /* start cluster for root directory */ |
||
178 | u_int8_t bpbFSInfo[2]; /* filesystem info structure sector */ |
||
179 | u_int8_t bpbBackup[2]; /* backup boot sector */ |
||
180 | u_int8_t bpbReserved[12]; /* Reserved for future expansion */ |
||
181 | }; |
||
182 | |||
183 | /*
|
||
184 | * FAT32 FSInfo block.
|
||
185 | */
|
||
186 | struct fsinfo {
|
||
187 | u_int8_t fsisig1[4];
|
||
188 | u_int8_t fsifill1[480];
|
||
189 | u_int8_t fsisig2[4];
|
||
190 | u_int8_t fsinfree[4];
|
||
191 | u_int8_t fsinxtfree[4];
|
||
192 | u_int8_t fsifill2[12];
|
||
193 | u_int8_t fsisig3[4];
|
||
194 | u_int8_t fsifill3[508];
|
||
195 | u_int8_t fsisig4[4];
|
||
196 | }; |
||
197 | #endif /* _MSDOSFS_BPB_H_ */ |