Annotation of XNU/iokit/IOKit/storage/IOCDDrive.h, revision 1.1.1.1

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: /* IOCD.h created by rick on Thu 08-Apr-1999 */
                     23: 
                     24: /* =============================================================================
                     25:  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved. 
                     26:  *
                     27:  * IOCDDrive.h
                     28:  *
                     29:  * This class implements  CD functionality, independent of
                     30:  * the physical connection protocol (e.g. SCSI, ATA, USB).
                     31:  *
                     32:  * A protocol-specific provider implements the functionality using an appropriate
                     33:  * protocol and commands.
                     34:  */
                     35: 
                     36: #ifndef        _IOCDDRIVE_H
                     37: #define        _IOCDDRIVE_H
                     38: 
                     39: #include <IOKit/IOTypes.h>
                     40: #include <IOKit/storage/IOHDDrive.h>
                     41: #include "IOCDTypes.h"
                     42: 
                     43: class IOCDAudioNub;
                     44: class IOCDMedia;
                     45: class IOCDDriveNub;
                     46: 
                     47: class IOCDDrive : public IOHDDrive {
                     48: 
                     49:     OSDeclareDefaultStructors(IOCDDrive)
                     50: 
                     51: public:
                     52: 
                     53:     /* Overrides of IORegistryEntry */
                     54:     
                     55:     virtual bool       init(OSDictionary * properties);
                     56: 
                     57:     /* Overrides of IOHDDrive: */
                     58: 
                     59:     virtual IOReturn   ejectMedia(void);
                     60:     virtual const char * getDeviceTypeName(void);
                     61:     virtual IOMedia *  instantiateDesiredMediaObject(void);
                     62:     virtual bool       setProvider(IOService * provider);
                     63:     virtual bool       showStats(void);
                     64:     
                     65:     /* End of IOHDDrive overrides. */
                     66: 
                     67:     /* -------------------------------------------------*/
                     68:     /* APIs implemented here, exported by IOCDMediaNub: */
                     69:     /* -------------------------------------------------*/
                     70: 
                     71:     virtual IOReturn   audioPause(bool pause);
                     72:     virtual IOReturn   audioScan(positioningType addressType,cdAddress address,
                     73:                                                bool reverse);
                     74:     virtual IOReturn   readAudioData(positioningType addressType,cdAddress address,
                     75:                                        UInt8 blockCount,UInt8 *buffer);
                     76:     virtual IOReturn   readAudioSubcodes(positioningType addressType,cdAddress address,
                     77:                                        UInt8 blockCount,UInt8 *buffer);
                     78:     virtual IOReturn   readAudioWithQSubcode(positioningType addressType,cdAddress address,
                     79:                                        UInt8 blockCount,UInt8 *buffer);
                     80:     virtual IOReturn   readAudioWithAllSubcodes(positioningType addressType,cdAddress address,
                     81:                                        UInt8 blockCount,UInt8 *buffer);
                     82:     virtual IOReturn   readEntireTOC(struct macEntireToc *buffer);
                     83:     virtual IOReturn   readHeader(UInt32 blockAddress,struct headerInfo *buffer);
                     84:     virtual IOReturn   readISRC(UInt32 track,UInt8 *buffer,bool *found);
                     85:     virtual IOReturn   readLeadOutAddress(cdAddress *buffer);
                     86:     virtual IOReturn   readMCN(UInt8 *buffer,bool *found);
                     87:     virtual IOReturn   readQSubcodes(struct qSubcodeTocInfo *buffer,UInt32 bufSize);
                     88:     virtual IOReturn   readSessionInfo(struct sessionInfo *info);
                     89:     virtual IOReturn   readSubcodeBuffer(UInt8 *buffer,bool purge,UInt32 entryCount);
                     90:     virtual IOReturn   readTheQSubcode(struct qSubcode *buffer);
                     91:     virtual IOReturn   readTrackInfo(UInt32 startingTrack,
                     92:                                        struct trackTypeInfo *buf,UInt32 bufSize);
                     93:     virtual IOReturn   readTrackLimits(UInt32 *first,UInt32 *last);
                     94: 
                     95:     /* end of IOCDMediaNub APIs */
                     96:     
                     97:     /* --------------------------------------------------------*/
                     98:     /* APIs implemented here, exported by IOCDAudioNub: */
                     99:     /* --------------------------------------------------------*/
                    100: 
                    101:     virtual IOReturn   audioPlay(positioningType addressType,cdAddress address,audioPlayMode mode);
                    102:     virtual IOReturn   audioTrackSearch(positioningType addressType,cdAddress address,
                    103:                                                bool startPlay,audioPlayMode mode);
                    104:     virtual IOReturn   getAudioStatus(struct audioStatus *status);
                    105:     virtual IOReturn   readAudioVolume(UInt8 *leftVolume,UInt8 *rightVolume);
                    106:     virtual IOReturn   setAudioStopAddress(positioningType addressType,cdAddress address);
                    107:     virtual IOReturn   setVolume(UInt8 leftVolume,UInt8 rightVolume);
                    108: 
                    109:     /* end of IOCDAudioNub APIs */
                    110: 
                    111:     /* API used by a CD partitioner: */
                    112:     
                    113:     virtual UInt32     getTrackBlocks(UInt32 track);
                    114:     virtual UInt32     getTrackStartBlock(UInt32 track);
                    115:     virtual bool       trackExists(UInt32 track);
                    116:     virtual bool       trackIsAudio(UInt32 track);
                    117:     virtual bool       trackIsData(UInt32 track);
                    118:     
                    119: protected:
                    120:         
                    121:     /* Overrides of IOHDDrive behavior. */
                    122: 
                    123:     /* When CD media is inserted, we want to create multiple nubs for the data and
                    124:      * audio tracks, for sessions, and the entire media. We override the methods
                    125:      * that manage nubs.
                    126:      */
                    127:     virtual IOReturn   acceptNewMedia(void);
                    128:     virtual IOReturn   decommissionMedia(bool forcible);
                    129: 
                    130:     /* End of IOHDDrive overrides. */
                    131: 
                    132:     /* Internally used methods: */
                    133: 
                    134:     struct trackInfo {
                    135:         UInt8          track;                  /* zero is invalid, thus this entry not in use */
                    136:         UInt8          control;
                    137:         bool           isData;
                    138:         UInt32         lba;
                    139:         UInt32         msf;
                    140:         UInt32         nblocks;
                    141:     };
                    142: 
                    143:     virtual IOReturn   cacheTocInfo(void);
                    144:     virtual void       dump(char *buf,int count);
                    145:     virtual void       setTrackInfoEntry(struct tocTrackDescriptor *d,struct trackInfo *t);
                    146: 
                    147:     /* ------- */
                    148: 
                    149:     /* We have to keep a pointer to a CD nub, because our base class's
                    150:      * provider pointer only expects to point to a Hard Disk nub. Both
                    151:      * pointers actually point at the same IOCDDriveNub object.
                    152:      */
                    153:     IOCDDriveNub *             _CDprovider;
                    154:     
                    155:     IOCDAudioNub *     _acNub;
                    156:     IOCDMedia *                        _mediaNub;
                    157: 
                    158: 
                    159:     /* We keep the TOC here because we'll always need it, so what the heck. */
                    160: 
                    161:     bool               _tocInfoCached;         /* true if toc info is valid */
                    162: 
                    163:     struct discInfo {
                    164:         struct limits {
                    165:             UInt32     first;          /* number of first */
                    166:             UInt32     last;           /*  and last */
                    167:         } sessions;
                    168:         struct limits  tracks;
                    169:     } _discInfo;
                    170: 
                    171:     /* There are possible "point" track entries for 0xa0..a2, 0xaa, 0xb0..b4, and 0xc0.
                    172:      * To keep things simple, we just allow space for all of these possible track entries.
                    173:      * Tracks need not start at 1, as long as they're between 1 and 99, and have contiguous
                    174:      * numbers. The leadout track is always numbered 0xaa.
                    175:      */
                    176: static const int kTrackEntries = 0xc0 + 1;     /* 99 data/audio tracks + points, starting at 1 */
                    177: 
                    178:     struct trackInfo   _trackInfo[kTrackEntries];
                    179: };
                    180: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.