AppleVIAATADriver.h [plain text]
#ifndef _APPLEVIAATADRIVER_H
#define _APPLEVIAATADRIVER_H
#include <IOKit/IOFilterInterruptEventSource.h>
#include <IOKit/ata/IOATATypes.h>
#include <IOKit/ata/IOPCIATA.h>
#include <IOKit/ata/IOATAController.h>
#include <IOKit/ata/ATADeviceNub.h>
#include "AppleVIAATAHardware.h"
#include "AppleVIAATAChannel.h"
#include "AppleVIAATATiming.h"
struct ATABusTimings
{
UInt8 pioModeNumber;
const VIATimingParameter * pioTiming;
UInt8 dmaModeNumber;
const VIATimingParameter * dmaTiming;
UInt8 ultraModeNumber;
bool ultraEnabled;
};
class AppleVIAATADriver : public IOPCIATA
{
OSDeclareDefaultStructors( AppleVIAATADriver )
protected:
AppleVIAATAChannel * fProvider;
IOInterruptEventSource * fInterruptSource;
IOWorkLoop * fWorkLoop;
ATABusTimings fBusTimings[ kMaxDriveCount ];
bool f80PinCable[ kMaxDriveCount ];
UInt16 fBMBaseAddr;
UInt32 fChannelNumber;
bool fHardwareLostContext;
static void interruptOccurred( OSObject * owner,
IOInterruptEventSource * src,
int count );
static bool interruptFilter( OSObject * owner,
IOFilterInterruptEventSource * src );
virtual bool getBMBaseAddress( UInt32 channel,
UInt16 * baseAddr );
virtual void resetBusTimings( void );
virtual void selectIOTiming( ataUnitID unit );
virtual bool setDriveProperty( UInt32 driveUnit,
const char * key,
UInt32 value,
UInt32 numberOfBits);
virtual IOReturn synchronousIO( void );
virtual void initForPM( IOService * provider );
virtual void selectTimingParameter( IOATADevConfig * configRequest,
UInt32 unitNumber );
virtual void programTimingRegisters( void );
virtual void writeTimingIntervalNS( VIATimingReg reg,
UInt32 unit,
UInt32 timeNS );
virtual void writeTimingRegister( VIATimingReg reg,
UInt32 unit,
UInt8 periods );
virtual UInt32 readTimingIntervalNS( VIATimingReg reg, UInt32 unit );
virtual UInt8 readTimingRegister( VIATimingReg reg, UInt32 unit );
virtual void initializeHardware( void );
virtual void dumpVIARegisters( void );
public:
virtual bool start( IOService * provider );
virtual void stop( IOService * provider );
virtual void free( void );
virtual IOWorkLoop * getWorkLoop( void ) const;
virtual IOReturn message( UInt32 type,
IOService * provider,
void * argument );
virtual IOReturn setPowerState( unsigned long stateIndex,
IOService * whatDevice );
virtual bool configureTFPointers( void );
virtual IOReturn provideBusInfo( IOATABusInfo * infoOut );
virtual IOReturn getConfig( IOATADevConfig * configOut,
UInt32 unit );
virtual IOReturn selectConfig( IOATADevConfig * config,
UInt32 unit );
virtual UInt32 scanForDrives( void );
virtual IOReturn handleQueueFlush( void );
virtual bool allocDMAChannel( void );
virtual void initATADMAChains( PRD * descPtr );
virtual IOReturn createChannelCommands( void );
virtual bool freeDMAChannel( void );
};
#endif