2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
23 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
25 * IOATAPICDDriveNub.cpp
27 * This subclass implements a relay to a protocol and device-specific
31 * 2-Sep-1999 Joe Liu (jliu) created.
34 #include <IOKit/IOLib.h>
35 #include <IOKit/storage/ata/IOATAPICDDriveNub.h>
36 #include <IOKit/storage/ata/IOATAPICDDrive.h>
38 #define super IOCDBlockStorageDevice
39 OSDefineMetaClassAndStructors( IOATAPICDDriveNub
, IOCDBlockStorageDevice
)
41 //---------------------------------------------------------------------------
42 // attach to provider.
44 bool IOATAPICDDriveNub::attach(IOService
* provider
)
46 if (!super::attach(provider
))
49 _provider
= OSDynamicCast(IOATAPICDDrive
, provider
);
51 IOLog("IOATAPICDDriveNub: attach; wrong provider type!\n");
58 //---------------------------------------------------------------------------
59 // detach from provider.
61 void IOATAPICDDriveNub::detach(IOService
* provider
)
63 if (_provider
== provider
)
66 super::detach(provider
);
70 //---------------------------------------------------------------------------
73 IOReturn
IOATAPICDDriveNub::doAsyncReadCD(IOMemoryDescriptor
* buffer
,
76 CDSectorArea sectorArea
,
77 CDSectorType sectorType
,
78 IOStorageCompletion completion
)
80 return _provider
->doAsyncReadCD(buffer
,
88 //---------------------------------------------------------------------------
91 IOReturn
IOATAPICDDriveNub::doAsyncReadWrite(IOMemoryDescriptor
* buffer
,
94 IOStorageCompletion completion
)
96 if (buffer
->getDirection() == kIODirectionOut
)
97 return kIOReturnNotWritable
;
99 return _provider
->doAsyncReadWrite(buffer
, block
, nblks
, completion
);
102 //---------------------------------------------------------------------------
106 IOATAPICDDriveNub::doSyncReadWrite(IOMemoryDescriptor
* buffer
,
110 if (buffer
->getDirection() == kIODirectionOut
)
111 return kIOReturnNotWritable
;
113 return _provider
->doSyncReadWrite(buffer
, block
, nblks
);
116 //---------------------------------------------------------------------------
120 IOATAPICDDriveNub::doFormatMedia(UInt64 byteCapacity
)
122 return kIOReturnUnsupported
;
125 //---------------------------------------------------------------------------
126 // doGetFormatCapacities
129 IOATAPICDDriveNub::doGetFormatCapacities(UInt64
* capacities
,
130 UInt32 capacitiesMaxCount
) const
132 return _provider
->doGetFormatCapacities(capacities
, capacitiesMaxCount
);
135 //---------------------------------------------------------------------------
138 IOReturn
IOATAPICDDriveNub::doEjectMedia()
140 return _provider
->doEjectMedia();
143 //---------------------------------------------------------------------------
146 IOReturn
IOATAPICDDriveNub::doLockUnlockMedia(bool doLock
)
148 return _provider
->doLockUnlockMedia(doLock
);
151 //---------------------------------------------------------------------------
154 UInt32
IOATAPICDDriveNub::getMediaType()
156 return kCDMediaTypeROM
;
159 //---------------------------------------------------------------------------
162 char * IOATAPICDDriveNub::getVendorString()
164 return _provider
->getVendorString();
167 //---------------------------------------------------------------------------
170 char * IOATAPICDDriveNub::getProductString()
172 return _provider
->getProductString();
175 //---------------------------------------------------------------------------
178 char * IOATAPICDDriveNub::getRevisionString()
180 return _provider
->getRevisionString();
183 //---------------------------------------------------------------------------
184 // getAdditionalDeviceInfoString
186 char * IOATAPICDDriveNub::getAdditionalDeviceInfoString()
188 return _provider
->getAdditionalDeviceInfoString();
191 //---------------------------------------------------------------------------
194 IOReturn
IOATAPICDDriveNub::reportBlockSize(UInt64
* blockSize
)
196 return _provider
->reportBlockSize(blockSize
);
199 //---------------------------------------------------------------------------
200 // reportEjectability
202 IOReturn
IOATAPICDDriveNub::reportEjectability(bool * isEjectable
)
204 return _provider
->reportEjectability(isEjectable
);
207 //---------------------------------------------------------------------------
210 IOReturn
IOATAPICDDriveNub::reportLockability(bool * isLockable
)
212 return _provider
->reportLockability(isLockable
);
215 //---------------------------------------------------------------------------
218 IOReturn
IOATAPICDDriveNub::reportMediaState(bool * mediaPresent
,
221 return _provider
->reportMediaState(mediaPresent
, changed
);
224 //---------------------------------------------------------------------------
225 // reportPollRequirements
227 IOReturn
IOATAPICDDriveNub::reportPollRequirements(bool * pollIsRequired
,
228 bool * pollIsExpensive
)
230 return _provider
->reportPollRequirements(pollIsRequired
, pollIsExpensive
);
233 //---------------------------------------------------------------------------
234 // reportMaxReadTransfer
236 IOReturn
IOATAPICDDriveNub::reportMaxReadTransfer(UInt64 blockSize
,
239 return _provider
->reportMaxReadTransfer(blockSize
, max
);
242 //---------------------------------------------------------------------------
243 // reportMaxValidBlock
245 IOReturn
IOATAPICDDriveNub::reportMaxValidBlock(UInt64
* maxBlock
)
247 return _provider
->reportMaxValidBlock(maxBlock
);
250 //---------------------------------------------------------------------------
251 // reportRemovability
253 IOReturn
IOATAPICDDriveNub::reportRemovability(bool * isRemovable
)
255 return _provider
->reportRemovability(isRemovable
);
258 //---------------------------------------------------------------------------
261 IOReturn
IOATAPICDDriveNub::readISRC(UInt8 track
, CDISRC isrc
)
263 return _provider
->readISRC(track
, isrc
);
266 //---------------------------------------------------------------------------
269 IOReturn
IOATAPICDDriveNub::readMCN(CDMCN mcn
)
271 return _provider
->readMCN(mcn
);
274 //---------------------------------------------------------------------------
277 IOReturn
IOATAPICDDriveNub::readTOC(IOMemoryDescriptor
* buffer
)
279 return _provider
->readTOC(buffer
);
282 //---------------------------------------------------------------------------
285 IOReturn
IOATAPICDDriveNub::audioPause(bool pause
)
287 return _provider
->audioPause(pause
);
290 //---------------------------------------------------------------------------
293 IOReturn
IOATAPICDDriveNub::audioPlay(CDMSF timeStart
, CDMSF timeStop
)
295 return _provider
->audioPlay(timeStart
, timeStop
);
298 //---------------------------------------------------------------------------
301 IOReturn
IOATAPICDDriveNub::audioScan(CDMSF timeStart
, bool reverse
)
303 return _provider
->audioScan(timeStart
, reverse
);
306 //---------------------------------------------------------------------------
309 IOReturn
IOATAPICDDriveNub::audioStop()
311 return _provider
->audioStop();
314 //---------------------------------------------------------------------------
317 IOReturn
IOATAPICDDriveNub::getAudioStatus(CDAudioStatus
* status
)
319 return _provider
->getAudioStatus(status
);
322 //---------------------------------------------------------------------------
325 IOReturn
IOATAPICDDriveNub::getAudioVolume(UInt8
* leftVolume
,
328 return _provider
->getAudioVolume(leftVolume
, rightVolume
);
331 //---------------------------------------------------------------------------
334 IOReturn
IOATAPICDDriveNub::setAudioVolume(UInt8 leftVolume
, UInt8 rightVolume
)
336 return _provider
->setAudioVolume(leftVolume
, rightVolume
);
339 //---------------------------------------------------------------------------
340 // doSynchronizeCache
342 IOReturn
IOATAPICDDriveNub::doSynchronizeCache()
344 return kIOReturnUnsupported
;
347 //---------------------------------------------------------------------------
348 // reportMaxWriteTransfer
350 IOReturn
IOATAPICDDriveNub::reportMaxWriteTransfer(UInt64 blockSize
,
353 return _provider
->reportMaxWriteTransfer(blockSize
, max
);
356 //---------------------------------------------------------------------------
357 // reportMaxWriteTransfer
359 IOReturn
IOATAPICDDriveNub::reportWriteProtection(bool * isWriteProtected
)
361 return _provider
->reportWriteProtection(isWriteProtected
);