AppleIntelPIIXATADriver.h [plain text]
#ifndef _APPLEINTELPIIXATADRIVER_H
#define _APPLEINTELPIIXATADRIVER_H
#include <IOKit/IOInterruptEventSource.h>
#include <IOKit/ata/IOPCIATA.h>
#include <IOKit/pci/IOPCIDevice.h>
#include "AppleIntelPIIXATATiming.h"
class AppleIntelPIIXATADriver : public IOPCIATA
{
OSDeclareDefaultStructors( AppleIntelPIIXATADriver )
private:
static const UInt32 kMaxDrives = 2;
UInt16 _irq;
UInt16 _ioPorts;
UInt16 _ioBMOffset;
UInt16 _channel;
IOPCIDevice * _pciDevice;
IOInterruptEventSource * _intSrc;
AppleIntelPIIXATAController * _provider;
const PIIXTiming * _pioTiming[ kMaxDrives ];
const PIIXTiming * _dmaTiming[ kMaxDrives ];
const PIIXUDMATiming * _udmaTiming[ kMaxDrives ];
UInt16 _idetim[ kMaxDrives ];
UInt8 _sidetim;
UInt8 _udmactl;
UInt16 _udmatim;
UInt16 _ideConfig;
static void interruptOccurred( OSObject * owner,
IOInterruptEventSource * src,
int count );
protected:
virtual bool configurePCIDevice( IOPCIDevice * device,
UInt16 channel );
virtual bool getBMBaseAddress( IOPCIDevice * provider,
UInt16 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( UInt8 driveUnit,
const char * key,
UInt64 value,
UInt numberOfBits);
public:
virtual bool start( IOService * provider );
virtual void free();
virtual IOWorkLoop * getWorkLoop() const;
virtual IOReturn message( UInt32 type,
IOService * provider,
void * argument );
virtual bool configureTFPointers();
virtual IOReturn provideBusInfo( IOATABusInfo * infoOut );
virtual IOReturn getConfig( IOATADevConfig * configOut,
UInt32 unit );
virtual IOReturn selectConfig( IOATADevConfig * config,
UInt32 unit );
virtual UInt32 scanForDrives();
virtual IOReturn handleQueueFlush();
};
#endif