#import <IOKit/firewire/IOFireWireFamilyCommon.h>
#import <libkern/c++/OSObject.h>
#import <libkern/c++/OSSet.h>
#import <IOKit/IOTypes.h>
class IODCLProgram ;
class OSIterator ;
class IOFireWireLink ;
class IOMemoryMap ;
class IOFWDCL : public OSObject
{
OSDeclareAbstractStructors( IOFWDCL ) ;
public:
typedef void (*Callback)( void * refcon ) ;
enum
{
kDynamic = BIT(1) ,kUpdateBeforeCallback = BIT(2) ,kUser = BIT(18) } ;
class InternalData {} ;
protected:
IOFWDCL* fBranch ;
Callback fCallback ;
UInt32* fTimeStampPtr ;
UInt32 fRangeCount ;
IOVirtualRange * fRanges ;
OSSet* fUpdateList ;
OSIterator * fUpdateIterator ;
UInt32* fUserStatusPtr ;
void* fRefcon ;
UInt32 fFlags ;
InternalData * fLoLevel ;
public:
virtual bool initWithRanges (
OSSet * updateSet,
unsigned rangesCount = 0,
IOVirtualRange ranges [] = NULL ) ;
void setBranch( IOFWDCL* branch ) ;
IOFWDCL* getBranch() const ;
void setTimeStampPtr ( UInt32* timeStampPtr ) ;
UInt32* getTimeStampPtr () const ;
void setCallback( Callback callback ) ;
Callback getCallback() const ;
void setStatusPtr( UInt32* statusPtr ) ;
UInt32* getStatusPtr() const ;
void setRefcon( void * refcon ) ;
void * getRefcon() const ;
const OSSet* getUpdateList() const ;
virtual IOReturn addRange ( IOVirtualRange& range ) ;
virtual IOReturn setRanges ( UInt32 numRanges, IOVirtualRange ranges[] ) ;
virtual UInt32 getRanges( UInt32 maxRanges, IOVirtualRange ranges[] ) const ;
virtual UInt32 countRanges() ;
virtual IOReturn getSpan( IOVirtualRange& result ) const ;
virtual IOByteCount getSize() const ;
IOReturn appendUpdateList( IOFWDCL* updateDCL ) ;
IOReturn setUpdateList( OSSet* updateList ) ;
void emptyUpdateList() ;
void setFlags( UInt32 flags ) ;
UInt32 getFlags() const ;
virtual void update() = 0 ;
virtual void free () ;
public:
virtual IOReturn compile( IODCLProgram & , bool & ) = 0 ;
virtual void link () = 0 ;
virtual void relink ( IOFWDCL * ) = 0 ;
virtual bool interrupt( bool &, IOFWDCL * & ) = 0 ;
virtual void finalize ( IODCLProgram & ) ;
virtual IOReturn importUserDCL (
UInt8 * data,
IOByteCount & dataSize,
IOMemoryMap * bufferMap,
const OSArray * dcl ) ;
protected :
friend class IOFWDCLFriend ;
public :
virtual void debug() ;
OSMetaClassDeclareReservedUnused ( IOFWDCL, 0 ) ;
OSMetaClassDeclareReservedUnused ( IOFWDCL, 1 ) ;
OSMetaClassDeclareReservedUnused ( IOFWDCL, 2 ) ;
OSMetaClassDeclareReservedUnused ( IOFWDCL, 3 ) ;
} ;
#pragma mark -
class IOFWReceiveDCL : public IOFWDCL
{
OSDeclareAbstractStructors( IOFWReceiveDCL )
protected :
UInt8 fHeaderBytes ;
bool fWait ;
public:
virtual bool initWithParams(
OSSet * updateSet,
UInt8 headerBytes,
unsigned rangesCount,
IOVirtualRange ranges [] ) ;
IOReturn setWaitControl( bool wait ) ;
public :
virtual IOReturn importUserDCL (
UInt8 * data,
IOByteCount & dataSize,
IOMemoryMap * bufferMap,
const OSArray * dcl ) ;
protected :
virtual void debug() ;
} ;
#pragma mark -
class IOFWSendDCL : public IOFWDCL
{
OSDeclareAbstractStructors( IOFWSendDCL )
protected:
UInt32 * fUserHeaderPtr ; UInt32 * fUserHeaderMaskPtr ; IOFWDCL * fSkipBranchDCL ;
Callback fSkipCallback ;
void * fSkipRefcon ;
UInt8 fSync ;
UInt8 fTag ;
public:
virtual void free() ;
virtual IOReturn addRange ( IOVirtualRange& range ) ;
virtual IOReturn setRanges ( UInt32 numRanges, IOVirtualRange ranges[] ) ;
virtual bool initWithParams( OSSet * updateSet,
unsigned rangesCount = 0,
IOVirtualRange ranges [] = NULL,
UInt8 sync = 0,
UInt8 tag = 0 ) ;
void setUserHeaderPtr( UInt32* userHeaderPtr, UInt32 * maskPtr ) ;
UInt32 * getUserHeaderPtr() ;
UInt32 * getUserHeaderMask() ;
void setSkipBranch( IOFWDCL * skipBranchDCL ) ;
IOFWDCL * getSkipBranch() const ;
void setSkipCallback( Callback callback ) ;
Callback getSkipCallback() const ;
void setSkipRefcon( void * refcon = 0 ) ;
void * getSkipRefcon() const ;
void setSync( UInt8 sync ) ;
UInt8 getSync() const ;
void setTag( UInt8 tag ) ;
UInt8 getTag() const ;
public :
virtual IOReturn importUserDCL (
UInt8 * data,
IOByteCount & dataSize,
IOMemoryMap * bufferMap,
const OSArray * dcl ) ;
protected :
virtual void debug() ;
} ;
#pragma mark -
class IOFWSkipCycleDCL : public IOFWDCL
{
OSDeclareAbstractStructors( IOFWSkipCycleDCL )
public:
virtual bool init() ;
virtual IOReturn addRange ( IOVirtualRange& range ) ;
virtual IOReturn setRanges ( UInt32 numRanges, IOVirtualRange ranges[] ) ;
virtual IOReturn getSpan( IOVirtualRange& result ) ;
protected :
virtual void debug() ;
} ;