AppleNVIDIAnForceATA.h [plain text]
#ifndef _APPLENVIDIANFORCEATA_H
#define _APPLENVIDIANFORCEATA_H
#include <IOKit/IOFilterInterruptEventSource.h>
#include "AppleOnboardPCATA.h"
#include "AppleNVIDIAnForceATATiming.h"
struct BusTimings {
UInt8 pioModeNumber;
const TimingParameter * pioTiming;
UInt8 dmaModeNumber;
const TimingParameter * dmaTiming;
UInt8 ultraModeNumber;
bool ultraEnabled;
};
struct HardwareInfo {
UInt32 pciDeviceID;
UInt8 maxUltraMode;
const char * deviceName;
};
class AppleNVIDIAnForceATA : public AppleOnboardPCATA
{
OSDeclareDefaultStructors( AppleNVIDIAnForceATA )
protected:
IOInterruptEventSource * fInterruptSource;
IOWorkLoop * fWorkLoop;
BusTimings fBusTimings[ kMaxDriveCount ];
bool f80PinCablePresent;
UInt16 fBMBaseAddr;
UInt32 fUltraModeMask;
const HardwareInfo * fHWInfo;
static void interruptOccurred(
OSObject * owner,
IOInterruptEventSource * source,
int count );
static bool interruptFilter(
OSObject * owner,
IOFilterInterruptEventSource * source );
virtual bool getBMBaseAddress(
UInt16 * baseAddr );
virtual void resetBusTimings( void );
virtual void selectTimingParameter(
IOATADevConfig * configRequest,
UInt32 unitNumber );
virtual void programTimingRegisters( void );
virtual void initializeHardware( void );
virtual void restoreHardwareState( void );
virtual void dumpHardwareRegisters( void );
virtual void writeTimingIntervalNS(
TimingReg reg,
UInt32 drive,
UInt32 timeNS );
virtual void writeTimingRegister(
TimingReg reg,
UInt32 drive,
UInt8 value );
virtual UInt32 readTimingIntervalNS(
TimingReg reg,
UInt32 drive );
virtual UInt8 readTimingRegister(
TimingReg reg,
UInt32 drive );
public:
virtual bool start( IOService * provider );
virtual void free( void );
virtual IOWorkLoop * getWorkLoop( void ) const;
virtual IOReturn provideBusInfo(
IOATABusInfo * infoOut );
virtual IOReturn getConfig(
IOATADevConfig * configOut,
UInt32 unit );
virtual IOReturn selectConfig(
IOATADevConfig * config,
UInt32 unit );
};
#endif