#ifndef __APPLE_INTEL_AC97_AUDIO_ENGINE_H
#define __APPLE_INTEL_AC97_AUDIO_ENGINE_H
#include <IOKit/IOTimerEventSource.h>
#include <IOKit/IOFilterInterruptEventSource.h>
#include <IOKit/IOBufferMemoryDescriptor.h>
#include <IOKit/audio/IOAudioEngine.h>
#include <IOKit/audio/IOAudioTypes.h>
#include "AC97Defines.h"
#include "AC97Codec.h"
class AppleIntelAC97AudioEngine : public IOAudioEngine
{
OSDeclareDefaultStructors( AppleIntelAC97AudioEngine )
protected:
IOService * _provider; IOPhysicalAddress _outBDListPhys; IOPhysicalAddress _inBDListPhys; UInt32 _out48KRate; UInt32 _bufferCount; UInt32 _bufferSize; UInt32 _bufferSamples; bool _isRunning; IOBufferMemoryDescriptor * _outSampleMemory; IOBufferMemoryDescriptor * _outBDListMemory; IOBufferMemoryDescriptor * _inSampleMemory; IOBufferMemoryDescriptor * _inBDListMemory;
AppleIntelAC97Codec * _codec;
IOFilterInterruptEventSource * _interruptEvSrc;
IOTimerEventSource * _timerEvSrc;
static bool interruptFilterHandler( OSObject * owner,
IOFilterInterruptEventSource * source );
static void interruptHandler( OSObject * owner,
IOInterruptEventSource * source,
int count );
void interruptFilter( void );
void updateDescriptorTail( DMAChannel channel );
UInt32 setOutputSampleRate( UInt32 rate,
bool calibrate = false );
UInt32 setInputSampleRate( UInt32 rate );
UInt32 getOutputPosition( void );
public:
virtual bool init( OSDictionary * properties,
IOService * provider,
AppleIntelAC97Codec * codec );
virtual void free( void );
virtual bool initHardware( IOService * provider );
virtual IOReturn performAudioEngineStart( void );
virtual IOReturn performAudioEngineStop( void );
virtual UInt32 getCurrentSampleFrame( void );
virtual IOReturn performFormatChange(
IOAudioStream * audioStream,
const IOAudioStreamFormat * newFormat,
const IOAudioSampleRate * newSampleRate );
virtual IOReturn clipOutputSamples(
const void * mixBuf,
void * sampleBuf,
UInt32 firstSampleFrame,
UInt32 numSampleFrames,
const IOAudioStreamFormat * streamFormat,
IOAudioStream * audioStream );
virtual IOReturn convertInputSamples(
const void * sampleBuf,
void * destBuf,
UInt32 firstSampleFrame,
UInt32 numSampleFrames,
const IOAudioStreamFormat * streamFormat,
IOAudioStream * audioStream );
virtual void timerFired( void );
};
#endif