#ifndef _IOKIT_IOFWDCLPROGRAM_H
#define _IOKIT_IOFWDCLPROGRAM_H
#include <libkern/c++/OSObject.h>
#include <IOKit/firewire/IOFireWireFamilyCommon.h>
#include <IOKit/firewire/IOFireWireBus.h>
#include <IOKit/IOMemoryCursor.h>
class IODCLProgram : public OSObject
{
OSDeclareAbstractStructors(IODCLProgram)
protected:
void * reserved0 ; void * reserved1 ; void * reserved2 ; void * reserved3 ; IOMemoryMap * fBufferMem ;
void * reserved5 ;
struct ExpansionData
{
IOFWIsochResourceFlags resourceFlags ;
};
ExpansionData * fExpansionData ;
public :
virtual void setIsochResourceFlags ( IOFWIsochResourceFlags flags ) ; IOFWIsochResourceFlags getIsochResourceFlags () const ;
protected:
virtual void free () ;
public:
virtual bool init ( IOFireWireBus :: DCLTaskInfo * info = NULL ) ;
virtual IOReturn allocateHW (
IOFWSpeed speed,
UInt32 chan) = 0;
virtual IOReturn releaseHW () = 0;
virtual IOReturn compile (
IOFWSpeed speed,
UInt32 chan) = 0;
virtual IOReturn notify (
IOFWDCLNotificationType notificationType,
DCLCommand ** dclCommandList,
UInt32 numDCLCommands ) = 0;
virtual IOReturn start () = 0;
virtual void stop () = 0;
virtual IOReturn pause ();
virtual IOReturn resume ();
virtual void setForceStopProc(
IOFWIsochChannel::ForceStopNotificationProc proc,
void * refCon,
IOFWIsochChannel * channel ) ;
protected :
IOMemoryMap * generateBufferMap( DCLCommand * program ) ;
IOReturn virtualToPhysical(
IOVirtualRange ranges[],
unsigned rangeCount,
IOMemoryCursor::IOPhysicalSegment outSegments[],
unsigned & outPhysicalSegmentCount,
unsigned maxSegments ) ;
public :
IOMemoryMap * getBufferMap() const ;
private:
OSMetaClassDeclareReservedUsed(IODCLProgram, 0);
OSMetaClassDeclareReservedUnused(IODCLProgram, 1);
OSMetaClassDeclareReservedUnused(IODCLProgram, 2);
OSMetaClassDeclareReservedUnused(IODCLProgram, 3);
OSMetaClassDeclareReservedUnused(IODCLProgram, 4);
};
#endif