IOFireWireAVCUserClient.h [plain text]
#ifndef _IOKIT_IOFIREWIREAVCUSERCLIENT_H
#define _IOKIT_IOFIREWIREAVCUSERCLIENT_H
#include <IOKit/IOUserClient.h>
#include <IOKit/avc/IOFireWireAVCUnit.h>
#include <IOKit/avc/IOFireWireAVCUserClientCommon.h>
class IOFireWireAVCUserClient;
class IOFireWireAVCConnection : public OSObject
{
OSDeclareDefaultStructors(IOFireWireAVCConnection)
public:
UInt32 fPlugAddr;
UInt32 fChannel;
};
class IOFireWireAVCUserClientAsyncCommand : public OSObject
{
OSDeclareDefaultStructors(IOFireWireAVCUserClientAsyncCommand)
public:
IOFireWireAVCAsynchronousCommand *pAsyncCommand;
IOMemoryDescriptor *fMem;
IOFireWireAVCUserClient *pUserClient;
UInt32 commandIdentifierHandle;
};
class IOFireWireAVCUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOFireWireAVCUserClient)
protected:
static IOExternalMethod sMethods[kIOFWAVCUserClientNumCommands];
static IOExternalAsyncMethod sAsyncMethods[kIOFWAVCUserClientNumAsyncCommands];
bool fOpened;
bool fStarted;
task_t fTask;
IOFireWireAVCNub * fUnit;
OSArray * fConnections;
IOLock * fAsyncAVCCmdLock;
OSArray * fUCAsyncCommands;
UInt32 fNextAVCAsyncCommandHandle;
OSAsyncReference fAsyncAVCCmdCallbackInfo;
#ifdef kUseAsyncAVCCommandForBlockingAVCCommand
IOLock *avcCmdLock;
IOFireWireAVCAsynchronousCommand *pCommandObject;
#endif
static void remakeConnections(void *arg);
virtual IOExternalMethod * getTargetAndMethodForIndex(IOService **target, UInt32 index);
virtual IOExternalAsyncMethod * getAsyncTargetAndMethodForIndex(IOService **target, UInt32 index);
virtual IOReturn IOFireWireAVCUserClient::updateP2PCount(UInt32 addr, SInt32 inc, bool failOnBusReset, UInt32 chan, IOFWSpeed speed);
virtual IOReturn makeConnection(UInt32 addr, UInt32 chan, IOFWSpeed speed);
virtual void breakConnection(UInt32 addr);
virtual IOFireWireAVCUserClientAsyncCommand *FindUCAsyncCommandWithHandle(UInt32 commandHandle);
public:
virtual bool initWithTask(task_t owningTask, void * securityToken, UInt32 type,OSDictionary * properties);
virtual void free();
virtual bool start( IOService * provider );
virtual void stop( IOService * provider );
virtual IOReturn message(UInt32 type, IOService *provider, void *argument);
virtual IOReturn clientClose( void );
virtual IOReturn clientDied( void );
virtual IOReturn open( void *, void *, void *, void *, void *, void * );
virtual IOReturn openWithSessionRef( IOFireWireSessionRef sessionRef, void *, void *, void *, void *, void * );
virtual IOReturn getSessionRef( IOFireWireSessionRef * sessionRef, void *, void *, void *, void *, void * );
virtual IOReturn close( void * = 0, void * = 0, void * = 0, void * = 0, void * = 0, void * = 0);
virtual IOReturn AVCCommand(UInt8 * cmd, UInt8 * response, UInt32 len, UInt32 *size);
virtual IOReturn AVCCommandInGen(UInt8 * cmd, UInt8 * response, UInt32 len, UInt32 *size);
virtual IOReturn updateAVCCommandTimeout( void * = 0, void * = 0, void * = 0, void * = 0, void * = 0, void * = 0);
virtual IOReturn makeP2PInputConnection( UInt32 plugNo, UInt32 chan, void * = 0, void * = 0, void * = 0, void * = 0);
virtual IOReturn breakP2PInputConnection( UInt32 plugNo, void * = 0, void * = 0, void * = 0, void * = 0, void * = 0);
virtual IOReturn makeP2POutputConnection( UInt32 plugNo, UInt32 chan, IOFWSpeed speed, void * = 0, void * = 0, void * = 0);
virtual IOReturn breakP2POutputConnection( UInt32 plugNo, void * = 0, void * = 0, void * = 0, void * = 0, void * = 0);
virtual IOReturn installUserLibAsyncAVCCommandCallback(OSAsyncReference asyncRef, void *userRefcon, UInt32 *returnParam);
virtual IOReturn CreateAVCAsyncCommand(UInt8 * cmd, UInt8 * asyncAVCCommandHandle, UInt32 len, UInt32 *refSize);
virtual IOReturn SubmitAVCAsyncCommand(UInt32 commandHandle);
virtual IOReturn CancelAVCAsyncCommand(UInt32 commandHandle);
virtual IOReturn ReleaseAVCAsyncCommand(UInt32 commandHandle);
virtual void HandleUCAsyncCommandCallback(IOFireWireAVCUserClientAsyncCommand *pUCAsyncCommand);
virtual IOReturn ReinitAVCAsyncCommand(UInt32 commandHandle, const UInt8 *pCommandBytes, UInt32 len);
};
#endif // _IOKIT_IOFIREWIREAVCUSERCLIENT_H