IOCDBlockStorageDriver.h [plain text]
#ifndef _IOCDBLOCKSTORAGEDRIVER_H
#define _IOCDBLOCKSTORAGEDRIVER_H
#include <IOKit/IOTypes.h>
#include <IOKit/storage/IOCDBlockStorageDevice.h>
#include <IOKit/storage/IOCDTypes.h>
#include <IOKit/storage/IOBlockStorageDriver.h>
#define kIOCDBlockStorageDriverClass "IOCDBlockStorageDriver"
class IOCDBlockStorageDriver : public IOBlockStorageDriver {
OSDeclareDefaultStructors(IOCDBlockStorageDriver)
public:
static const UInt64 kBlockSizeCD = 2352;
static const UInt8 kBlockTypeCD = 0x01;
virtual bool init(OSDictionary * properties);
virtual void free(void);
virtual IOReturn ejectMedia(void);
virtual void executeRequest(UInt64 byteStart,
IOMemoryDescriptor *buffer,
#ifdef __LP64__
IOStorageAttributes *attributes,
IOStorageCompletion *completion,
#else
IOStorageCompletion completion,
#endif
Context *context);
virtual const char * getDeviceTypeName(void);
virtual IOMedia * instantiateDesiredMediaObject(void);
virtual IOMedia * instantiateMediaObject(UInt64 base,UInt64 byteSize,
UInt32 blockSize,char *mediaName);
virtual IOReturn recordMediaParameters(void);
virtual UInt32 getMediaType(void);
virtual CDTOC * getTOC(void);
virtual void readCD(IOService *client,
UInt64 byteStart,
IOMemoryDescriptor *buffer,
CDSectorArea sectorArea,
CDSectorType sectorType,
#ifdef __LP64__
IOStorageAttributes *attributes,
IOStorageCompletion *completion);
#else
IOStorageCompletion completion);
#endif
virtual IOReturn readISRC(UInt8 track,CDISRC isrc);
virtual IOReturn readMCN(CDMCN mcn);
#ifndef __LP64__
virtual IOReturn audioPause(bool pause) __attribute__ ((deprecated));
virtual IOReturn audioPlay(CDMSF timeStart,CDMSF timeStop) __attribute__ ((deprecated));
virtual IOReturn audioScan(CDMSF timeStart,bool reverse) __attribute__ ((deprecated));
virtual IOReturn audioStop() __attribute__ ((deprecated));
virtual IOReturn getAudioStatus(CDAudioStatus *status) __attribute__ ((deprecated));
virtual IOReturn getAudioVolume(UInt8 *leftVolume,UInt8 *rightVolume) __attribute__ ((deprecated));
virtual IOReturn setAudioVolume(UInt8 leftVolume,UInt8 rightVolume) __attribute__ ((deprecated));
#endif
virtual IOCDBlockStorageDevice * getProvider() const;
protected:
virtual IOReturn acceptNewMedia(void);
virtual IOReturn decommissionMedia(bool forcible);
using IOBlockStorageDriver::getMediaBlockSize;
virtual IOReturn cacheTocInfo(void);
virtual UInt64 getMediaBlockSize(CDSectorArea area,CDSectorType type);
virtual void prepareRequest(UInt64 byteStart,
IOMemoryDescriptor *buffer,
CDSectorArea sectorArea,
CDSectorType sectorType,
#ifdef __LP64__
IOStorageAttributes *attributes,
IOStorageCompletion *completion);
#else
IOStorageCompletion completion);
#endif
struct ExpansionData
{
UInt32 minBlockNumberAudio;
UInt32 maxBlockNumberAudio;
};
ExpansionData * _expansionData;
#define _minBlockNumberAudio \
IOCDBlockStorageDriver::_expansionData->minBlockNumberAudio
#define _maxBlockNumberAudio \
IOCDBlockStorageDriver::_expansionData->maxBlockNumberAudio
UInt32 _reserved0032;
CDTOC * _toc;
UInt32 _tocSize;
IOReturn reportDiscInfo(CDDiscInfo *discInfo);
IOReturn reportTrackInfo(UInt16 track,CDTrackInfo *trackInfo);
public:
virtual IOReturn getSpeed(UInt16 * kilobytesPerSecond);
virtual IOReturn setSpeed(UInt16 kilobytesPerSecond);
virtual IOReturn readTOC(IOMemoryDescriptor *buffer,CDTOCFormat format,
UInt8 formatAsTime,UInt8 trackOrSessionNumber,
UInt16 *actualByteCount);
virtual IOReturn readDiscInfo(IOMemoryDescriptor *buffer,
UInt16 *actualByteCount);
virtual IOReturn readTrackInfo(IOMemoryDescriptor *buffer,UInt32 address,
CDTrackInfoAddressType addressType,
UInt16 *actualByteCount);
virtual void writeCD(IOService *client,
UInt64 byteStart,
IOMemoryDescriptor *buffer,
CDSectorArea sectorArea,
CDSectorType sectorType,
#ifdef __LP64__
IOStorageAttributes *attributes,
IOStorageCompletion *completion);
#else
IOStorageCompletion completion);
#endif
#ifdef __LP64__
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 0);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 1);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 2);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 3);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 4);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 5);
#else
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 0);
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 1);
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 2);
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 3);
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 4);
OSMetaClassDeclareReservedUsed(IOCDBlockStorageDriver, 5);
#endif
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 6);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 7);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 8);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 9);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 10);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 11);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 12);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 13);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 14);
OSMetaClassDeclareReservedUnused(IOCDBlockStorageDriver, 15);
};
#endif