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