Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | /* * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * The contents of this file constitute Original Code as defined in and * are subject to the Apple Public Source License Version 1.1 (the * "License"). You may not use this file except in compliance with the * License. Please obtain a copy of the License at * http://www.apple.com/publicsource and read it before using this file. * * This Original Code and all software distributed under the License are * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License. * * @APPLE_LICENSE_HEADER_END@ */ #ifndef _IOAPPLEPARTITIONSCHEME_H #define _IOAPPLEPARTITIONSCHEME_H #include <IOKit/IOTypes.h> /* * Apple Partition Map Definitions */ #pragma pack(2) /* (enable 16-bit struct packing for dpme, DDMap, Block0) */ /* Structure constants. */ #define DPISTRLEN 32 /* Partition map entry, as found in blocks 1 to dpme_map_entries of the disk. */ typedef struct dpme { UInt16 dpme_signature; /* (unique value for partition entry, 'PM') */ UInt16 dpme_reserved_1; /* (reserved for future use) */ UInt32 dpme_map_entries; /* (number of partition entries) */ UInt32 dpme_pblock_start; /* (physical block start of partition) */ UInt32 dpme_pblocks; /* (physical block count of partition) */ char dpme_name[DPISTRLEN]; /* (name of partition) */ char dpme_type[DPISTRLEN]; /* (type of partition, eg. Apple_HFS) */ UInt32 dpme_lblock_start; /* (logical block start of partition) */ UInt32 dpme_lblocks; /* (logical block count of partition) */ UInt32 dpme_flags; /* (partition flags, see defines below) */ UInt32 dpme_boot_block; /* (logical block start of boot code) */ UInt32 dpme_boot_bytes; /* (byte count of boot code) */ UInt8 * dpme_load_addr; /* (load address in memory of boot code) */ UInt8 * dpme_load_addr_2; /* (reserved for future use) */ UInt8 * dpme_goto_addr; /* (jump address in memory of boot code) */ UInt8 * dpme_goto_addr_2; /* (reserved for future use) */ UInt32 dpme_checksum; /* (checksum of boot code) */ UInt8 dpme_process_id[16]; /* (processor type) */ UInt32 dpme_reserved_2[32]; /* (reserved for future use) */ UInt32 dpme_reserved_3[62]; /* (reserved for future use) */ } DPME; /* Driver descriptor map entry. */ typedef struct DDMap { UInt32 ddBlock; /* (driver's block start, sbBlkSize-blocks) */ UInt16 ddSize; /* (driver's block count, 512-blocks) */ UInt16 ddType; /* (driver's system type) */ } DDMap; /* Driver descriptor map, as found in block zero of the disk. */ typedef struct Block0 { UInt16 sbSig; /* (unique value for block zero, 'ER') */ UInt16 sbBlkSize; /* (block size for this device) */ UInt32 sbBlkCount; /* (block count for this device) */ UInt16 sbDevType; /* (device type) */ UInt16 sbDevId; /* (device id) */ UInt32 sbDrvrData; /* (driver data) */ UInt16 sbDrvrCount; /* (driver descriptor count) */ DDMap sbDrvrMap[8]; /* (driver descriptor table) */ UInt8 sbReserved[430]; /* (reserved for future use) */ } Block0; /* Partition map signature (sbSig). */ #define BLOCK0_SIGNATURE 0x4552 /* Partition map entry signature (dpme_signature). */ #define DPME_SIGNATURE 0x504D /* Partition map entry flags (dpme_flags). */ #define DPME_FLAGS_VALID 0x00000001 /* (bit 0) */ #define DPME_FLAGS_ALLOCATED 0x00000002 /* (bit 1) */ #define DPME_FLAGS_IN_USE 0x00000004 /* (bit 2) */ #define DPME_FLAGS_BOOTABLE 0x00000008 /* (bit 3) */ #define DPME_FLAGS_READABLE 0x00000010 /* (bit 4) */ #define DPME_FLAGS_WRITABLE 0x00000020 /* (bit 5) */ #define DPME_FLAGS_OS_PIC_CODE 0x00000040 /* (bit 6) */ #define DPME_FLAGS_OS_SPECIFIC_2 0x00000080 /* (bit 7) */ #define DPME_FLAGS_OS_SPECIFIC_1 0x00000100 /* (bit 8) */ #define DPME_FLAGS_RESERVED_2 0xFFFFFE00 /* (bit 9..31) */ #pragma options align=reset /* (reset to default struct packing) */ /* * Kernel */ #if defined(KERNEL) && defined(__cplusplus) #include <IOKit/storage/IOPartitionScheme.h> /* * Class */ class IOApplePartitionScheme : public IOPartitionScheme { OSDeclareDefaultStructors(IOApplePartitionScheme); protected: struct ExpansionData { /* */ }; ExpansionData * _expansionData; OSSet * _partitions; /* (set of media objects representing partitions) */ /* * Free all of this object's outstanding resources. */ virtual void free(void); /* * Scan the provider media for an Apple partition map. Returns the set * of media objects representing each of the partitions (the retain for * the set is passed to the caller), or null should no partition map be * found. The default probe score can be adjusted up or down, based on * the confidence of the scan. */ virtual OSSet * scan(SInt32 * score); /* * Ask whether the given partition appears to be corrupt. A partition that * is corrupt will cause the failure of the Apple partition map recognition * altogether. */ virtual bool isPartitionCorrupt( dpme * partition, UInt32 partitionID, UInt32 partitionBlockSize ); /* * Ask whether the given partition appears to be invalid. A partition that * is invalid will cause it to be skipped in the scan, but will not cause a * failure of the Apple partition map recognition. */ virtual bool isPartitionInvalid( dpme * partition, UInt32 partitionID, UInt32 partitionBlockSize ); /* * Instantiate a new media object to represent the given partition. */ virtual IOMedia * instantiateMediaObject( dpme * partition, UInt32 partitionID, UInt32 partitionBlockSize ); /* * Allocate a new media object (called from instantiateMediaObject). */ virtual IOMedia * instantiateDesiredMediaObject( dpme * partition, UInt32 partitionID, UInt32 partitionBlockSize ); /* * Attach the given media object to the device tree plane. */ virtual bool attachMediaObjectToDeviceTree(IOMedia * media); /* * Detach the given media object from the device tree plane. */ virtual void detachMediaObjectFromDeviceTree(IOMedia * media); public: /* * Initialize this object's minimal state. */ virtual bool init(OSDictionary * properties = 0); /* * Determine whether the provider media contains an Apple partition map. */ virtual IOService * probe(IOService * provider, SInt32 * score); /* * Publish the new media objects which represent our partitions. */ virtual bool start(IOService * provider); /* * Clean up after the media objects we published before terminating. */ virtual void stop(IOService * provider); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 0); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 1); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 2); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 3); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 4); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 5); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 6); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 7); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 8); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 9); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 10); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 11); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 12); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 13); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 14); OSMetaClassDeclareReservedUnused(IOApplePartitionScheme, 15); }; #endif /* defined(KERNEL) && defined(__cplusplus) */ #endif /* !_IOAPPLEPARTITIONSCHEME_H */ |