IOFWUserIsochPort.h [plain text]
#ifndef _IOKIT_IOFWUserIsochPortProxy_H
#define _IOKIT_IOFWUserIsochPortProxy_H
#import "IOFireWireLibPriv.h"
#import <IOKit/firewire/IOFWLocalIsochPort.h>
#import <IOKit/IOLocks.h>
#import <IOKit/OSMessageNotification.h>
#pragma mark -
class IODCLProgram ;
class IOBufferMemoryDescriptor ;
class IOFireWireUserClient ;
class IOFWDCLPool ;
class IOFWUserLocalIsochPort : public IOFWLocalIsochPort
{
OSDeclareDefaultStructors( IOFWUserLocalIsochPort )
typedef ::IOFireWireLib::LocalIsochPortAllocateParams AllocateParams ;
protected:
IORecursiveLock* fLock ;
void* fUserObj ;
IOFireWireUserClient * fUserClient ;
unsigned fProgramCount ;
DCLCommand ** fDCLTable ; OSAsyncReference fStopTokenAsyncRef ;
UInt8* fProgramBuffer ; IOFWDCLPool * fDCLPool ; bool fStarted ;
public:
virtual void free () ;
#if IOFIREWIREDEBUG > 0
virtual bool serialize( OSSerialize * s ) const ;
#endif
virtual IOReturn getSupported ( IOFWSpeed & maxSpeed,
UInt64 & chanSupported ) ;
virtual IOReturn start () ;
virtual IOReturn stop () ;
bool initWithUserDCLProgram (
AllocateParams * params,
IOFireWireUserClient & userclient,
IOFireWireController & controller ) ;
IOReturn importUserProgram (
IOMemoryDescriptor * userExportDesc,
unsigned bufferRangeCount,
IOVirtualRange userBufferRanges [],
IOMemoryMap * bufferMap ) ;
static void s_dclCallProcHandler (
DCLCallProc * dcl ) ;
IOReturn setAsyncRef_DCLCallProc (
OSAsyncReference asyncRef ) ;
IOReturn modifyJumpDCL (
UInt32 jumpCompilerData,
UInt32 labelCompilerData ) ;
IOReturn modifyDCLSize (
UInt32 compilerData,
IOByteCount newSize ) ;
inline void lock () { IORecursiveLockLock ( fLock ) ; }
inline void unlock () { IORecursiveLockUnlock ( fLock ) ; }
IOReturn convertToKernelDCL ( DCLUpdateDCLList * dcl ) ;
IOReturn convertToKernelDCL ( DCLJump * dcl ) ;
IOReturn convertToKernelDCL ( DCLCallProc * dcl ) ;
void exporterCleanup () ;
static void s_nuDCLCallout( void * refcon ) ;
IOReturn userNotify (
UInt32 notificationType,
UInt32 numDCLs,
void * data,
IOByteCount dataSize ) ;
IOWorkLoop * createRealtimeThread() ;
} ;
#endif //_IOKIT_IOFWUserIsochPortProxy_H