|
|
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: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 24: * ! 25: * IOATAPICDDriveNub.cpp ! 26: * ! 27: * This subclass implements a relay to a protocol and device-specific ! 28: * provider. ! 29: * ! 30: * HISTORY ! 31: * 2-Sep-1999 Joe Liu (jliu) created. ! 32: */ ! 33: ! 34: #include <IOKit/IOLib.h> ! 35: #include <IOKit/storage/ata/IOATAPICDDriveNub.h> ! 36: #include <IOKit/storage/ata/IOATAPICDDrive.h> ! 37: ! 38: #define super IOCDDriveNub ! 39: OSDefineMetaClassAndStructors( IOATAPICDDriveNub, IOCDDriveNub ) ! 40: ! 41: // -------------------------------------------------------------------------- ! 42: // attach to provider. ! 43: ! 44: bool IOATAPICDDriveNub::attach(IOService * provider) ! 45: { ! 46: if (!super::attach(provider)) ! 47: return false; ! 48: ! 49: _provider = OSDynamicCast(IOATAPICDDrive, provider); ! 50: if (_provider == 0) { ! 51: IOLog("IOATAPICDDriveNub: attach; wrong provider type!\n"); ! 52: return false; ! 53: } ! 54: ! 55: return true; ! 56: } ! 57: ! 58: // -------------------------------------------------------------------------- ! 59: // detach from provider. ! 60: ! 61: void IOATAPICDDriveNub::detach(IOService * provider) ! 62: { ! 63: if (_provider == provider) ! 64: _provider = 0; ! 65: ! 66: super::detach(provider); ! 67: } ! 68: ! 69: // -------------------------------------------------------------------------- ! 70: // ! 71: ! 72: IOReturn IOATAPICDDriveNub::doAsyncReadWrite(IOMemoryDescriptor * buffer, ! 73: UInt32 block, ! 74: UInt32 nblks, ! 75: gdCompletionFunction action, ! 76: IOService * target, ! 77: void * param) ! 78: { ! 79: if (buffer->getDirection() == kIODirectionOut) ! 80: return(kIOReturnNotWritable); ! 81: ! 82: return (_provider->doAsyncReadWrite(buffer, ! 83: block, ! 84: nblks, ! 85: action, ! 86: target, ! 87: param)); ! 88: } ! 89: ! 90: IOReturn IOATAPICDDriveNub::doSyncReadWrite(IOMemoryDescriptor *buffer, ! 91: UInt32 block,UInt32 nblks) ! 92: { ! 93: return(kIOReturnUnsupported); //xxx must be implemented! ! 94: } ! 95: ! 96: // -------------------------------------------------------------------------- ! 97: // ! 98: ! 99: IOReturn IOATAPICDDriveNub::doEjectMedia() ! 100: { ! 101: return (_provider->doEjectMedia()); ! 102: } ! 103: ! 104: // -------------------------------------------------------------------------- ! 105: // ! 106: ! 107: IOReturn IOATAPICDDriveNub::doLockUnlockMedia(bool doLock) ! 108: { ! 109: return (_provider->doLockUnlockMedia(doLock)); ! 110: } ! 111: ! 112: // -------------------------------------------------------------------------- ! 113: // ! 114: ! 115: IOReturn IOATAPICDDriveNub::executeCdb(struct cdbParams *params) ! 116: { ! 117: return(kIOReturnUnsupported); // xxx must be implemented! ! 118: } ! 119: ! 120: // -------------------------------------------------------------------------- ! 121: // ! 122: ! 123: char * IOATAPICDDriveNub::getVendorString() ! 124: { ! 125: return (_provider->getVendorString()); ! 126: } ! 127: ! 128: // -------------------------------------------------------------------------- ! 129: // ! 130: ! 131: char * IOATAPICDDriveNub::getProductString() ! 132: { ! 133: return (_provider->getProductString()); ! 134: } ! 135: ! 136: // -------------------------------------------------------------------------- ! 137: // ! 138: ! 139: char * IOATAPICDDriveNub::getRevisionString() ! 140: { ! 141: return (_provider->getRevisionString()); ! 142: } ! 143: ! 144: // -------------------------------------------------------------------------- ! 145: // ! 146: ! 147: char * IOATAPICDDriveNub::getAdditionalDeviceInfoString() ! 148: { ! 149: return (_provider->getAdditionalDeviceInfoString()); ! 150: } ! 151: ! 152: // -------------------------------------------------------------------------- ! 153: // ! 154: ! 155: IOReturn IOATAPICDDriveNub::reportBlockSize(UInt64 * blockSize) ! 156: { ! 157: return (_provider->reportBlockSize(blockSize)); ! 158: } ! 159: ! 160: // -------------------------------------------------------------------------- ! 161: // ! 162: ! 163: IOReturn IOATAPICDDriveNub::reportEjectability(bool * isEjectable) ! 164: { ! 165: return (_provider->reportEjectability(isEjectable)); ! 166: } ! 167: ! 168: // -------------------------------------------------------------------------- ! 169: // ! 170: ! 171: IOReturn IOATAPICDDriveNub::reportLockability(bool * isLockable) ! 172: { ! 173: return (_provider->reportLockability(isLockable)); ! 174: } ! 175: ! 176: // -------------------------------------------------------------------------- ! 177: // ! 178: ! 179: IOReturn IOATAPICDDriveNub::reportMediaState(bool * mediaPresent, ! 180: bool * changed) ! 181: { ! 182: return (_provider->reportMediaState(mediaPresent, changed)); ! 183: } ! 184: ! 185: // -------------------------------------------------------------------------- ! 186: // ! 187: ! 188: IOReturn IOATAPICDDriveNub::reportPollRequirements(bool * pollIsRequired, ! 189: bool * pollIsExpensive) ! 190: { ! 191: return (_provider->reportPollRequirements(pollIsRequired, ! 192: pollIsExpensive)); ! 193: } ! 194: ! 195: // -------------------------------------------------------------------------- ! 196: // ! 197: ! 198: IOReturn IOATAPICDDriveNub::reportMaxReadTransfer(UInt64 blockSize, ! 199: UInt64 * max) ! 200: { ! 201: return (_provider->reportMaxReadTransfer(blockSize, max)); ! 202: } ! 203: ! 204: // -------------------------------------------------------------------------- ! 205: // ! 206: ! 207: IOReturn IOATAPICDDriveNub::reportMaxValidBlock(UInt64 * maxBlock) ! 208: { ! 209: return (_provider->reportMaxValidBlock(maxBlock)); ! 210: } ! 211: ! 212: // -------------------------------------------------------------------------- ! 213: // ! 214: ! 215: IOReturn IOATAPICDDriveNub::reportRemovability(bool * isRemovable) ! 216: { ! 217: return (_provider->reportRemovability(isRemovable)); ! 218: } ! 219: ! 220: // -------------------------------------------------------------------------- ! 221: // Audio commands are rejected until our provider implements the ! 222: // functionality. ! 223: ! 224: IOReturn IOATAPICDDriveNub::audioPause(bool pause) ! 225: { ! 226: return (_provider->audioPause(pause)); ! 227: } ! 228: ! 229: IOReturn IOATAPICDDriveNub::audioScan(positioningType addressType, ! 230: cdAddress address, ! 231: bool reverse) ! 232: { ! 233: return kIOReturnUnsupported; ! 234: } ! 235: ! 236: IOReturn IOATAPICDDriveNub::readAudioData(positioningType addressType, ! 237: cdAddress address, ! 238: UInt8 blockCount, ! 239: UInt8 * buffer) ! 240: { ! 241: return kIOReturnUnsupported; ! 242: } ! 243: ! 244: IOReturn IOATAPICDDriveNub::readAudioSubcodes(positioningType addressType, ! 245: cdAddress address, ! 246: UInt8 blockCount, ! 247: UInt8 * buffer) ! 248: { ! 249: return kIOReturnUnsupported; ! 250: } ! 251: ! 252: IOReturn IOATAPICDDriveNub::readAudioWithQSubcode(positioningType addressType, ! 253: cdAddress address, ! 254: UInt8 blockCount, ! 255: UInt8 * buffer) ! 256: { ! 257: return kIOReturnUnsupported; ! 258: } ! 259: ! 260: IOReturn IOATAPICDDriveNub::readAudioWithAllSubcodes( ! 261: positioningType addressType, ! 262: cdAddress address, ! 263: UInt8 blockCount, ! 264: UInt8 * buffer) ! 265: { ! 266: return kIOReturnUnsupported; ! 267: } ! 268: ! 269: IOReturn IOATAPICDDriveNub::readHeader(UInt32 blockAddress, ! 270: struct headerInfo * buffer) ! 271: { ! 272: return (_provider->readHeader(blockAddress,buffer)); ! 273: } ! 274: ! 275: IOReturn IOATAPICDDriveNub::readISRC(UInt32 track, ! 276: UInt8 * buffer, ! 277: bool * found) ! 278: { ! 279: return (_provider->readISRC(track,buffer,found)); ! 280: } ! 281: ! 282: IOReturn IOATAPICDDriveNub::readMCN(UInt8 * buffer, bool * found) ! 283: { ! 284: return (_provider->readMCN(buffer,found)); ! 285: } ! 286: ! 287: IOReturn IOATAPICDDriveNub::readQSubcodes(struct qSubcodeTocInfo * buffer, ! 288: UInt32 bufSize) ! 289: { ! 290: return kIOReturnUnsupported; ! 291: } ! 292: ! 293: IOReturn IOATAPICDDriveNub::readSubcodeBuffer(UInt8 * buffer, ! 294: bool purge, ! 295: UInt32 entryCount) ! 296: { ! 297: return kIOReturnUnsupported; ! 298: } ! 299: ! 300: IOReturn IOATAPICDDriveNub::readTheQSubcode(struct qSubcode * buffer) ! 301: { ! 302: return (_provider->readTheQSubcode(buffer)); ! 303: } ! 304: ! 305: IOReturn IOATAPICDDriveNub::readTOC(struct rawToc * buffer, ! 306: UInt32 length, ! 307: tocFormat format) ! 308: { ! 309: return (_provider->readTOC(buffer, length, format)); ! 310: } ! 311: ! 312: IOReturn IOATAPICDDriveNub::setAudioStopAddress(positioningType addressType, ! 313: cdAddress address) ! 314: { ! 315: return (_provider->setAudioStopAddress(addressType, address)); ! 316: } ! 317: ! 318: IOReturn IOATAPICDDriveNub::audioPlay(positioningType addressType, ! 319: cdAddress address, ! 320: audioPlayMode mode) ! 321: { ! 322: return (_provider->audioPlay(addressType, address, mode)); ! 323: } ! 324: ! 325: IOReturn IOATAPICDDriveNub::audioTrackSearch(positioningType addressType, ! 326: cdAddress address, ! 327: bool startPlay, ! 328: audioPlayMode mode) ! 329: { ! 330: return kIOReturnUnsupported; ! 331: } ! 332: ! 333: IOReturn IOATAPICDDriveNub::getAudioStatus(struct audioStatus * status) ! 334: { ! 335: return (_provider->getAudioStatus(status)); ! 336: } ! 337: ! 338: IOReturn IOATAPICDDriveNub::readAudioVolume(UInt8 * leftVolume, ! 339: UInt8 * rightVolume) ! 340: { ! 341: return (_provider->readAudioVolume(leftVolume, rightVolume)); ! 342: } ! 343: ! 344: IOReturn IOATAPICDDriveNub::setVolume(UInt8 leftVolume, UInt8 rightVolume) ! 345: { ! 346: return (_provider->setVolume(leftVolume, rightVolume)); ! 347: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.