Annotation of XNU/iokit/IOKit/audio/IOAudioBus.h, revision 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.