|
|
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: /*! ! 24: * @header IOPartitionScheme ! 25: * @abstract ! 26: * This header contains the IOPartitionScheme class definition. ! 27: */ ! 28: ! 29: #ifndef _IOPARTITIONSCHEME_H ! 30: #define _IOPARTITIONSCHEME_H ! 31: ! 32: /*! ! 33: * @defined kIOMediaPartitionID ! 34: * @abstract ! 35: * kIOMediaPartitionID is property of IOMedia objects. It is an OSNumber. ! 36: * @discussion ! 37: * The kIOMediaPartitionID property is placed into each IOMedia instance created ! 38: * via the partition scheme. It is an ID that differentiates one partition from ! 39: * the other (within a given scheme). It is typically an index into the on-disk ! 40: * partition table. ! 41: */ ! 42: ! 43: #define kIOMediaPartitionID "Partition ID" ! 44: ! 45: /* ! 46: * Kernel ! 47: */ ! 48: ! 49: #if defined(KERNEL) && defined(__cplusplus) ! 50: ! 51: #include <IOKit/storage/IOMedia.h> ! 52: #include <IOKit/storage/IOStorage.h> ! 53: ! 54: /*! ! 55: * @class IOPartitionScheme ! 56: * @abstract ! 57: * The IOPartitionScheme class is the common base class for all partition scheme ! 58: * objects. ! 59: * @discussion ! 60: * The IOPartitionScheme class is the common base class for all partition scheme ! 61: * objects. It extends the IOStorage class by implementing the appropriate open ! 62: * and close semantics for partition objects (standard semantics are to act as a ! 63: * multiplexor for incoming opens, producing one outgoing open with the correct ! 64: * access). It also implements the default read and write semantics, which pass ! 65: * all reads and writes through to the provider media unprocessed. For simple ! 66: * schemes, the default behavior is sufficient. More complex partition schemes ! 67: * such as RAID will want to do extra processing for reads and writes. ! 68: */ ! 69: ! 70: class IOPartitionScheme : public IOStorage ! 71: { ! 72: OSDeclareDefaultStructors(IOPartitionScheme); ! 73: ! 74: protected: ! 75: ! 76: IOStorageAccess _openLevel; ! 77: OSSet * _openReaders; ! 78: OSSet * _openReaderWriters; ! 79: ! 80: /* ! 81: * Free all of this object's outstanding resources. ! 82: */ ! 83: ! 84: virtual void free(); ! 85: ! 86: /*! ! 87: * @function handleOpen ! 88: * @discussion ! 89: * The handleOpen method grants or denies permission to access this object ! 90: * to an interested client. The argument is an IOStorageAccess value that ! 91: * specifies the level of access desired -- reader or reader-writer. ! 92: * ! 93: * This method can be invoked to upgrade or downgrade the access level for ! 94: * an existing client as well. The previous access level will prevail for ! 95: * upgrades that fail, of course. A downgrade should never fail. If the ! 96: * new access level should be the same as the old for a given client, this ! 97: * method will do nothing and return success. In all cases, one, singular ! 98: * close-per-client is expected for all opens-per-client received. ! 99: * ! 100: * This implementation replaces the IOService definition of handleOpen(). ! 101: * @param client ! 102: * Client requesting the open. ! 103: * @param options ! 104: * Options for the open. Set to zero. ! 105: * @param access ! 106: * Access level for the open. Set to kAccessReader or kAccessReaderWriter. ! 107: * @result ! 108: * Returns true if the open was successful, false otherwise. ! 109: */ ! 110: ! 111: virtual bool handleOpen(IOService * client, ! 112: IOOptionBits options, ! 113: void * access); ! 114: ! 115: /*! ! 116: * @function handleIsOpen ! 117: * @discussion ! 118: * The handleIsOpen method determines whether the specified client, or any ! 119: * client if none is specificed, presently has an open on this object. ! 120: * ! 121: * This implementation replaces the IOService definition of handleIsOpen(). ! 122: * @param client ! 123: * Client to check the open state of. Set to zero to check the open state ! 124: * of all clients. ! 125: * @result ! 126: * Returns true if the client was (or clients were) open, false otherwise. ! 127: */ ! 128: ! 129: virtual bool handleIsOpen(const IOService * client) const; ! 130: ! 131: /*! ! 132: * @function handleClose ! 133: * @discussion ! 134: * The handleClose method closes the client's access to this object. ! 135: * ! 136: * This implementation replaces the IOService definition of handleClose(). ! 137: * @param client ! 138: * Client requesting the close. ! 139: * @param options ! 140: * Options for the close. Set to zero. ! 141: */ ! 142: ! 143: virtual void handleClose(IOService * client, IOOptionBits options); ! 144: ! 145: public: ! 146: ! 147: ///m:2333367:workaround:commented:start ! 148: // IOStorage::open; ! 149: // IOStorage::close; ! 150: // IOStorage::read; ! 151: // IOStorage::write; ! 152: ///m:2333367:workaround:commented:stop ! 153: ! 154: /* ! 155: * Initialize this object's minimal state. ! 156: */ ! 157: ! 158: virtual bool init(OSDictionary * properties = 0); ! 159: ! 160: /*! ! 161: * @function read ! 162: * @discussion ! 163: * Read data from the storage object at the specified byte offset into the ! 164: * specified buffer, asynchronously. When the read completes, the caller ! 165: * will be notified via the specified completion action. ! 166: * ! 167: * The buffer will be retained for the duration of the read. ! 168: * ! 169: * For simple partition schemes, the default behavior is to simply pass the ! 170: * read through to the provider media. More complex partition schemes such ! 171: * as RAID will need to do extra processing here. ! 172: * @param client ! 173: * Client requesting the read. ! 174: * @param byteStart ! 175: * Starting byte offset for the data transfer. ! 176: * @param buffer ! 177: * Buffer for the data transfer. The size of the buffer implies the size of ! 178: * the data transfer. ! 179: * @param completion ! 180: * Completion routine to call once the data transfer is complete. ! 181: */ ! 182: ! 183: virtual void read(IOService * client, ! 184: UInt64 byteStart, ! 185: IOMemoryDescriptor * buffer, ! 186: IOStorageCompletion completion); ! 187: ! 188: /*! ! 189: * @function write ! 190: * @discussion ! 191: * Write data into the storage object at the specified byte offset from the ! 192: * specified buffer, asynchronously. When the write completes, the caller ! 193: * will be notified via the specified completion action. ! 194: * ! 195: * The buffer will be retained for the duration of the write. ! 196: * ! 197: * For simple partition schemes, the default behavior is to simply pass the ! 198: * write through to the provider media. More complex partition schemes such ! 199: * as RAID will need to do extra processing here. ! 200: * @param client ! 201: * Client requesting the write. ! 202: * @param byteStart ! 203: * Starting byte offset for the data transfer. ! 204: * @param buffer ! 205: * Buffer for the data transfer. The size of the buffer implies the size of ! 206: * the data transfer. ! 207: * @param completion ! 208: * Completion routine to call once the data transfer is complete. ! 209: */ ! 210: ! 211: virtual void write(IOService * client, ! 212: UInt64 byteStart, ! 213: IOMemoryDescriptor * buffer, ! 214: IOStorageCompletion completion); ! 215: ! 216: /* ! 217: * Obtain this object's provider. We override the superclass's method ! 218: * to return a more specific subclass of OSObject -- an IOMedia. This ! 219: * method serves simply as a convenience to subclass developers. ! 220: */ ! 221: ! 222: virtual IOMedia * getProvider() const ! 223: { ! 224: return (IOMedia *) IOStorage::getProvider(); ! 225: } ! 226: }; ! 227: ! 228: #endif /* defined(KERNEL) && defined(__cplusplus) */ ! 229: ! 230: #endif /* !_IOPARTITIONSCHEME_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.