#ifndef _IOKIT_IOFIREWIREBUS_H
#define _IOKIT_IOFIREWIREBUS_H
#include <IOKit/IOService.h>
#include <IOKit/firewire/IOFWIsochChannel.h>
#include <IOKit/firewire/IOFWAddressSpace.h>
#include <IOKit/firewire/IOFWCommand.h>
#include <IOKit/firewire/IOFireWireFamilyCommon.h>
extern const OSSymbol *gFireWireROM;
extern const OSSymbol *gFireWireNodeID;
extern const OSSymbol *gFireWireSelfIDs;
extern const OSSymbol *gFireWireSpeed;
extern const OSSymbol *gFireWireUnit_Spec_ID;
extern const OSSymbol *gFireWireUnit_SW_Version;
extern const OSSymbol *gFireWireVendor_ID;
extern const OSSymbol *gFireWire_GUID;
extern const OSSymbol *gFireWireVendor_Name;
extern const OSSymbol *gFireWireProduct_Name;
extern const OSSymbol *gFireWireModel_ID;
class IOFireWireDevice;
class IOLocalConfigDirectory;
class IOFWLocalIsochPort;
class IOFireWirePowerManager;
class IOFireWireBus;
class IOFWDCLPool ;
#pragma mark -
class IOFWBufferFillIsochPort ;
class IOFireWireBusAux : public OSObject
{
OSDeclareAbstractStructors(IOFireWireBusAux)
friend class IOFireWireBus;
protected:
struct ExpansionData { };
ExpansionData * reserved;
public :
virtual IOFWDCLPool * createDCLPool ( unsigned capacity ) const = 0 ;
virtual IOFWBufferFillIsochPort * createBufferFillIsochPort() const = 0 ;
virtual UInt8 getMaxRec( void ) = 0;
private:
OSMetaClassDeclareReservedUsed(IOFireWireBusAux, 0);
OSMetaClassDeclareReservedUsed(IOFireWireBusAux, 1);
OSMetaClassDeclareReservedUsed(IOFireWireBusAux, 2);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 3);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 4);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 5);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 6);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 7);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 8);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 9);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 10);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 11);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 12);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 13);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 14);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 15);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 16);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 17);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 18);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 19);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 20);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 21);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 22);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 23);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 24);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 25);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 26);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 27);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 28);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 29);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 30);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 31);
};
#pragma mark -
class IOFireWireBus : public IOService
{
OSDeclareAbstractStructors(IOFireWireBus)
public:
struct DCLTaskInfoAux
{
unsigned version ;
union {
struct {
IOMemoryMap * bufferMemoryMap ; } v0 ;
struct {
IOMemoryMap * bufferMemoryMap ;
IOWorkLoop * workloop ; } v1 ;
struct
{
IOMemoryMap * bufferMemoryMap ;
IOWorkLoop * workloop ; IOFWIsochPortOptions options ; } v2 ;
} u ;
} ;
struct DCLTaskInfo
{
task_t unused0 ;
vm_address_t unused1 ;
UInt32 unused2 ;
vm_address_t unused3 ;
UInt32 unused4 ;
void (*unused5)(void) ;
DCLTaskInfoAux * auxInfo ; } ;
static const IORegistryPlane * gIOFireWirePlane;
IOFireWireBusAux * fAuxiliary;
virtual IOFWIsochChannel *createIsochChannel(
bool doIRM, UInt32 bandwidth, IOFWSpeed prefSpeed,
IOFWIsochChannel::ForceStopNotificationProc stopProc=NULL,
void *stopRefCon=NULL) = 0;
virtual IOFWLocalIsochPort *createLocalIsochPort(bool talking,
DCLCommand *opcodes, DCLTaskInfo *info = 0,
UInt32 startEvent = 0, UInt32 startState = 0, UInt32 startMask = 0) = 0;
virtual IOReturn getCycleTime(UInt32 &cycleTime) = 0;
virtual IOReturn getBusCycleTime(UInt32 &busTime, UInt32 &cycleTime) = 0;
virtual IOReturn AddUnitDirectory(IOLocalConfigDirectory *unitDir) = 0;
virtual IOReturn RemoveUnitDirectory(IOLocalConfigDirectory *unitDir) = 0;
virtual IOReturn resetBus() = 0;
virtual IOFireWireDevice * nodeIDtoDevice(UInt32 generation, UInt16 nodeID) = 0;
virtual IOFWDelayCommand * createDelayedCmd(UInt32 uSecDelay, FWBusCallback func, void *refcon) = 0;
virtual IOFWPhysicalAddressSpace *createPhysicalAddressSpace(IOMemoryDescriptor *mem) = 0;
virtual IOFWPseudoAddressSpace *createPseudoAddressSpace(FWAddress *addr, UInt32 len,
FWReadCallback reader, FWWriteCallback writer, void *refcon) = 0;
virtual bool isLockRequest(IOFWRequestRefCon refcon) = 0;
virtual bool isQuadRequest(IOFWRequestRefCon refcon) = 0;
virtual UInt32 getExtendedTCode(IOFWRequestRefCon refcon) = 0;
virtual int maxPackLog ( bool forSend, UInt16 nodeAddress) const = 0;
virtual int maxPackLog ( UInt16 nodeA, UInt16 nodeB) const = 0;
virtual IOReturn makeRoot ( UInt32 generation, UInt16 nodeID) = 0;
virtual IOFWPseudoAddressSpace * createInitialAddressSpace ( UInt32 addressLo, UInt32 len,
FWReadCallback reader, FWWriteCallback writer, void *refcon) = 0;
virtual IOFWAddressSpace * getAddressSpace(FWAddress address) = 0;
virtual bool isCompleteRequest(IOFWRequestRefCon refcon) = 0;
virtual IOFWAsyncStreamCommand * createAsyncStreamCommand( UInt32 generation,
UInt32 channel, UInt32 sync, UInt32 tag, IOMemoryDescriptor *hostMem,
UInt32 size, int speed,FWAsyncStreamCallback completion=NULL, void *refcon=NULL) = 0;
virtual UInt32 hopCount(UInt16 nodeAAddress, UInt16 nodeBAddress ) = 0;
virtual UInt32 hopCount(UInt16 nodeAAddress ) = 0;
virtual IOFireWirePowerManager * getBusPowerManager( void ) = 0;
protected:
virtual IOFireWireBusAux * createAuxiliary( void ) = 0;
public :
inline IOFWDCLPool * createDCLPool ( UInt32 capacity = 0 ) { return fAuxiliary->createDCLPool ( capacity ) ; }
inline UInt8 getMaxRec( void ) { return fAuxiliary->getMaxRec(); }
IOFWBufferFillIsochPort * createBufferFillIsochPort() ;
private:
OSMetaClassDeclareReservedUsed(IOFireWireBus, 0);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 1);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 2);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 3);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 4);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 5);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 6);
OSMetaClassDeclareReservedUsed(IOFireWireBus, 7);
};
#endif