#import <IOKit/firewire/IOFWCommand.h>
#import "IOFireWireUserClient.h"
#import <libkern/c++/OSObject.h>
class IOFWUserVectorCommand;
class IOFWUserCommand: public OSObject
{
OSDeclareAbstractStructors(IOFWUserCommand)
public:
static IOFWUserCommand* withSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient) ;
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient ) ;
virtual void free() ;
virtual void setAsyncReference64(
OSAsyncReference64 inAsyncRef) ;
OSAsyncReference64 * getAsyncReference64( void ) { return &fAsyncRef; }
static void asyncReadWriteCommandCompletion(
void * refcon,
IOReturn status,
IOFireWireNub * device,
IOFWCommand * fwCmd) ;
static void asyncReadQuadletCommandCompletion(
void * refcon,
IOReturn status,
IOFireWireNub * device,
IOFWCommand * fwCmd) ;
virtual IOReturn submit(
CommandSubmitParams* inParams,
CommandSubmitResult* outResult) = 0 ;
void setFlush( bool flush )
{ fFlush = flush; }
void setRefCon( mach_vm_address_t refcon )
{ fRefCon = refcon; }
mach_vm_address_t getRefCon( void )
{ return fRefCon; }
void setVectorCommand( IOFWUserVectorCommand * vector )
{ fVectorCommand = vector; }
virtual IOFWAsyncCommand * getAsyncCommand( void ) { return fCommand; }
protected:
OSAsyncReference64 fAsyncRef ;
IOFWAsyncCommand* fCommand ;
const IOFireWireUserClient* fUserClient ;
IOMemoryDescriptor* fMem ;
UInt32 * fOutputArgs;
UInt32 fOutputArgsSize;
UInt32 * fQuads ;
UInt32 fNumQuads ;
Boolean fCopyFlag ;
bool fFlush;
mach_vm_address_t fRefCon;
IOFWUserVectorCommand * fVectorCommand;
} ;
class IOFWUserReadCommand: public IOFWUserCommand
{
OSDeclareDefaultStructors(IOFWUserReadCommand)
public:
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient ) ;
virtual IOReturn submit(
CommandSubmitParams* inParams,
CommandSubmitResult* outResult) ;
} ;
class IOFWUserWriteCommand: public IOFWUserCommand
{
OSDeclareDefaultStructors(IOFWUserWriteCommand)
public:
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient ) ;
virtual IOReturn submit(
CommandSubmitParams* inParams,
CommandSubmitResult* outResult) ;
} ;
class IOFWUserPHYCommand: public IOFWUserCommand
{
OSDeclareDefaultStructors(IOFWUserPHYCommand)
protected:
IOFWAsyncPHYCommand * fPHYCommand;
static void asyncPHYCommandCompletion( void * refcon,
IOReturn status,
IOFireWireBus * device,
IOFWAsyncPHYCommand * fwCmd );
public:
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient );
virtual void free();
virtual IOReturn submit(
CommandSubmitParams* inParams,
CommandSubmitResult* outResult);
virtual IOFWAsyncPHYCommand * getAsyncPHYCommand( void ) { return fPHYCommand; }
};
class IOFWUserCompareSwapCommand: public IOFWUserCommand
{
OSDeclareDefaultStructors(IOFWUserCompareSwapCommand)
public:
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient ) ;
virtual IOReturn submit( CommandSubmitParams* params, CommandSubmitResult* result ) ;
IOReturn submit( CommandSubmitParams* params, CompareSwapSubmitResult* result ) ;
static void asyncCompletion( void* refcon, IOReturn status, IOFireWireNub* device,
IOFWCommand* fwCmd) ;
protected:
IOByteCount fSize ;
} ;
class IOFWUserAsyncStreamCommand: public IOFWUserCommand
{
OSDeclareDefaultStructors(IOFWUserAsyncStreamCommand)
protected:
IOFWAsyncStreamCommand * fAsyncStreamCommand;
static void asyncStreamCommandCompletion(void *refcon,
IOReturn status,
IOFireWireBus *bus,
IOFWAsyncStreamCommand *fwCmd );
public:
virtual bool initWithSubmitParams(
const CommandSubmitParams* inParams,
const IOFireWireUserClient* inUserClient );
virtual void free();
virtual IOReturn submit(
CommandSubmitParams* inParams,
CommandSubmitResult* outResult);
virtual IOFWAsyncStreamCommand * getAsyncStreamCommand( void ) { return fAsyncStreamCommand; }
};