Annotation of XNU/iokit/IOKit/audio/IOAudioParts.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 
                     25:  * AudioClientImplementation
                     26:  */
                     27: 
                     28: #ifndef _IOAUDIOCLIENTIMPL_H
                     29: #define _IOAUDIOCLIENTIMPL_H
                     30: 
                     31: #include <IOKit/audio/IOAudio.h>
                     32: class IOWorkLoop;
                     33: class IOCommandQueue;
                     34: class IOTimerEventSource;
                     35: class IOAudioController;
                     36: 
                     37: /*!
                     38:  * @enum IOAudioCmd
                     39:  * @discussion Commands for IOAudio workloop's command event source
                     40:  * @constant kConnect
                     41:  * @constant kDetach
                     42:  * @constant kSetFlow
                     43:  * @constant kProbeStreams
                     44:  * @constant kSetVal
                     45:  */
                     46: typedef enum _IOAudioCmd {
                     47:     kConnect = 0,
                     48:     kDetach,
                     49:     kSetFlow,
                     50:     kProbeStreams,
                     51:     kSetVal,
                     52:     kFlush,
                     53:     kAllocMixBuffer
                     54: } IOAudioCmd;
                     55: 
                     56: /*!
                     57:  * @typedef AudioStreamIndex
                     58:  * @discussion Sound hardware contains several data streams which can be controlled to
                     59:  * and accessed to some extent by the CPU.
                     60:  * The driver assigns each of its streams an index, starting from 0.
                     61:  * Most calls to the driver specify the stream to manipulate.
                     62:  */
                     63: typedef int AudioStreamIndex;  // Just to be tidy
                     64: 
                     65: /*!
                     66:  * @defined
                     67:  * @discussion kNoStream Indicates no stream present
                     68:  */
                     69: #define kNoStream -1
                     70: 
                     71: /*!
                     72:  * @struct IOAudioStreamMap
                     73:  * @discussion Structure passed back when a stream is mapped, giving addresses in caller's
                     74:  * address space for the two shared data structures
                     75:  * @field fSampleBuffer Pointer to the buffer for an audio stream
                     76:  * @field fStatus Pointer to status information of an audio stream
                     77:  */
                     78: struct IOAudioStreamMap
                     79: {
                     80:     void *                     fSampleBuffer;
                     81:     IOAudioStreamStatus *      fStatus;
                     82:     void *                     fMixBuffer;
                     83: };
                     84: 
                     85: /*!
                     86:  * @class IOAudioComponentImpl
                     87:  * Implemenation for IOAudioComponenet
                     88:  */
                     89: class IOAudioComponentImpl : public IOAudioComponent
                     90: {      
                     91:     OSDeclareDefaultStructors(IOAudioComponentImpl)
                     92: 
                     93: protected:
                     94:     IOCommandQueue *   fCmdQueue;
                     95:     struct _notifyMsg *        fNotifyMsg;
                     96:     IOAudioController *        fOwner;
                     97: 
                     98:     /*! @function free Override to free memory */
                     99:     virtual void free();
                    100: 
                    101:     /*!
                    102:      * @function updateVal
                    103:      * @param val
                    104:      * @param control
                    105:      * @param direct
                    106:      * @result IOReturn
                    107:      */
                    108:    virtual IOReturn updateVal(UInt32 val, OSDictionary *control, bool direct);
                    109: 
                    110: public:
                    111:     /*!
                    112:      * @function initWithStuff
                    113:      * @discussion Initialization.
                    114:      * @param owner
                    115:      * @param props
                    116:      * @param queue
                    117:      * @result bool
                    118:      */
                    119:    virtual bool initWithStuff(IOAudioController *owner, OSDictionary *props,
                    120:                                                        IOCommandQueue *queue);
                    121: 
                    122:    /*!
                    123:     * @function newUserClient
                    124:     * @discussion Create an IOUserClient object to handle marshaling across the kernel/User
                    125:     *  boundary. We use the IOAudioStream object itself.
                    126:     * @param owningTask
                    127:     * @param security_id
                    128:     * @param type
                    129:     * @param handler
                    130:     * @result IOReturn
                    131:     */
                    132:     virtual IOReturn newUserClient( task_t owningTask, void * security_id,
                    133:                                     UInt32 type, IOUserClient ** handler );
                    134:     /*!
                    135:      * @function clientClose
                    136:      * @discussion Methods for IOUserClient.
                    137:      * @param void
                    138:      * @result IOReturn
                    139:      */ 
                    140:     virtual IOReturn clientClose( void );
                    141: 
                    142:     /*!
                    143:      * @function clientDied
                    144:      * @discussion Methods for IOUserClient.
                    145:      * @param void
                    146:      * @result IOReturn
                    147:      */
                    148:     virtual IOReturn clientDied( void );
                    149: 
                    150:     /*!
                    151:      * @function registerNotificationPort
                    152:      * @discussion Methods for IOUserClient.
                    153:      * @param port
                    154:      * @param type
                    155:      * @param refCon
                    156:      * @result IOReturn
                    157:      */
                    158:    virtual IOReturn registerNotificationPort(
                    159:                mach_port_t port, UInt32 type, UInt32 refCon );
                    160: 
                    161:    /*!
                    162:     * @function setProperties
                    163:     * @discussion Request change in properties, eg. volume, treble, etc.
                    164:     * Properties should be an OSDictionary of the form:
                    165:     *  {Controls = {
                    166:     *          'AControl' = {'Val' = newVal;};
                    167:     *          'BControl' = {'Val' = newVal;};
                    168:     *  };};
                    169:     *
                    170:     *   Other dictionary entries are ignored (so you can pass in a modified
                    171:     *  version of the current properties).
                    172:     * @param properties
                    173:     * @result IOReturn
                    174:     */ 
                    175:     virtual IOReturn setProperties( OSObject * properties );
                    176: 
                    177:     /*! 
                    178:      * @function Set
                    179:      * @discussion called from device when hardware state changes.
                    180:      * @param type
                    181:      * @param name
                    182:      * @param val
                    183:      * @result void
                    184:      */
                    185:     virtual void Set(const OSSymbol *type, const OSSymbol *name, int val);
                    186: 
                    187:     /*!
                    188:      * @function GetType
                    189:      * @discussion Handy gettors for Type property
                    190:      * @result OSSymbol
                    191:      */
                    192:     virtual const OSSymbol *GetType() const;
                    193: 
                    194:     /*!
                    195:      * @function GetType
                    196:      * @discussion Handy gettors for Type property
                    197:      * @param obj
                    198:      * @result OSSymbol
                    199:      */
                    200:     virtual const OSSymbol *GetType(const OSObject *obj) const;
                    201: };
                    202: 
                    203: /*!
                    204:  * @class IOAudioStreamImpl
                    205:  * Implemenation for IOAudioStream
                    206:  */
                    207: class IOAudioStreamImpl : public IOAudioStream
                    208: {      
                    209:     OSDeclareDefaultStructors(IOAudioStreamImpl)
                    210: 
                    211: protected:
                    212:     IOExternalMethod fMethods[kNumCalls];
                    213:     IOAudioStreamMap fMappedMem;
                    214:     AudioStreamIndex   fIndex;
                    215:     IOCommandQueue *   fCmdQueue;
                    216: 
                    217:     /*! @function free Override to free memory */
                    218:     virtual void free();
                    219: 
                    220: public:
                    221:     /*!
                    222:      * @function initWithPropsIndexQueue
                    223:      * @discussion
                    224:      * @param props
                    225:      * @param index
                    226:      * @param queue
                    227:      * @result bool
                    228:      */
                    229:     virtual bool initWithPropsIndexQueue(OSDictionary *props,
                    230:                                 AudioStreamIndex index, IOCommandQueue *queue);
                    231: 
                    232:     /*!
                    233:      * @function getInputDescriptor
                    234:      * @result OSNumber
                    235:      */
                    236:     const OSNumber *getInputDescriptor() const
                    237:         {return OSDynamicCast(OSNumber, getProperty("In"));};
                    238: 
                    239:     /*!
                    240:      * @function getOutputDescriptor
                    241:      * @result OSNumber
                    242:      */
                    243:    const OSNumber *getOutputDescriptor() const
                    244:         {return OSDynamicCast(OSNumber, getProperty("Out"));};
                    245: 
                    246:    /*!
                    247:     * @function newUserClient
                    248:     * @discussion Track client connection and departure so DMA and status buffers can be managed.
                    249:     * @result IOReturn
                    250:     */
                    251:     virtual IOReturn newUserClient( task_t owningTask, void * security_id,
                    252:                                     UInt32 type, IOUserClient ** handler );
                    253:     /*!
                    254:      * @function clientClose
                    255:      * @discussion Track client connection and departure so DMA and status buffers can be managed.
                    256:      * @result IOReturn
                    257:      */
                    258:     virtual IOReturn clientClose( void );
                    259: 
                    260:     /*!
                    261:      * @function clientDied
                    262:      * @discussion Track client connection and departure so DMA and status buffers can be managed.
                    263:      * @result IOReturn
                    264:      */
                    265:     virtual IOReturn clientDied( void );
                    266: 
                    267:     /*!
                    268:      * @function getExternalMethodForIndex
                    269:      * @param index
                    270:      * @result IOExternalMethod
                    271:      */
                    272:    virtual IOExternalMethod * getExternalMethodForIndex( UInt32 index );
                    273: 
                    274:     /*!
                    275:      * @function clientMemoryForType
                    276:      * @discussion Return info on shared memory so base class can share it out to user space
                    277:      * @param type
                    278:      * @param flags
                    279:      * @param memory
                    280:      * @result IOReturn
                    281:      */
                    282:     virtual IOReturn clientMemoryForType( UInt32 type,
                    283:         UInt32 * flags, IOMemoryDescriptor ** memory );
                    284: 
                    285:     /*!
                    286:      * @function Flush
                    287:      * @discussion See base class
                    288:      * @param end 
                    289:      * @result IOReturn
                    290:      */
                    291:     virtual IOReturn Flush(IOAudioStreamPosition *end);
                    292: 
                    293:     /*!
                    294:      * @function setFlow
                    295:      * @discussion Control the flow of data
                    296:      * @param flowing True to flow, false to stop
                    297:      * @result IOReturn
                    298:      */
                    299:     virtual IOReturn setFlow(bool flowing);
                    300: 
                    301:     /*!
                    302:      * @function getMixBuffer
                    303:      * @discussion get the mix buffer for the stream
                    304:      * @param mixBuffer
                    305:      * @result IOReturn kIOReturnSuccess
                    306:      */
                    307:     
                    308:     virtual IOReturn getMixBuffer(void **mixBuffer);
                    309:     
                    310:     /*!
                    311:      * @function setErase
                    312:      * @discussion Control the erase head
                    313:      * @param erase
                    314:      * @param oldErase
                    315:      * @result IOReturn
                    316:      */
                    317:     virtual IOReturn setErase(bool erase, SInt32 *oldErase);
                    318: 
                    319:     /*!
                    320:      * @function isOutput
                    321:      * @discussion Handy shortcut to useful property.
                    322:      * @param res
                    323:      * @result IOReturn
                    324:      */
                    325:     IOReturn isOutput(SInt32 *res) const;
                    326: 
                    327:     /*!
                    328:      * @function setProperties
                    329:      * @discussion Set the audio properties.
                    330:      * @param properties The properties.
                    331:      * @result IOReturn
                    332:      */
                    333:     IOReturn setProperties( OSObject * properties );
                    334: 
                    335: };
                    336: 
                    337: #endif /* _IOAUDIOCLIENTIMPL_H */

unix.superglobalmegacorp.com

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