ATASMARTUserClient.h [plain text]
#ifndef _IOKIT_ATA_SMART_USER_CLIENT_H_
#define _IOKIT_ATA_SMART_USER_CLIENT_H_
#if defined(KERNEL) && defined(__cplusplus)
#include <IOKit/IOLib.h>
#include <IOKit/IOUserClient.h>
#include "ATASMARTLib.h"
#include "ATASMARTLibPriv.h"
#include "IOATABlockStorageDevice.h"
#include <IOKit/ata/IOATACommand.h>
class ATASMARTUserClient;
struct ATASMARTRefCon
{
ATASMARTUserClient * self;
bool isDone;
bool sleepOnIt;
};
typedef struct ATASMARTRefCon ATASMARTRefCon;
class ATASMARTUserClient : public IOUserClient
{
OSDeclareDefaultStructors ( ATASMARTUserClient );
public:
virtual bool initWithTask ( task_t owningTask, void * securityToken, UInt32 type );
virtual bool init ( OSDictionary * dictionary = 0 );
virtual bool start ( IOService * provider );
virtual void free ( void );
virtual IOReturn message ( UInt32 type, IOService * provider, void * arg );
virtual IOReturn clientClose ( void );
virtual IOReturn clientDied ( void );
virtual IOReturn EnableDisableOperations ( UInt32 enable );
virtual IOReturn EnableDisableAutoSave ( UInt32 enable );
virtual IOReturn ReturnStatus ( UInt32 * exceedsCondition );
virtual IOReturn ExecuteOfflineImmediate ( UInt32 extendedTest );
virtual IOReturn ReadData ( vm_address_t data );
virtual IOReturn ReadDataThresholds ( vm_address_t data );
virtual IOReturn ReadLogAtAddress ( ATASMARTReadLogStruct * readLogData,
UInt32 inStructSize );
virtual IOReturn WriteLogAtAddress ( ATASMARTWriteLogStruct * writeLogData,
UInt32 inStructSize );
protected:
static IOExternalMethod sMethods[kIOATASMARTMethodCount];
static IOReturn sWaitForCommand ( void * userClient, IOATACommand * command );
static void sCommandCallback ( IOATACommand * command );
virtual IOReturn GatedWaitForCommand ( IOATACommand * command );
virtual void CommandCallback ( IOATACommand * command );
task_t fTask;
IOATABlockStorageDevice * fProvider;
IOCommandGate * fCommandGate;
UInt32 fOutstandingCommands;
virtual IOExternalMethod * getTargetAndMethodForIndex ( IOService ** target,
UInt32 index );
virtual IOReturn HandleTerminate ( IOService * provider );
virtual IOReturn SendSMARTCommand ( IOATACommand * command );
virtual IOATACommand * AllocateCommand ( void );
virtual void DeallocateCommand ( IOATACommand * command );
};
#endif
#endif