dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / cmd / fs.d / pcfs / fsck / pcfs_bpb.h
blobc2c630fc38f814ab4bdab284ffc7f5a9d3f24b08
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright (c) 1999 by Sun Microsystems, Inc.
24 * All rights reserved.
27 #ifndef _PCFS_BPB_H
28 #define _PCFS_BPB_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
37 * Common Bios Parameter Block definitions for the pcfs user-level utilities
39 * At press time these definitions are duplicated in mkfs_pcfs.h. They really
40 * need to be separated out of mkfs_pcfs.h and then it should reference this
41 * file.
43 #define BPSEC 512 /* Assumed # of bytes per sector */
45 #define OPCODE1 0xE9
46 #define OPCODE2 0xEB
47 #define BOOTSECSIG 0xAA55
50 * Offset (in bytes) from address of boot sector to where we put
51 * the backup copy of that sector. (FAT32 only)
53 #define BKUP_BOOTSECT_OFFSET 0xC00
55 #define uppercase(c) ((c) >= 'a' && (c) <= 'z' ? (c) - 'a' + 'A' : (c))
57 #define FAT12_TYPE_STRING "FAT12 "
58 #define FAT16_TYPE_STRING "FAT16 "
59 #define FAT32_TYPE_STRING "FAT32 "
61 #define FAT12_ENTSPERSECT 341
62 #define FAT16_ENTSPERSECT 256
63 #define FAT32_ENTSPERSECT 128
65 #ifndef SUNIXOSBOOT
66 #define SUNIXOSBOOT 190 /* Solaris UNIX boot partition */
67 #endif
70 * MS-DOS Disk layout:
72 * ---------------------
73 * | Boot sector |
74 * |-------------------|
75 * | Reserved area |
76 * |-------------------|
77 * | FAT #1 |
78 * |-------------------|
79 * | FAT #2 |
80 * |-------------------|
81 * | Root directory |
82 * |-------------------|
83 * | |
84 * | File area |
85 * |___________________|
87 #ifdef i386
88 #pragma pack(1)
89 #endif
90 struct _orig_bios_param_blk {
91 uint16_t bytes_per_sector;
92 uchar_t sectors_per_cluster;
93 uint16_t resv_sectors;
94 uchar_t num_fats;
95 uint16_t num_root_entries;
97 * The sectors_in_volume field will be zero on larger volumes (>32Mb)
98 * and newer file systems (>=MSDOS4.0). In these cases the
99 * sectors_in_logical_volume field should be used instead.
101 uint16_t sectors_in_volume;
102 uchar_t media;
103 uint16_t sectors_per_fat;
104 uint16_t sectors_per_track;
105 uint16_t heads;
107 * Number of sectors in the partition prior to the start of the logical disk
109 uint32_t hidden_sectors;
110 uint32_t sectors_in_logical_volume;
112 #ifdef i386
113 #pragma pack()
114 #endif
116 #ifdef i386
117 #pragma pack(1)
118 #endif
119 struct _bpb32_extensions {
120 uint32_t big_sectors_per_fat;
121 uint16_t ext_flags;
122 uchar_t fs_vers_lo;
123 uchar_t fs_vers_hi;
124 uint32_t root_dir_clust;
125 uint16_t fsinfosec;
126 uint16_t backupboot;
127 uint16_t reserved[6];
129 #ifdef i386
130 #pragma pack()
131 #endif
133 #ifdef i386
134 #pragma pack(1)
135 #endif
136 struct _bpb_extensions {
137 uchar_t phys_drive_num;
138 uchar_t reserved;
139 uchar_t ext_signature;
140 uint32_t volume_id;
141 uchar_t volume_label[11];
142 uchar_t type[8];
144 #ifdef i386
145 #pragma pack()
146 #endif
148 #ifdef i386
149 #pragma pack(1)
150 #endif
151 struct _sun_bpb_extensions {
152 uint16_t bs_offset_high;
153 uint16_t bs_offset_low;
155 #ifdef i386
156 #pragma pack()
157 #endif
160 * bpb_t is a conglomeration of all the fields a bpb can have. Every
161 * bpb will have the orig_bios struct, but only FAT32's will have bpb32,
162 * and only Solaris boot diskettes will have the sunbpb structure.
164 typedef struct _bios_param_blk {
165 struct _orig_bios_param_blk bpb;
166 struct _bpb32_extensions bpb32;
167 struct _bpb_extensions ebpb;
168 struct _sun_bpb_extensions sunbpb;
169 } bpb_t;
171 #ifdef i386
172 #pragma pack(1)
173 struct _bpb_head {
174 uchar_t bs_jump_code[3];
175 uchar_t bs_oem_name[8];
176 struct _orig_bios_param_blk bs_bpb;
178 #pragma pack()
180 #pragma pack(1)
181 struct _boot_sector {
182 struct _bpb_head bs_front;
183 struct _bpb_extensions bs_ebpb;
184 struct _sun_bpb_extensions bs_sebpb;
185 uchar_t bs_bootstrap[444];
186 uchar_t bs_signature[2];
188 #pragma pack()
190 #pragma pack(1)
191 struct _boot_sector32 {
192 struct _bpb_head bs_front;
193 struct _bpb32_extensions bs_bpb32;
194 struct _bpb_extensions bs_ebpb;
195 uchar_t bs_bootstrap[420];
196 uchar_t bs_signature[2];
198 #pragma pack()
199 #else
200 #define ORIG_BPB_START_INDEX 8 /* index into filler field */
201 #define EXT_BPB_START_INDEX 33 /* index into filler field */
202 #define BPB_32_START_INDEX 33 /* index into filler field */
203 #define EXT_BPB_32_START_INDEX 61 /* index into filler field */
204 struct _boot_sector {
205 uchar_t bs_jump_code[3];
206 uchar_t bs_filler[59];
207 uchar_t bs_sun_bpb[4];
208 uchar_t bs_bootstrap[444];
209 uchar_t bs_signature[2];
212 struct _boot_sector32 {
213 uchar_t bs_jump_code[3];
214 uchar_t bs_filler[87];
215 uchar_t bs_bootstrap[420];
216 uchar_t bs_signature[2];
218 #endif
220 typedef union _ubso {
221 struct _boot_sector bs;
222 struct _boot_sector32 bs32;
223 struct mboot mb;
224 uchar_t buf[BPSEC];
225 } boot_sector_t;
227 #ifdef __cplusplus
229 #endif
231 #endif /* _PCFS_BPB_H */