|
|
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: #include "IOCDAudioNub.h"
23: #include "IOCDAudioNubClient.h"
24: #include <IOKit/storage/IOCDDrive.h>
25:
26: #define super IOService
27: OSDefineMetaClassAndStructors(IOCDAudioNub,IOService)
28:
29: IOReturn
30: IOCDAudioNub::newUserClient(task_t owningTask,
31: void * /* security_id */,
32: UInt32 type,
33: IOUserClient ** handler )
34:
35: {
36: IOReturn err = kIOReturnSuccess;
37: IOCDAudioNubClient * client;
38:
39: kprintf("IOCDAudioNub::newUserClient\n");
40: if( type != 11) {
41: kprintf("IOCDAudioNub::newUserClient bad argument\n");
42: return( kIOReturnBadArgument);
43: }
44:
45: client = IOCDAudioNubClient::withTask(owningTask);
46:
47: if( !client || (false == client->attach( this )) ||
48: (false == client->start( this )) ) {
49: if(client) {
50: client->detach( this );
51: client->release();
52: }
53: err = kIOReturnNoMemory;
54: }
55:
56: *handler = client;
57: return( err );
58: }
59:
60: bool
61: IOCDAudioNub::attach(IOService *provider)
62: {
63: _provider = (IOCDDrive *)provider;
64:
65: return(super::attach(provider));
66: }
67:
68: IOReturn
69: IOCDAudioNub::audioPlay(positioningType addressType,cdAddress address,
70: audioPlayMode mode)
71: {
72: return(_provider->audioPlay(addressType,address,mode));
73: }
74:
75: IOReturn
76: IOCDAudioNub::audioPause(bool pause)
77: {
78: return(_provider->audioPause(pause));
79: }
80:
81: IOReturn
82: IOCDAudioNub::audioScan(positioningType addressType,cdAddress address,
83: bool reverse)
84: {
85: return(_provider->audioScan(addressType,address,reverse));
86: }
87:
88: IOReturn
89: IOCDAudioNub::audioTrackSearch(positioningType addressType,cdAddress address,
90: bool startPlay,audioPlayMode mode)
91: {
92: return(_provider->audioTrackSearch(addressType,address,startPlay,mode));
93: }
94:
95: IOReturn
96: IOCDAudioNub::getAudioStatus(struct audioStatus *status)
97: {
98: return(_provider->getAudioStatus(status));
99: }
100:
101: IOReturn
102: IOCDAudioNub::readAudioData(positioningType addressType,cdAddress address,
103: UInt8 blockCount,UInt8 *buffer)
104: {
105: return(_provider->readAudioData(addressType,address,blockCount,buffer));
106: }
107:
108: IOReturn
109: IOCDAudioNub::readAudioSubcodes(positioningType addressType,cdAddress address,
110: UInt8 blockCount,UInt8 *buffer)
111: {
112: return(_provider->readAudioSubcodes(addressType,address,blockCount,buffer));
113: }
114:
115: IOReturn
116: IOCDAudioNub::readAudioVolume(UInt8 *leftVolume,UInt8 *rightVolume)
117: {
118: return(_provider->readAudioVolume(leftVolume,rightVolume));
119: }
120:
121: IOReturn
122: IOCDAudioNub::readAudioWithQSubcode(positioningType addressType,cdAddress address,
123: UInt8 blockCount,UInt8 *buffer)
124: {
125: return(_provider->readAudioWithQSubcode(addressType,address,blockCount,buffer));
126: }
127:
128: IOReturn
129: IOCDAudioNub::readAudioWithAllSubcodes(positioningType addressType,cdAddress address,
130: UInt8 blockCount,UInt8 *buffer)
131: {
132: return(_provider->readAudioWithAllSubcodes(addressType,address,blockCount,buffer));
133: }
134:
135: IOReturn
136: IOCDAudioNub::readEntireTOC(struct macEntireToc *buffer)
137: {
138: return(_provider->readEntireTOC(buffer));
139: }
140:
141: IOReturn
142: IOCDAudioNub::readHeader(UInt32 blockAddress,struct headerInfo *buffer)
143: {
144: return(_provider->readHeader(blockAddress,buffer));
145: }
146:
147: IOReturn
148: IOCDAudioNub::readISRC(UInt32 track,UInt8 *buffer,bool *found)
149: {
150: return(_provider->readISRC(track,buffer,found));
151: }
152:
153: IOReturn
154: IOCDAudioNub::readLeadOutAddress(cdAddress *buffer)
155: {
156: return(_provider->readLeadOutAddress(buffer));
157: }
158:
159: IOReturn
160: IOCDAudioNub::readMCN(UInt8 *buffer,bool *found)
161: {
162: return(_provider->readMCN(buffer,found));
163: }
164:
165: IOReturn
166: IOCDAudioNub::readQSubcodes(struct qSubcodeTocInfo *buffer,UInt32 bufSize)
167: {
168: return(_provider->readQSubcodes(buffer,bufSize));
169: }
170:
171: IOReturn
172: IOCDAudioNub::readSessionInfo(struct sessionInfo *info)
173: {
174: return(_provider->readSessionInfo(info));
175: }
176:
177: IOReturn
178: IOCDAudioNub::readSubcodeBuffer(UInt8 *buffer,bool purge,UInt32 entryCount)
179: {
180: return(_provider->readSubcodeBuffer(buffer,purge,entryCount));
181: }
182:
183: IOReturn
184: IOCDAudioNub::readTheQSubcode(struct qSubcode *buffer)
185: {
186: return(_provider->readTheQSubcode(buffer));
187: }
188:
189: IOReturn
190: IOCDAudioNub::readTrackInfo(UInt32 startingTrack,
191: struct trackTypeInfo *buf,UInt32 bufSize)
192: {
193: return(_provider->readTrackInfo(startingTrack,buf,bufSize));
194: }
195:
196: IOReturn
197: IOCDAudioNub::readTrackLimits(UInt32 *first,UInt32 *last)
198: {
199: return(_provider->readTrackLimits(first,last));
200: }
201:
202: IOReturn
203: IOCDAudioNub::setAudioStopAddress(positioningType addressType,cdAddress address)
204: {
205: return(_provider->setAudioStopAddress(addressType,address));
206: }
207:
208: IOReturn
209: IOCDAudioNub::setVolume(UInt8 leftVolume,UInt8 rightVolume)
210: {
211: return(_provider->setVolume(leftVolume,rightVolume));
212: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.