Annotation of XNU/iokit/IOKit/audio/IOAudioBus.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: 
                     23: /*!
                     24:  * @header IOAudioBus
                     25:  * Interface definition for the AudioBus audio Controller
                     26:  * !! WARNING !! This is a temporary interface until the full bus abstraction has been worked out.
                     27:  */
                     28: 
                     29: #ifndef _IOAUDIOBUS_H
                     30: #define _IOAUDIOBUS_H
                     31: 
                     32: #include <IOKit/audio/IOAudio.h>
                     33: #include <IOKit/audio/IOAudioParts.h>
                     34: #include <IOKit/IORegistryEntry.h>
                     35: #include <IOKit/IOService.h>
                     36: #include <IOKit/IOUserClient.h>
                     37: #include <IOKit/assert.h>
                     38: #include <IOKit/audio/IOAudioController.h>
                     39: #include <IOKit/IOFilterInterruptEventSource.h>
                     40: 
                     41: /*!
                     42:  * @enum StreamDirection
                     43:  * @constant kOutput
                     44:  * @constant kInput
                     45:  */
                     46: enum StreamDirection
                     47: {
                     48:     kOutput,
                     49:     kInput
                     50: };
                     51: 
                     52: /*!
                     53:  * @defined kInvalidStreamIndex
                     54:  * @discussion Defines the invalid stream index value
                     55:  */
                     56: #define kInvalidStreamIndex    -1
                     57: 
                     58: #ifdef __ppc__
                     59: #include <IOKit/ppc/IODBDMA.h>
                     60: 
                     61: /*!
                     62:  * @class IOAudioBus
                     63:  * @abstract This class handles all the DMA on PPC hardware
                     64:  * @discussion FIXME: where it says __ppc__ it should be something like POWERRMAC
                     65:  *  since we can have PPC hardware with a different audio DMA implementation
                     66:  */
                     67: class IOAudioBus: public IOAudioController
                     68: {
                     69:     OSDeclareDefaultStructors(IOAudioBus)
                     70: 
                     71:     /*!
                     72:      * @struct StreamDMAInfo
                     73:      * @abstract Maintains information relevant to DMA operations
                     74:      * @field fSharedStatus
                     75:      * @field fIOBaseDMA
                     76:      * @field fCmds
                     77:      * @field fDmaCmd
                     78:      * @field fCmdSize
                     79:      * @field fNeedsErase
                     80:      * @field fIsInput
                     81:      * @field fSampleRate
                     82:      * @field streamProperty
                     83:      */
                     84:     typedef struct StreamDMAInfo {
                     85:         IOAudioStreamStatus *                  fSharedStatus;
                     86:         volatile IODBDMAChannelRegisters *     fIOBaseDMA;
                     87:         IODBDMADescriptor *                    fCmds;
                     88:         int16_t *                              fSampleBuffer;
                     89:         u_int32_t                              fDmaCmd;
                     90:         int                                    fCmdSize;
                     91:         int                                    fNeedsErase;
                     92:         bool                                   fIsInput;
                     93:         UInt32                                 fSampleRate;
                     94:         char *                                  streamProperty;
                     95:     } StreamDMAInfo;
                     96: 
                     97:     UInt16                             numDMAStreams;
                     98:     StreamDMAInfo                      *ioAudioStreamsDMA;
                     99:     int                                        fBufMax;
                    100:     int                                        fBlockSize;
                    101:     IOFilterInterruptEventSource *     fTxInterruptSource;
                    102:     IOFilterInterruptEventSource *     fRxInterruptSource;
                    103:     
                    104: public:
                    105:     virtual bool init(OSDictionary *properties = 0);
                    106:     virtual void free();
                    107: 
                    108:     /*! 
                    109:      * @function AllocateStreams
                    110:      * @abstract Creates n empty streams (also a method to free them)
                    111:      * @param numberOfStreams
                    112:      * @result bool
                    113:      */
                    114:     virtual bool AllocateStreams(int numberOfStreams);
                    115: 
                    116:     /*!
                    117:      * @function FreeStreams
                    118:      * @abstract Deallocate audio streams
                    119:      * @result bool
                    120:      */
                    121:     virtual bool FreeStreams();
                    122: 
                    123:     /*!
                    124:      * @function DefineStream
                    125:      * @abstract For each stream defines its properties
                    126:      * @param index
                    127:      * @param direction
                    128:      * @param rate
                    129:      * @param base
                    130:      * @result bool
                    131:      */
                    132:     virtual bool DefineStream(AudioStreamIndex index, int direction, UInt32 rate, IODBDMAChannelRegisters *base);
                    133: 
                    134:     /*!
                    135:      * @function firstStreamAfter
                    136:      * @abstract Returns the first stream in the given direction after the given index
                    137:      * @discussion This is useful if we have to handle more than one stream for input and output
                    138:      * @param inDirection
                    139:      * @param afterIndex afterIndex is inclusive
                    140:      * @result AudioStreamIndex returns kInvalidStreamIndex upon failure
                    141:      */
                    142:     virtual AudioStreamIndex firstStreamAfter(int inDirection, AudioStreamIndex afterIndex);
                    143: 
                    144:     /*!
                    145:      * @function getStreamProperties
                    146:      * @param AudioStreamIndex
                    147:      * @result OSDictionary The dictionary of properties
                    148:      */
                    149:     virtual OSDictionary* getStreamProperties(AudioStreamIndex);
                    150: 
                    151:     /*! @function probeStreams */
                    152:     virtual int probeStreams();
                    153: 
                    154:     /*!
                    155:      * @function IOAudioStreamStatus
                    156:      * @param AudioStreamIndex
                    157:      * @result IOAudioStreamStatus
                    158:      */
                    159:     virtual struct IOAudioStreamStatus* getSharedStatus(AudioStreamIndex);
                    160: 
                    161:     /*!
                    162:      * @function getSampleBuffer
                    163:      * @param AudioStreamIndex
                    164:      * @result void*
                    165:      */
                    166:     virtual void* getSampleBuffer(AudioStreamIndex);
                    167: 
                    168:     /*!
                    169:      * @function startStream
                    170:      * @param AudioStreamIndex
                    171:      * @result IOAudioStreamStatus
                    172:      */
                    173:     virtual struct IOAudioStreamStatus* startStream(AudioStreamIndex);
                    174: 
                    175:     /*!
                    176:      * @function stopStream
                    177:      * @param AudioStreamIndex
                    178:      * @result void
                    179:      */
                    180:     virtual void stopStream(AudioStreamIndex);
                    181: 
                    182:     /*!
                    183:      * @function pauseStream
                    184:      * @param AudioStreamIndex
                    185:      * @result void
                    186:      */
                    187:     virtual void pauseStream(AudioStreamIndex);
                    188: 
                    189:     /*!
                    190:      * @function resumeStream
                    191:      * @param AudioStreamIndex
                    192:      * @result void
                    193:      */
                    194:     virtual void resumeStream(AudioStreamIndex);
                    195: 
                    196:     /*!
                    197:      * @function createAudioStream
                    198:      * @param AudioStreamIndex
                    199:      * @result IOAudioStream
                    200:      */
                    201:     virtual IOAudioStream *createAudioStream(AudioStreamIndex index);
                    202: 
                    203: protected:
                    204:     /*!
                    205:      * @var const kAudioDMAdeviceInt = 0
                    206:      * @discussion These constants define the one-to-one relationship between the transmit interrupt and a single output stream
                    207:      * and the receive interrupt and a single input stream.
                    208:      * It is up to the subclass to ensure that these relationships are properly used.
                    209:      */
                    210:     static const int kAudioDMAdeviceInt;
                    211: 
                    212:     /*! @var const kAudioDMAtxInt = 1 */
                    213:     static const int kAudioDMAtxInt;
                    214: 
                    215:     /*! @var const kAudioDMAtxInt = 2 */
                    216:     static const int kAudioDMArxInt;
                    217: 
                    218:     /*! @var const kAudioDMAtxInt = 0 */
                    219:     static const AudioStreamIndex kAudioDMAOutputStream;
                    220: 
                    221:     /*! @var const kAudioDMAtxInt = 1 */
                    222:     static const AudioStreamIndex kAudioDMAInputStream;
                    223: 
                    224:     /*! 
                    225:      * @function startWorkLoop
                    226:      * @result void
                    227:      */
                    228:     virtual void startWorkLoop();
                    229: 
                    230:     /*! 
                    231:      * @function registerInterrupts
                    232:      * @result void
                    233:      */
                    234:     virtual void registerInterrupts();
                    235: 
                    236:     /*!
                    237:      * @function filterInterrupt
                    238:      * @param index
                    239:      * @result bool
                    240:      */
                    241:     virtual bool filterInterrupt(int index);
                    242: 
                    243:     /*!
                    244:      * @function getStreamForInterrupt
                    245:      * @param index
                    246:      * @result AudioStreamIndex
                    247:      */
                    248:     virtual AudioStreamIndex getStreamForInterrupt(int index);
                    249: 
                    250:     /*!
                    251:      * @function AudioBusInterruptFilter
                    252:      * @param owner
                    253:      * @param source
                    254:      * @result bool
                    255:      */
                    256:     static bool AudioBusInterruptFilter(OSObject *owner,
                    257:                                         IOFilterInterruptEventSource *source);
                    258: 
                    259:     /*!
                    260:      * @function AudioBusInterruptHandler
                    261:      * @param owner
                    262:      * @param source
                    263:      * @param count
                    264:      * @result bool
                    265:      */
                    266:     static void AudioBusInterruptHandler(OSObject *owner,
                    267:                                          IOInterruptEventSource * source,
                    268:                                          int count);
                    269: };
                    270: 
                    271: #else // ! ppc
                    272: 
                    273: /*!
                    274:  * @class IOAudioBus
                    275:  * @abstract For non PPC hardware the calss still exists but the driver must implement all the DMA handling
                    276:  */
                    277: class IOAudioBus: public IOAudioController
                    278: {
                    279:     OSDeclareDefaultStructors(IOAudioBus)
                    280: };
                    281: 
                    282: #endif //ppc
                    283: 
                    284: #endif //_IOAUDIOBUS_H

unix.superglobalmegacorp.com

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