Root/
Source at commit 296 created 12 years 10 months ago. By ifabio, add i386 folder | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 1998-2009 Apple Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * This file contains Original Code and/or Modifications of Original Code␊ |
7 | * as defined in and that are subject to the Apple Public Source License␊ |
8 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
9 | * compliance with the License. Please obtain a copy of the License at␊ |
10 | * http://www.opensource.apple.com/apsl/ and read it before using this␊ |
11 | * file.␊ |
12 | * ␊ |
13 | * The Original Code and all software distributed under the License are␊ |
14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
18 | * Please see the License for the specific language governing rights and␊ |
19 | * limitations under the License.␊ |
20 | * ␊ |
21 | * @APPLE_LICENSE_HEADER_END@␊ |
22 | */␊ |
23 | ␊ |
24 | /*␊ |
25 | * This header contains the IOFDiskPartitionScheme class definition.␊ |
26 | */␊ |
27 | ␊ |
28 | #ifndef _IOFDISKPARTITIONSCHEME_H␊ |
29 | #define _IOFDISKPARTITIONSCHEME_H␊ |
30 | ␊ |
31 | #include <IOKit/IOTypes.h>␊ |
32 | ␊ |
33 | /*␊ |
34 | * kIOFDiskPartitionSchemeClass is the name of the IOFDiskPartitionScheme class.␊ |
35 | */␊ |
36 | ␊ |
37 | #define kIOFDiskPartitionSchemeClass "IOFDiskPartitionScheme"␊ |
38 | ␊ |
39 | /*␊ |
40 | * FDisk Partition Map Definitions␊ |
41 | */␊ |
42 | ␊ |
43 | #pragma pack(push, 1) /* (enable 8-bit struct packing) */␊ |
44 | ␊ |
45 | /* Structure constants. */␊ |
46 | ␊ |
47 | #define DISK_BLK0SZ sizeof(struct disk_blk0) /* (size of partition map) */␊ |
48 | #define DISK_BOOTSZ 446 /* (size of boot code in map) */␊ |
49 | #define DISK_NPART 4 /* (number of entries in map) */␊ |
50 | ␊ |
51 | /* Partition map entry. */␊ |
52 | ␊ |
53 | struct fdisk_part␊ |
54 | {␊ |
55 | UInt8 bootid; /* (is active boot partition?) */␊ |
56 | UInt8 beghead; /* (beginning head) */␊ |
57 | UInt8 begsect; /* (beginning sector; beginning cylinder, high 2 bits) */␊ |
58 | UInt8 begcyl; /* (beginning cylinder, low 8 bits) */␊ |
59 | UInt8 systid; /* (type) */␊ |
60 | UInt8 endhead; /* (ending head) */␊ |
61 | UInt8 endsect; /* (ending sector; ending cylinder, high 2 bits) */␊ |
62 | UInt8 endcyl; /* (ending cylinder, low 8 bits) */␊ |
63 | UInt32 relsect; /* (block start) */␊ |
64 | UInt32 numsect; /* (block count) */␊ |
65 | };␊ |
66 | ␊ |
67 | /* Partition map, as found in block zero of the disk (or extended partition). */␊ |
68 | ␊ |
69 | struct disk_blk0␊ |
70 | {␊ |
71 | UInt8 bootcode[DISK_BOOTSZ]; /* (boot code) */␊ |
72 | struct fdisk_part parts[DISK_NPART]; /* (partition entries) */␊ |
73 | UInt16 signature; /* (unique signature for map) */␊ |
74 | };␊ |
75 | ␊ |
76 | /* Partition map signature (signature). */␊ |
77 | ␊ |
78 | #define DISK_SIGNATURE 0xAA55␊ |
79 | ␊ |
80 | /* Partition map entry types (systid). */␊ |
81 | ␊ |
82 | #define FDISK_PARTITION_TYPE_01 "DOS_FAT_12"␊ |
83 | #define FDISK_PARTITION_TYPE_04 "DOS_FAT_16_S"␊ |
84 | #define FDISK_PARTITION_TYPE_06 "DOS_FAT_16"␊ |
85 | #define FDISK_PARTITION_TYPE_07 "Windows_NTFS"␊ |
86 | #define FDISK_PARTITION_TYPE_0B "DOS_FAT_32"␊ |
87 | #define FDISK_PARTITION_TYPE_0C "Windows_FAT_32"␊ |
88 | #define FDISK_PARTITION_TYPE_0E "Windows_FAT_16"␊ |
89 | #define FDISK_PARTITION_TYPE_42 "Windows_LDM"␊ |
90 | #define FDISK_PARTITION_TYPE_82 "Linux_Swap"␊ |
91 | #define FDISK_PARTITION_TYPE_83 "Linux"␊ |
92 | #define FDISK_PARTITION_TYPE_8E "Linux_LVM"␊ |
93 | #define FDISK_PARTITION_TYPE_A5 "FreeBSD"␊ |
94 | #define FDISK_PARTITION_TYPE_A6 "OpenBSD"␊ |
95 | #define FDISK_PARTITION_TYPE_A7 "Apple_Rhapsody_UFS"␊ |
96 | #define FDISK_PARTITION_TYPE_A8 "Apple_UFS"␊ |
97 | #define FDISK_PARTITION_TYPE_A9 "NetBSD"␊ |
98 | #define FDISK_PARTITION_TYPE_AB "Apple_Boot"␊ |
99 | #define FDISK_PARTITION_TYPE_AE "Apple_Encrypted"␊ |
100 | #define FDISK_PARTITION_TYPE_AF "Apple_HFS"␊ |
101 | #define FDISK_PARTITION_TYPE_FD "Linux_RAID"␊ |
102 | ␊ |
103 | #pragma pack(pop) /* (reset to default struct packing) */␊ |
104 | ␊ |
105 | #ifdef KERNEL␊ |
106 | #ifdef __cplusplus␊ |
107 | ␊ |
108 | /*␊ |
109 | * Kernel␊ |
110 | */␊ |
111 | ␊ |
112 | #include <IOKit/storage/IOPartitionScheme.h>␊ |
113 | ␊ |
114 | /*␊ |
115 | * Class␊ |
116 | */␊ |
117 | ␊ |
118 | class IOFDiskPartitionScheme : public IOPartitionScheme␊ |
119 | {␊ |
120 | OSDeclareDefaultStructors(IOFDiskPartitionScheme);␊ |
121 | ␊ |
122 | protected:␊ |
123 | ␊ |
124 | struct ExpansionData { /* */ };␊ |
125 | ExpansionData * _expansionData;␊ |
126 | ␊ |
127 | OSSet * _partitions; /* (set of media objects representing partitions) */␊ |
128 | ␊ |
129 | /*␊ |
130 | * Free all of this object's outstanding resources.␊ |
131 | */␊ |
132 | ␊ |
133 | virtual void free(void);␊ |
134 | ␊ |
135 | /*␊ |
136 | * Scan the provider media for an FDisk partition map. Returns the set␊ |
137 | * of media objects representing each of the partitions (the retain for␊ |
138 | * the set is passed to the caller), or null should no partition map be␊ |
139 | * found. The default probe score can be adjusted up or down, based on␊ |
140 | * the confidence of the scan.␊ |
141 | */␊ |
142 | ␊ |
143 | virtual OSSet * scan(SInt32 * score);␊ |
144 | ␊ |
145 | /*␊ |
146 | * Ask whether the given partition is extended.␊ |
147 | */␊ |
148 | ␊ |
149 | virtual bool isPartitionExtended(fdisk_part * partition);␊ |
150 | ␊ |
151 | /*␊ |
152 | * Ask whether the given partition is used.␊ |
153 | */␊ |
154 | ␊ |
155 | virtual bool isPartitionUsed(fdisk_part * partition);␊ |
156 | ␊ |
157 | /*␊ |
158 | * Ask whether the given partition appears to be corrupt. A partition that␊ |
159 | * is corrupt will cause the failure of the FDisk partition map recognition␊ |
160 | * altogether.␊ |
161 | */␊ |
162 | ␊ |
163 | virtual bool isPartitionCorrupt( fdisk_part * partition,␊ |
164 | UInt32 partitionID,␊ |
165 | UInt32 fdiskBlock );␊ |
166 | ␊ |
167 | /*␊ |
168 | * Ask whether the given partition appears to be invalid. A partition that␊ |
169 | * is invalid will cause it to be skipped in the scan, but will not cause a␊ |
170 | * failure of the FDisk partition map recognition.␊ |
171 | */␊ |
172 | ␊ |
173 | virtual bool isPartitionInvalid( fdisk_part * partition,␊ |
174 | UInt32 partitionID,␊ |
175 | UInt32 fdiskBlock );␊ |
176 | ␊ |
177 | /*␊ |
178 | * Instantiate a new media object to represent the given partition.␊ |
179 | */␊ |
180 | ␊ |
181 | virtual IOMedia * instantiateMediaObject( fdisk_part * partition,␊ |
182 | UInt32 partitionID,␊ |
183 | UInt32 fdiskBlock );␊ |
184 | ␊ |
185 | /*␊ |
186 | * Allocate a new media object (called from instantiateMediaObject).␊ |
187 | */␊ |
188 | ␊ |
189 | virtual IOMedia * instantiateDesiredMediaObject( fdisk_part * partition,␊ |
190 | UInt32 partitionID,␊ |
191 | UInt32 fdiskBlock );␊ |
192 | ␊ |
193 | #ifndef __LP64__␊ |
194 | /*␊ |
195 | * Attach the given media object to the device tree plane.␊ |
196 | */␊ |
197 | ␊ |
198 | virtual bool attachMediaObjectToDeviceTree(IOMedia * media) __attribute__ ((deprecated));␊ |
199 | ␊ |
200 | /*␊ |
201 | * Detach the given media object from the device tree plane.␊ |
202 | */␊ |
203 | ␊ |
204 | virtual void detachMediaObjectFromDeviceTree(IOMedia * media) __attribute__ ((deprecated));␊ |
205 | #endif /* !__LP64__ */␊ |
206 | ␊ |
207 | public:␊ |
208 | ␊ |
209 | /*␊ |
210 | * Initialize this object's minimal state.␊ |
211 | */␊ |
212 | ␊ |
213 | virtual bool init(OSDictionary * properties = 0);␊ |
214 | ␊ |
215 | /*␊ |
216 | * Determine whether the provider media contains an FDisk partition map.␊ |
217 | */␊ |
218 | ␊ |
219 | virtual IOService * probe(IOService * provider, SInt32 * score);␊ |
220 | ␊ |
221 | /*␊ |
222 | * Publish the new media objects which represent our partitions.␊ |
223 | */␊ |
224 | ␊ |
225 | virtual bool start(IOService * provider);␊ |
226 | ␊ |
227 | /*␊ |
228 | * Clean up after the media objects we published before terminating.␊ |
229 | */␊ |
230 | ␊ |
231 | virtual void stop(IOService * provider);␊ |
232 | ␊ |
233 | /*␊ |
234 | * Request that the provider media be re-scanned for partitions.␊ |
235 | */␊ |
236 | ␊ |
237 | virtual IOReturn requestProbe(IOOptionBits options);␊ |
238 | ␊ |
239 | #ifdef __LP64__␊ |
240 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 0);␊ |
241 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 1);␊ |
242 | #else /* !__LP64__ */␊ |
243 | OSMetaClassDeclareReservedUsed(IOFDiskPartitionScheme, 0);␊ |
244 | OSMetaClassDeclareReservedUsed(IOFDiskPartitionScheme, 1);␊ |
245 | #endif /* !__LP64__ */␊ |
246 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 2);␊ |
247 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 3);␊ |
248 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 4);␊ |
249 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 5);␊ |
250 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 6);␊ |
251 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 7);␊ |
252 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 8);␊ |
253 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 9);␊ |
254 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 10);␊ |
255 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 11);␊ |
256 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 12);␊ |
257 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 13);␊ |
258 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 14);␊ |
259 | OSMetaClassDeclareReservedUnused(IOFDiskPartitionScheme, 15);␊ |
260 | };␊ |
261 | ␊ |
262 | #endif /* __cplusplus */␊ |
263 | #endif /* KERNEL */␊ |
264 | #endif /* !_IOFDISKPARTITIONSCHEME_H */␊ |
265 |