#if defined(__ppc__)
#ifndef _DRV_MACIO_ATA_H
#define _DRV_MACIO_ATA_H
#include <libkern/c++/OSObject.h>
#include <IOKit/IOTypes.h>
#include "IOATAController.h"
#include <IOKit/ppc/IODBDMA.h>
#include <IOKit/IOMemoryCursor.h>
#include <IOKit/IOInterruptEventSource.h>
class MacIOATA : public IOATAController
{
OSDeclareDefaultStructors(MacIOATA);
public:
virtual bool init(OSDictionary * properties);
virtual bool start( IOService* provider );
virtual IOReturn message (UInt32 type, IOService* provider, void* argument = 0);
protected:
enum ATADMAState
{
kATADMAInactive,
kATADMAStarting,
kATADMAActive,
kATADMAStatus,
kATADMAComplete,
kATADMAError
};
volatile UInt32* _timingConfigReg;
UInt32 _timingConfig[2];
UInt32 _dmaState;
UInt32 _dmaIntExpected;
volatile IODBDMAChannelRegisters* _dmaControlReg;
IOMemoryMap* _baseAddressMap;
IOMemoryMap* _dmaBaseMap;
IODBDMAMemoryCursor* _DMACursor;
IODBDMADescriptor* _descriptors;
IOPhysicalAddress _descriptorsPhysical;
IOInterruptEventSource* _devIntSrc;
IOInterruptEventSource* _dmaIntSrc;
bool _resyncInterrupts;
struct ExpansionData { };
ExpansionData *reserved;
virtual IOReturn handleDeviceInterrupt(void);
virtual IOReturn asyncStatus(void);
virtual void handleTimeout(void);
virtual bool configureTFPointers(void);
virtual bool allocDMAChannel(void);
virtual void initATADMAChains (IODBDMADescriptor* descPtr);
virtual IOReturn createChannelCommands(void);
virtual bool freeDMAChannel(void);
virtual bool createDeviceInterrupt(void);
virtual bool createDMAInterrupt(void);
virtual IOReturn startDMA( void );
virtual IOReturn stopDMA( void );
virtual void processDMAInterrupt (void);
virtual void activateDMAEngine(void);
virtual void stopDMAEngine(void);
virtual void shutDownATADMA (void);
virtual bool scanATADMAChain (IOByteCount* byteCount);
static void deviceInterruptOccurred(OSObject*, IOInterruptEventSource *, int count);
static void dmaInterruptOccurred(OSObject*, IOInterruptEventSource *, int count);
virtual void free();
bool isMediaBay;
bool isBusOnline;
virtual IOReturn executeCommand(IOATADevice* nub, IOATABusCommand* command);
virtual IOReturn handleQueueFlush( void );
virtual bool checkTimeout( void );
static void cleanUpAction(OSObject * owner, void*, void*, void*, void*);
virtual void cleanUpBus(void);
virtual IOReturn handleBusReset(void);
private:
OSMetaClassDeclareReservedUnused(MacIOATA, 0);
OSMetaClassDeclareReservedUnused(MacIOATA, 1);
OSMetaClassDeclareReservedUnused(MacIOATA, 2);
OSMetaClassDeclareReservedUnused(MacIOATA, 3);
OSMetaClassDeclareReservedUnused(MacIOATA, 4);
OSMetaClassDeclareReservedUnused(MacIOATA, 5);
OSMetaClassDeclareReservedUnused(MacIOATA, 6);
OSMetaClassDeclareReservedUnused(MacIOATA, 7);
OSMetaClassDeclareReservedUnused(MacIOATA, 8);
OSMetaClassDeclareReservedUnused(MacIOATA, 9);
OSMetaClassDeclareReservedUnused(MacIOATA, 10);
OSMetaClassDeclareReservedUnused(MacIOATA, 11);
OSMetaClassDeclareReservedUnused(MacIOATA, 12);
OSMetaClassDeclareReservedUnused(MacIOATA, 13);
OSMetaClassDeclareReservedUnused(MacIOATA, 14);
OSMetaClassDeclareReservedUnused(MacIOATA, 15);
OSMetaClassDeclareReservedUnused(MacIOATA, 16);
OSMetaClassDeclareReservedUnused(MacIOATA, 17);
OSMetaClassDeclareReservedUnused(MacIOATA, 18);
OSMetaClassDeclareReservedUnused(MacIOATA, 19);
OSMetaClassDeclareReservedUnused(MacIOATA, 20);
};
#endif // _DRV_MACIO_ATA_H
#endif // defined(ppc)