AppleIntelPIIXPATA.h [plain text]
#ifndef _APPLEINTELPIIXPATA_H
#define _APPLEINTELPIIXPATA_H
#include <IOKit/IOFilterInterruptEventSource.h>
#include <IOKit/pci/IOPCIDevice.h>
#include <IOKit/ata/IOATATypes.h>
#include <IOKit/ata/IOPCIATA.h>
#include <IOKit/ata/IOATAController.h>
#include <IOKit/ata/ATADeviceNub.h>
#include "AppleIntelPIIXATATiming.h"
#include "AppleIntelPIIXATAHW.h"
#include "AppleIntelPIIXATAKeys.h"
#include "AppleIntelPIIXATAChannel.h"
class AppleIntelPIIXPATA : public IOPCIATA
{
OSDeclareDefaultStructors( AppleIntelPIIXPATA )
protected:
static const UInt32 kMaxDrives = 2;
UInt16 _cmdBlock;
UInt16 _ctrBlock;
UInt16 _ioBMOffset;
UInt32 _channel;
IOPCIDevice * _pciDevice;
IOInterruptEventSource * _intSrc;
AppleIntelPIIXATAChannel * _provider;
const PIIXTiming * _pioTiming[ kMaxDrives ];
const PIIXTiming * _dmaTiming[ kMaxDrives ];
const PIIXUDMATiming * _udmaTiming[ kMaxDrives ];
UInt16 _idetim[ kMaxDrives ];
UInt8 _sidetim;
UInt8 _udmactl;
UInt16 _udmatim;
UInt16 _ideConfig;
bool _initTimingRegisters;
static void interruptOccurred( OSObject * owner,
IOInterruptEventSource * src,
int count );
static bool interruptFilter( OSObject * owner,
IOFilterInterruptEventSource * src );
virtual bool configurePCIDevice( IOPCIDevice * device,
UInt32 channel );
virtual bool getBMBaseAddress( IOPCIDevice * provider,
UInt32 channel,
UInt16 * addrOut );
virtual void resetTimingsForDevice( ataUnitID unit );
virtual void writeTimingRegisters( ataUnitID unit = kATADevice0DeviceID );
virtual void computeUDMATimingRegisters( ataUnitID unit );
virtual void computeTimingRegisters( ataUnitID unit );
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 );
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