#ifndef __APPLE_INTEL_AC97_CODEC_H
#define __APPLE_INTEL_AC97_CODEC_H
#include <IOKit/IOService.h>
#include "AC97Defines.h"
#define kCodecIDKey "Codec ID"
#define kCodecFunctionKey "Codec Function"
#define kResetRegisterKey "Reset Register"
#define kExtAudioIDRegisterKey "Extended Audio ID"
#define kPNPVendorIDKey "PNP Vendor ID"
enum {
kAuxOutModeLineOut,
kAuxOutModeHeadphoneOut,
kAuxOutMode4ChannelOut
};
class AppleIntelAC97Controller;
class AppleIntelAC97Codec : public IOService
{
OSDeclareDefaultStructors( AppleIntelAC97Codec )
protected:
AppleIntelAC97Controller * _controller;
CodecID _codecID;
void * _codecParam;
UInt16 _codecRegs[ kCodecRegisterCount ];
UInt8 _auxOutputMode;
UInt8 _masterVolumeBitCount;
virtual bool probeAudioCodec();
virtual bool probeModemCodec();
public:
static AppleIntelAC97Codec *
codec(AppleIntelAC97Controller * controller,
CodecID codecID,
void * codecParam = 0 );
virtual bool init( AppleIntelAC97Controller * controller,
CodecID codecID,
void * codecParam = 0 );
virtual void free();
virtual bool handleOpen( IOService * client,
IOOptionBits options,
void * arg );
virtual void handleClose( IOService * client,
IOOptionBits options );
inline CodecID getCodecID() const
{ return _codecID; }
inline void * getCodecParam() const
{ return _codecParam; }
inline AppleIntelAC97Controller * getController() const
{ return _controller; }
virtual UInt16 _readRegister( UInt8 offset );
virtual IOReturn _writeRegister( UInt8 offset, UInt16 value );
virtual UInt16 readRegister( UInt8 offset ) const;
virtual IOReturn writeRegister( UInt8 offset, UInt16 value );
virtual IOFixed getOutputVolumeMinDB() const;
virtual IOFixed getOutputVolumeMaxDB() const;
virtual UInt32 getOutputVolumeMin() const;
virtual UInt32 getOutputVolumeMax() const;
virtual void setOutputVolumeLeft( UInt16 volume );
virtual void setOutputVolumeRight( UInt16 volume );
virtual void setOutputVolumeMute( bool isMute );
virtual IOReturn setDACSampleRate( UInt32 rate, UInt32 * actualRate = 0 );
virtual UInt32 getDACSampleRate() const;
virtual IOReturn setDescriptorBaseAddress( DMAChannel channel,
IOPhysicalAddress baseAddress );
virtual void setLastValidIndex( DMAChannel channel, UInt8 index );
virtual UInt8 getCurrentIndexValue( DMAChannel channel ) const;
virtual UInt32 getCurrentBufferPosition( DMAChannel channel,
UInt8 * index ) const;
virtual IOReturn startDMAChannel( DMAChannel channel );
virtual void stopDMAChannel( DMAChannel channel );
virtual bool serviceChannelInterrupt( DMAChannel channel );
};
#endif