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