#ifndef _APPLE_KIWI_ATA_
#define _APPLE_KIWI_ATA_
#include <IOKit/IOTypes.h>
#include <IOKit/pci/IOPCIDevice.h>
#include <IOKit/ata/IOATATypes.h>
#include <IOKit/ata/IOATABusInfo.h>
#include <IOKit/ata/IOPCIATA.h>
#include <IOKit/ppc/IODBDMA.h>
#include <IOKit/IOMemoryCursor.h>
#include <IOKit/IOFilterInterruptEventSource.h>
#include "AppleKiwiRoot.h"
class AppleKiwiATA : public IOPCIATA
{
OSDeclareDefaultStructors(AppleKiwiATA)
public:
virtual bool init(OSDictionary* properties);
virtual IOService* probe( IOService* provider, SInt32* score );
virtual bool start( IOService* provider );
virtual IOWorkLoop* getWorkLoop() const;
virtual IOReturn selectConfig( IOATADevConfig* configRequest, UInt32 unitNumber);
virtual IOReturn getConfig( IOATADevConfig* configRequest, UInt32 unitNumber);
virtual IOReturn provideBusInfo( IOATABusInfo* infoOut);
virtual IOReturn message (UInt32 type, IOService* provider, void* argument = 0);
virtual void getLock(bool lock);
protected:
struct ATABusTimings
{
UInt8 ataPIOSpeedMode; UInt16 ataPIOCycleTime; UInt8 ataMultiDMASpeed; UInt16 ataMultiCycleTime; UInt16 ataUltraDMASpeedMode; };
ATABusTimings busTimings[2];
IOMemoryMap* ioBaseAddrMap[4];
UInt32 busChildNumber;
bool isBusOnline;
AppleKiwiRoot* chipRoot;
IOInterruptEventSource* _devIntSrc;
volatile UInt32* globalControlReg; volatile UInt32* timingAReg0;
volatile UInt32* timingBReg0;
volatile UInt32* timingAReg1;
volatile UInt32* timingBReg1;
bool forcePCIInline;
bool mode6Capable;
bool reconfigureTiming;
virtual IOReturn selectIOTimerValue( IOATADevConfig* configRequest, UInt32 unitNumber);
virtual void selectIOTiming( ataUnitID unit );
virtual bool configureTFPointers(void);
virtual bool createDeviceInterrupt(void);
static void sDeviceInterruptOccurred(OSObject*, IOInterruptEventSource *, int count);
virtual IOReturn handleDeviceInterrupt(void);
bool interruptIsValid( IOFilterInterruptEventSource* source);
virtual void handleTimeout( void );
virtual IOReturn startDMA( void );
virtual IOReturn issueCommand( void );
virtual IOReturn executeCommand(IOATADevice* nub, IOATABusCommand* command); virtual IOReturn handleCommand( void* param0, void* param1, void* param2,void* param3 );
virtual IOReturn handleQueueFlush( void ); virtual bool checkTimeout( void ); static void cleanUpAction(OSObject * owner, void*, void*, void*, void*); virtual void cleanUpBus(void);
virtual void free();
};
#endif // _APPLE_KIWI_ATA_