]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/storage/IOBlockStorageDevice.h
xnu-201.tar.gz
[apple/xnu.git] / iokit / IOKit / storage / IOBlockStorageDevice.h
diff --git a/iokit/IOKit/storage/IOBlockStorageDevice.h b/iokit/IOKit/storage/IOBlockStorageDevice.h
deleted file mode 100644 (file)
index 0d7fc0c..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * 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@
- */
-/*
- * IOBlockStorageDevice.h
- *
- * This class is the protocol for generic block storage functionality, independent
- * of the physical connection protocol (e.g. SCSI, ATA, USB).
- *
- * A subclass implements relay methods that translate our requests into
- * calls to a protocol- and device-specific provider.
- */
-
-/*!    @language embedded-c++ */
-
-#ifndef        _IOBLOCKSTORAGEDEVICE_H
-#define        _IOBLOCKSTORAGEDEVICE_H
-
-#include <IOKit/IOMessage.h>
-#include <IOKit/IOTypes.h>
-#include <IOKit/IOService.h>
-#include <IOKit/storage/IOMedia.h>
-
-/*!
- * @defined kIOMessageMediaStateHasChanged
- * The message ID which indicates that the media state has changed.  The message
- * is passed to all clients of the IOBlockStorageDevice via the message() method.
- * The argument that is passed along with this message is an IOMediaState value.
- *
- * Devices that aren't capable of detecting media state changes indicate this in
- * the reportPollRequirements() method.
- */
-#define kIOMessageMediaStateHasChanged iokit_family_msg(sub_iokit_block_storage, 1)
-
-/* Property used for matching, so the generic driver gets the nub it wants. */
-/*!
- * @defined kIOBlockStorageDeviceTypeKey
- * The name of the property tested for nub type matching by the generic block
- * storage driver.
- */
-#define        kIOBlockStorageDeviceTypeKey    "device-type"
-/*!
- * @defined kIOBlockStorageDeviceTypeGeneric
- * A character string used for nub matching.
- */
-#define        kIOBlockStorageDeviceTypeGeneric        "Generic"
-
-class IOMemoryDescriptor;
-
-/*!
- * @class
- * IOBlockStorageDevice : public IOService
- * @abstract
- * "Impedance-matcher" class to connect Generic device driver to Transport Driver.
- * @discussion
- * The IOBlockStorageDevice class exports the generic block storage protocol,
- * forwarding all requests to its provider (the Transport Driver).
- * Though the nub does no actual processing of requests, it is necessary
- * in a C++ environment. The Transport Driver can be of any type, as
- * long as it inherits from IOService. Because Transport Drivers needn't
- * derive from a type known to IOBlockStorageDriver, it isn't possible for
- * IOBlockStorageDriver to include the appropriate header file to allow direct
- * communication with the Transport Driver. Thus we achieve polymorphism by 
- * having the Transport Driver instantiate a subclass of IOBlockStorageDevice.
- * A typical implementation for a concrete subclass of IOBlockStorageDevice
- * simply relays all methods to its provider (the Transport Driver).
- * 
- * All pure-virtual functions must be implemented by the Transport Driver, which
- * is responsible for instantiating the Nub.
- */
-
-class IOBlockStorageDevice : public IOService {
-
-    OSDeclareAbstractStructors(IOBlockStorageDevice)
-    
-protected:
-
-    struct ExpansionData { /* */ };
-    ExpansionData * _expansionData;
-
-public:
-
-    /* Overrides from IORegistryEntry */
-
-    /*!
-     * @function init
-     * @discussion
-     * This function is overridden so that IOBlockStorageDevice can set a
-     * property, used by IOBlockStorageDriver for matching. Since the concrete
-     * subclass of IOBlockStorageDevice can be of any class type, the property
-     * is used for matching.
-     * 
-     * This function is usually not overridden by developers.
-     */    
-    virtual bool       init(OSDictionary * properties);
-
-    /* --- A subclass must implement the the following methods: --- */
-
-    /*!
-     * @function doAsyncReadWrite
-     * @abstract
-     * Start an asynchronous read or write operation.
-     * @param buffer
-     * An IOMemoryDescriptor describing the data-transfer buffer. The data direction
-     * is contained in the IOMemoryDescriptor. Responsiblity for releasing the descriptor
-     * rests with the caller.
-     * @param block
-     * The starting block number of the data transfer.
-     * @param nblks
-     * The integral number of blocks to be transferred.
-     * @param completion
-     * The completion routine to call once the data transfer is complete.
-     */
-
-    virtual IOReturn   doAsyncReadWrite(IOMemoryDescriptor *buffer,
-                                            UInt32 block,UInt32 nblks,
-                                            IOStorageCompletion completion)    = 0;
-
-    /*!
-     * @function doSyncReadWrite
-     * @abstract
-     * Perform a synchronous read or write operation.
-     * @param buffer
-     * An IOMemoryDescriptor describing the data-transfer buffer. The data direction
-     * is contained in the IOMemoryDescriptor. Responsiblity for releasing the descriptor
-     * rests with the caller.
-     * @param block
-     * The starting block number of the data transfer.
-     * @param nblks
-     * The integral number of blocks to be transferred.
-     */    
-    virtual IOReturn   doSyncReadWrite(IOMemoryDescriptor *buffer,
-                                     UInt32 block,UInt32 nblks)                        = 0;
-
-    /*!
-     * @function doEjectMedia
-     * @abstract
-     * Eject the media.
-     */
-    virtual IOReturn   doEjectMedia(void)                                      = 0;
-
-    /*!
-     * @function doFormatMedia
-     * @abstract
-     * Format the media to the specified byte capacity.
-     * @discussion
-     * The specified byte capacity must be one supported by the device.
-     * Supported capacities can be obtained by calling doGetFormatCapacities.
-     * @param byteCapacity
-     * The byte capacity to which the device is to be formatted, if possible.
-     */
-    virtual IOReturn   doFormatMedia(UInt64 byteCapacity)                      = 0;
-
-    /*!
-     * @function doGetFormatCapacities
-     * @abstract
-     * Return the allowable formatting byte capacities.
-     * @discussion
-     * This function returns the supported byte capacities for the device.
-     * @param capacities
-     * Pointer for returning the list of capacities.
-     * @param capacitiesMaxCount
-     * The number of capacity values returned in "capacities."
-     */
-    virtual UInt32     doGetFormatCapacities(UInt64 * capacities,
-                                            UInt32   capacitiesMaxCount) const = 0;
-    
-    /*!
-     * @function doLockUnlockMedia
-     * @abstract
-     * Lock or unlock the (removable) media in the drive.
-     * @discussion
-     * This method should only be called if the media is known to be removable.
-     * @param doLock
-     * True to lock the media, False to unlock.
-     */
-    virtual IOReturn   doLockUnlockMedia(bool doLock)                          = 0;
-
-    /*!
-     * @function doSynchronizeCache
-     * @abstract
-     * Force data blocks in the hardware's buffer to be flushed to the media.
-     * @discussion
-     * This method should only be called if the media is writable.
-     */
-    virtual IOReturn   doSynchronizeCache(void)                                = 0;
-    
-    /*!
-     * @function getVendorString
-     * @abstract
-     * Return Vendor Name string for the device.
-     * @result
-     * A pointer to a static character string.
-     */
-    virtual char *     getVendorString(void)                                   = 0;
-    
-    /*!
-     * @function getProductString
-     * @abstract
-     * Return Product Name string for the device.
-     * @result
-     * A pointer to a static character string.
-     */
-    virtual char *     getProductString(void)                                  = 0;
-    
-    /*!
-     * @function getRevisionString
-     * @abstract
-     * Return Product Revision string for the device.
-     * @result
-     * A pointer to a static character string.
-     */
-    virtual char *     getRevisionString(void)                                 = 0;
-    
-    /*!
-     * @function getAdditionalDeviceInfoString
-     * @abstract
-     * Return additional informational string for the device.
-     * @result
-     * A pointer to a static character string.
-     */
-    virtual char *     getAdditionalDeviceInfoString(void)                     = 0;
-
-    /*!
-     * @function reportBlockSize
-     * @abstract
-     * Report the block size for the device, in bytes.
-     * @param blockSize
-     * Pointer to returned block size value.
-     */    
-    virtual IOReturn   reportBlockSize(UInt64 *blockSize)                      = 0;
-
-    /*!
-     * @function reportEjectability
-     * @abstract
-     * Report if the media is ejectable under software control.
-     * @discussion
-     * This method should only be called if the media is known to be removable.
-     * @param isEjectable
-     * Pointer to returned result. True indicates the media is ejectable, False indicates
-     * the media cannot be ejected under software control.
-     */
-    virtual IOReturn   reportEjectability(bool *isEjectable)                   = 0;
-
-    /*!
-     * @function reportLockability
-     * @abstract
-     * Report if the media is lockable under software control.
-     * @discussion
-     * This method should only be called if the media is known to be removable.
-     * @param isLockable
-     * Pointer to returned result. True indicates the media can be locked in place; False
-     * indicates the media cannot be locked by software.
-     */
-    virtual IOReturn   reportLockability(bool *isLockable)                     = 0;
-
-    /*!
-     * @function reportMaxReadTransfer
-     * @abstract
-     * Report the maximum allowed byte transfer for read operations.
-     * @discussion
-     * Some devices impose a maximum data transfer size. Because this limit
-     * may be determined by the size of a block-count field in a command, the limit may
-     * depend on the block size of the transfer.
-     * @param blockSize
-     * The block size desired for the transfer.
-     * @param max
-     * Pointer to returned result.
-     */
-    virtual IOReturn   reportMaxReadTransfer (UInt64 blockSize,UInt64 *max)    = 0;
-
-    /*!
-     * @function reportMaxWriteTransfer
-     * @abstract
-     * Report the maximum allowed byte transfer for write operations.
-     * @discussion
-     * Some devices impose a maximum data transfer size. Because this limit
-     * may be determined by the size of a block-count field in a command, the limit may
-     * depend on the block size of the transfer.
-     * @param blockSize
-     * The block size desired for the transfer.
-     * @param max
-     * Pointer to returned result.
-     */
-    virtual IOReturn   reportMaxWriteTransfer(UInt64 blockSize,UInt64 *max)    = 0;
-    
-    /*!
-     * @function reportMaxValidBlock
-     * @abstract
-     * Report the highest valid block for the device.
-     * @param maxBlock
-     * Pointer to returned result
-     */    
-    virtual IOReturn   reportMaxValidBlock(UInt64 *maxBlock)                   = 0;
-
-    /*!
-     * @function reportMediaState
-     * @abstract
-     * Report the device's media state.
-     * @discussion
-     * This method reports whether we have media in the drive or not, and
-     * whether the state has changed from the previously reported state.
-     * 
-     * A result of kIOReturnSuccess is always returned if the test for media is successful,
-     * regardless of media presence. The mediaPresent result should be used to determine
-     * whether media is present or not. A return other than kIOReturnSuccess indicates that
-     * the Transport Driver was unable to interrogate the device. In this error case, the
-     * outputs mediaState and changedState will *not* be stored.
-     * @param mediaPresent Pointer to returned media state. True indicates media is present
-     * in the device; False indicates no media is present.
-     * @param changedState Pointer to returned result. True indicates a change of state since
-     * prior calls, False indicates that the state has not changed.
-     */
-    virtual IOReturn   reportMediaState(bool *mediaPresent,bool *changedState) = 0;
-    
-    /*!
-     * @function reportPollRequirements
-     * @abstract
-     * Report if it's necessary to poll for media insertion, and if polling is expensive.
-     * @discussion
-     * This method reports whether the device must be polled to detect media
-     * insertion, and whether a poll is expensive to perform.
-     * 
-     * The term "expensive" typically implies a device that must be spun-up to detect media,
-     * as on a PC floppy. Most devices can detect media inexpensively.
-     * @param pollRequired
-     * Pointer to returned result. True indicates that polling is required; False indicates
-     * that polling is not required to detect media.
-     * @param pollIsExpensive
-     * Pointer to returned result. True indicates that the polling operation is expensive;
-     * False indicates that the polling operation is cheap.
-     */
-    virtual IOReturn   reportPollRequirements(bool *pollRequired,
-                                            bool *pollIsExpensive)             = 0;
-    
-    /*!
-     * @function reportRemovability
-     * @abstract
-     * Report whether the media is removable or not.
-     * @discussion
-     * This method reports whether the media is removable, but it does not
-     * provide detailed information regarding software eject or lock/unlock capability.
-     * @param isRemovable
-     * Pointer to returned result. True indicates that the media is removable; False
-     * indicates the media is not removable.
-     */
-    virtual IOReturn   reportRemovability(bool *isRemovable)                   = 0;
-    
-    /*!
-     * @function reportWriteProtection
-     * @abstract
-     * Report whether the media is write-protected or not.
-     * @param isWriteProtected
-     * Pointer to returned result. True indicates that the media is write-protected (it
-     * cannot be written); False indicates that the media is not write-protected (it
-     * is permissible to write).
-     */
-    virtual IOReturn   reportWriteProtection(bool *isWriteProtected)           = 0;
-
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  0);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  1);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  2);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  3);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  4);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  5);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  6);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  7);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  8);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice,  9);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 10);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 11);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 12);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 13);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 14);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 15);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 16);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 17);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 18);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 19);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 20);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 21);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 22);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 23);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 24);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 25);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 26);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 27);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 28);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 29);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 30);
-    OSMetaClassDeclareReservedUnused(IOBlockStorageDevice, 31);
-};
-#endif