#ifndef _IOKIT_IO_DVD_SERVICES_H_
#define _IOKIT_IO_DVD_SERVICES_H_
#if defined(KERNEL) && defined(__cplusplus)
#include <IOKit/IOTypes.h>
#include <IOKit/storage/IODVDTypes.h>
#include <IOKit/storage/IODVDBlockStorageDevice.h>
#include <IOKit/scsi/IOSCSIPeripheralDeviceType05.h>
class IOMemoryDescriptor;
#define _DVD_USE_DATA_CACHING_ 1
class IODVDServices : public IODVDBlockStorageDevice
{
OSDeclareDefaultStructors ( IODVDServices )
#if (_DVD_USE_DATA_CACHING_)
bool fUseDataCache; UInt8 * fDataCacheStorage; UInt32 fDataCacheStartBlock; UInt32 fDataCacheBlockCount;
IOSimpleLock * fDataCacheLock; #endif
protected:
OSSet * fClients;
IOSCSIPeripheralDeviceType05 * fProvider;
virtual void free ( void );
struct IODVDServicesExpansionData { };
IODVDServicesExpansionData * fIODVDServicesReserved;
public:
static void AsyncReadWriteComplete ( void * clientData,
IOReturn status,
UInt64 actualByteCount );
virtual IOReturn doAsyncReadWrite ( IOMemoryDescriptor * buffer,
UInt32 block,
UInt32 nblks,
IOStorageCompletion completion );
virtual IOReturn doEjectMedia ( void );
virtual IOReturn doFormatMedia ( UInt64 byteCapacity );
virtual UInt32 doGetFormatCapacities ( UInt64 * capacities,
UInt32 capacitiesMaxCount ) const;
virtual IOReturn doLockUnlockMedia ( bool doLock );
virtual IOReturn doSynchronizeCache ( void );
virtual char * getVendorString ( void );
virtual char * getProductString ( void );
virtual char * getRevisionString ( void );
virtual char * getAdditionalDeviceInfoString ( void );
virtual IOReturn reportBlockSize ( UInt64 * blockSize );
virtual IOReturn reportEjectability ( bool * isEjectable );
virtual IOReturn reportLockability ( bool * isLockable );
virtual IOReturn reportMediaState ( bool * mediaPresent, bool * changed );
virtual IOReturn reportPollRequirements ( bool * pollIsRequired,
bool * pollIsExpensive );
virtual IOReturn reportMaxReadTransfer ( UInt64 blockSize, UInt64 * max );
virtual IOReturn reportMaxValidBlock ( UInt64 * maxBlock );
virtual IOReturn reportMaxWriteTransfer ( UInt64 blockSize, UInt64 * max );
virtual IOReturn reportRemovability ( bool * isRemovable );
virtual IOReturn reportWriteProtection ( bool * isWriteProtected );
virtual IOReturn doAsyncReadCD ( IOMemoryDescriptor * buffer,
UInt32 block,
UInt32 nblks,
CDSectorArea sectorArea,
CDSectorType sectorType,
IOStorageCompletion completion );
virtual IOReturn readISRC ( UInt8 track, CDISRC isrc );
virtual IOReturn readMCN ( CDMCN mcn);
virtual IOReturn readTOC ( IOMemoryDescriptor * buffer );
virtual IOReturn audioPause ( bool pause );
virtual IOReturn audioPlay ( CDMSF timeStart, CDMSF timeStop );
virtual IOReturn audioScan ( CDMSF timeStart, bool reverse );
virtual IOReturn audioStop ( void );
virtual IOReturn getAudioStatus ( CDAudioStatus * status );
virtual IOReturn getAudioVolume ( UInt8 * leftVolume, UInt8 * rightVolume );
virtual IOReturn setAudioVolume ( UInt8 leftVolume, UInt8 rightVolume );
virtual IOReturn getSpeed ( UInt16 * kilobytesPerSecond );
virtual IOReturn setSpeed ( UInt16 kilobytesPerSecond );
virtual UInt32 getMediaType ( void );
virtual IOReturn reportKey ( IOMemoryDescriptor * buffer,
const DVDKeyClass keyClass,
const UInt32 lba,
const UInt8 agid,
const DVDKeyFormat keyFormat );
virtual IOReturn sendKey ( IOMemoryDescriptor * buffer,
const DVDKeyClass keyClass,
const UInt8 agid,
const DVDKeyFormat keyFormat );
virtual IOReturn readDVDStructure ( IOMemoryDescriptor * buffer,
const UInt8 structureFormat,
const UInt32 logicalBlockAddress,
const UInt8 layer,
const UInt8 agid );
virtual IOReturn message ( UInt32 type, IOService * provider, void * argument );
virtual IOReturn setProperties ( OSObject * properties );
virtual bool start ( IOService * provider );
virtual bool open ( IOService * client, IOOptionBits options, IOStorageAccess access );
virtual bool handleOpen ( IOService * client, IOOptionBits options, void * access );
virtual void handleClose ( IOService * client, IOOptionBits options );
virtual bool handleIsOpen ( const IOService * client ) const;
virtual IOReturn readTOC ( IOMemoryDescriptor * buffer,
CDTOCFormat format,
UInt8 msf,
UInt8 trackSessionNumber,
UInt16 * actualByteCount );
virtual IOReturn readDiscInfo ( IOMemoryDescriptor * buffer,
UInt16 * actualByteCount );
virtual IOReturn readTrackInfo ( IOMemoryDescriptor * buffer,
UInt32 address,
CDTrackInfoAddressType addressType,
UInt16 * actualByteCount );
private:
OSMetaClassDeclareReservedUnused ( IODVDServices, 1 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 2 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 3 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 4 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 5 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 6 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 7 );
OSMetaClassDeclareReservedUnused ( IODVDServices, 8 );
};
#endif
#endif