|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: ! 23: #ifndef _IOAPPLEPARTITIONSCHEME_H ! 24: #define _IOAPPLEPARTITIONSCHEME_H ! 25: ! 26: #include <IOKit/IOTypes.h> ! 27: ! 28: /* ! 29: * Apple Partition Map Definitions ! 30: * ! 31: * o "dpme" is short for disk partition map entry ! 32: * o "dpme" and "Block0" are, and shall remain, 512 bytes long ! 33: * o for more information see: ! 34: * o "Inside Macintosh: Devices" pages 3-12 to 3-15 ! 35: * o "Inside Macintosh - Volume V" pages V-576 to V-582 ! 36: * o "Inside Macintosh - Volume IV" page IV-292 ! 37: */ ! 38: ! 39: #pragma pack(4) /* (enable 32-bit struct packing for dpme, DDMap, Block0) */ ! 40: ! 41: /* ! 42: * General constants. ! 43: */ ! 44: ! 45: #define BLOCK0_SIGNATURE 0x4552 /* (unique value for block zero, 'ER') */ ! 46: #define DPME_SIGNATURE 0x504D /* (unique value for partition entry, 'PM') */ ! 47: #define DPISTRLEN 32 ! 48: ! 49: /* ! 50: * Partition map entry, as found in blocks 1..n of the disk. ! 51: */ ! 52: ! 53: struct dpme ! 54: { ! 55: UInt16 dpme_signature; /* (unique value for partition entry, 'PM') */ ! 56: UInt16 dpme_reserved_1; /* (reserved for future use) */ ! 57: UInt32 dpme_map_entries; /* (number of partition entries) */ ! 58: UInt32 dpme_pblock_start; /* (physical block start of partition) */ ! 59: UInt32 dpme_pblocks; /* (physical block count of partition) */ ! 60: char dpme_name[DPISTRLEN]; /* (name of partition) */ ! 61: char dpme_type[DPISTRLEN]; /* (type of partition, eg. Apple_HFS) */ ! 62: UInt32 dpme_lblock_start; /* (logical block start of partition) */ ! 63: UInt32 dpme_lblocks; /* (logical block count of partition) */ ! 64: UInt32 dpme_flags; /* (partition flags, see defines below) */ ! 65: UInt32 dpme_boot_block; ! 66: UInt32 dpme_boot_bytes; ! 67: UInt8 * dpme_load_addr; ! 68: UInt8 * dpme_load_addr_2; ! 69: UInt8 * dpme_goto_addr; ! 70: UInt8 * dpme_goto_addr_2; ! 71: UInt32 dpme_checksum; ! 72: UInt8 dpme_process_id[16]; ! 73: UInt32 dpme_boot_args[32]; ! 74: UInt32 dpme_reserved_3[62]; ! 75: }; ! 76: typedef struct dpme DPME; ! 77: ! 78: /* ! 79: * Partition map entry flags (dpme_flags). ! 80: */ ! 81: ! 82: #define DPME_FLAGS_VALID 0x00000001 /* (bit 0) */ ! 83: #define DPME_FLAGS_ALLOCATED 0x00000002 /* (bit 1) */ ! 84: #define DPME_FLAGS_IN_USE 0x00000004 /* (bit 2) */ ! 85: #define DPME_FLAGS_BOOTABLE 0x00000008 /* (bit 3) */ ! 86: #define DPME_FLAGS_READABLE 0x00000010 /* (bit 4) */ ! 87: #define DPME_FLAGS_WRITABLE 0x00000020 /* (bit 5) */ ! 88: #define DPME_FLAGS_OS_PIC_CODE 0x00000040 /* (bit 6) */ ! 89: #define DPME_FLAGS_OS_SPECIFIC_2 0x00000080 /* (bit 7) */ ! 90: #define DPME_FLAGS_OS_SPECIFIC_1 0x00000100 /* (bit 8) */ ! 91: #define DPME_FLAGS_RESERVED_2 0xFFFFFE00 /* (bit 9..31) */ ! 92: ! 93: /* ! 94: * Driver descriptor map entry, as found in block zero of the disk. ! 95: */ ! 96: ! 97: struct DDMap ! 98: { ! 99: UInt32 ddBlock; /* (driver's block count, sbBlkSize-blocks) */ ! 100: UInt16 ddSize; /* (driver's block count, 512-blocks) */ ! 101: UInt16 ddType; /* (driver's system type) */ ! 102: }; ! 103: typedef struct DDMap DDMap; ! 104: ! 105: /* ! 106: * Block zero of the disk. ! 107: */ ! 108: ! 109: struct Block0 ! 110: { ! 111: UInt16 sbSig; /* (unique value for block zero, 'ER') */ ! 112: UInt16 sbBlkSize; /* (block size for this device) */ ! 113: UInt32 sbBlkCount; /* (block count for this device) */ ! 114: UInt16 sbDevType; /* (device type) */ ! 115: UInt16 sbDevId; /* (device id) */ ! 116: UInt32 sbData; /* (not used) */ ! 117: UInt16 sbDrvrCount; /* (driver descriptor count) */ ! 118: UInt16 sbMap[247]; /* (driver descriptor table) */ ! 119: }; ! 120: typedef struct Block0 Block0; ! 121: ! 122: #pragma options align=reset /* (reset to default struct packing) */ ! 123: ! 124: /* ! 125: * Kernel ! 126: */ ! 127: ! 128: #if defined(KERNEL) && defined(__cplusplus) ! 129: ! 130: #include <IOKit/IOBufferMemoryDescriptor.h> ! 131: #include <IOKit/storage/IOPartitionScheme.h> ! 132: ! 133: /* ! 134: * Class ! 135: */ ! 136: ! 137: class IOApplePartitionScheme : public IOPartitionScheme ! 138: { ! 139: OSDeclareDefaultStructors(IOApplePartitionScheme); ! 140: ! 141: protected: ! 142: IOBufferMemoryDescriptor * _buffer; /* (necessarily one media block) */ ! 143: UInt32 _bufferSize; /* (necessarily one media block) */ ! 144: ! 145: bool _masteredAt512; ! 146: ! 147: /* ! 148: * Free all of this object's outstanding resources. ! 149: */ ! 150: ! 151: virtual void free(void); ! 152: ! 153: /* ! 154: * Searches for the existence of an apple partition map on the given media. ! 155: */ ! 156: ! 157: virtual bool identify(IOMedia * media); ! 158: ! 159: public: ! 160: ! 161: /* ! 162: * Initialize this object's minimal state. ! 163: */ ! 164: ! 165: virtual bool init(OSDictionary * properties = 0); ! 166: ! 167: /* ! 168: * Determine whether the provider media contains an apple partition map. If ! 169: * it does, we return "this" to indicate success, otherwise we return zero. ! 170: */ ! 171: ! 172: virtual IOService * probe(IOService * provider, SInt32 * score); ! 173: ! 174: /* ! 175: * This method is called once we have been attached to the media object. We ! 176: * generate the new media objects that will represent our partitions here. ! 177: */ ! 178: ! 179: virtual bool start(IOService * provider); ! 180: }; ! 181: ! 182: #endif /* defined(KERNEL) && defined(__cplusplus) */ ! 183: ! 184: #endif /* !_IOAPPLEPARTITIONSCHEME_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.