#ifndef _IOKIT_IOFIREWIRENUB_H
#define _IOKIT_IOFIREWIRENUB_H
#include <IOKit/IOService.h>
#include <IOKit/firewire/IOFWCommand.h>
#include <IOKit/firewire/IOFWAddressSpace.h>
class IOFireWireController;
class IOFireWireBus;
class IOConfigDirectory;
class IOFireWireNub;
class IOFireWireDevice;
class IOFireWireUnit;
class IOFWSimplePhysicalAddressSpace;
class IOFWSimpleContiguousPhysicalAddressSpace;
enum TerminationState
{
kNotTerminated = 0,
kNeedsTermination,
kTerminated
};
#pragma mark -
class IOFireWireNubAux : public OSObject
{
OSDeclareDefaultStructors(IOFireWireNubAux)
friend class IOFireWireNub;
protected:
IOFireWireNub * fPrimary;
TerminationState fTerminationState;
struct ExpansionData { };
ExpansionData * reserved;
virtual bool init( IOFireWireNub * primary );
virtual void free();
virtual UInt32 hopCount( IOFireWireNub * nub );
virtual UInt32 hopCount( void );
virtual TerminationState getTerminationState( void );
virtual void setTerminationState( TerminationState state );
virtual bool isPhysicalAccessEnabled( void );
virtual IOFWSimpleContiguousPhysicalAddressSpace * createSimpleContiguousPhysicalAddressSpace( vm_size_t size, IODirection direction );
virtual IOFWSimplePhysicalAddressSpace * createSimplePhysicalAddressSpace( vm_size_t size, IODirection direction );
private:
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 0);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 1);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 2);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 3);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 4);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 5);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 6);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 7);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 8);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 9);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 10);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 11);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 12);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 13);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 14);
OSMetaClassDeclareReservedUnused(IOFireWireNubAux, 15);
};
#pragma mark -
class IOFireWireNub : public IOService
{
OSDeclareAbstractStructors(IOFireWireNub)
friend class IOFireWireController;
friend class IOFireWireNubAux;
friend class IOFireWireDeviceAux;
friend class IOFireWireUnitAux;
friend class IOFireWireDevice;
friend class IOFireWireUnit;
protected:
int fDeviceSpeed; int fCommsSpeed; UInt16 fNodeID; UInt16 fLocalNodeID; UInt32 fGeneration; CSRNodeUniqueID fUniqueID; mach_timespec_t fAsyncTimeout;
int fMaxReadPackLog;
int fMaxWritePackLog;
int fMaxReadROMPackLog;
IOFireWireController *fControl;
IOConfigDirectory *fDirectory;
UInt32 fNodeFlags;
OSSet * fConfigDirectorySet;
IOFireWireNubAux * fAuxiliary;
struct ExpansionData { };
ExpansionData *reserved;
virtual void free();
public:
IOReturn getNodeIDGeneration(UInt32 &generation, UInt16 &nodeID, UInt16 &localID) const;
IOReturn getNodeIDGeneration(UInt32 &generation, UInt16 &nodeID) const;
virtual IOFWSpeed FWSpeed() const;
virtual IOFWSpeed FWSpeed(const IOFireWireNub *dst) const;
virtual int maxPackLog(bool forSend) const;
virtual int maxPackLog(bool forSend, FWAddress address) const;
virtual int maxPackLog(bool forSend, const IOFireWireNub *dst) const;
virtual void setMaxPackLog(bool forSend, bool forROM, int maxPackLog);
virtual IOFWReadCommand *createReadCommand(FWAddress devAddress, IOMemoryDescriptor *hostMem,
FWDeviceCallback completion=NULL, void *refcon=NULL,
bool failOnReset=false);
virtual IOFWReadQuadCommand *createReadQuadCommand(FWAddress devAddress, UInt32 *quads, int numQuads,
FWDeviceCallback completion=NULL, void *refcon=NULL,
bool failOnReset=false);
virtual IOFWWriteCommand *createWriteCommand(FWAddress devAddress, IOMemoryDescriptor *hostMem,
FWDeviceCallback completion=NULL, void *refcon=NULL,
bool failOnReset=false);
virtual IOFWWriteQuadCommand *createWriteQuadCommand(FWAddress devAddress, UInt32 *quads, int numQuads,
FWDeviceCallback completion=NULL, void *refcon=NULL,
bool failOnReset=false);
virtual IOFWCompareAndSwapCommand *createCompareAndSwapCommand(FWAddress devAddress,
const UInt32 *cmpVal, const UInt32 *newVal, int size,
FWDeviceCallback completion=NULL, void *refcon=NULL,
bool failOnReset=false);
virtual IOFWPhysicalAddressSpace *createPhysicalAddressSpace(IOMemoryDescriptor *mem);
virtual IOFWPseudoAddressSpace *createPseudoAddressSpace(FWAddress *addr, UInt32 len,
FWReadCallback reader, FWWriteCallback writer, void *refcon);
virtual IOReturn getConfigDirectory(IOConfigDirectory *&dir);
IOFireWireBus * getBus() const;
IOFireWireController * getController() const;
const CSRNodeUniqueID &getUniqueID() const;
virtual bool init(OSDictionary * propTable);
virtual void setNodeFlags( UInt32 flags );
virtual UInt32 getNodeFlags( void );
virtual void clearNodeFlags( UInt32 flags );
virtual IOReturn setConfigDirectory( IOConfigDirectory *directory );
virtual IOReturn getConfigDirectoryRef( IOConfigDirectory *&dir );
inline UInt32 hopCount( IOFireWireNub * nub )
{ return fAuxiliary->hopCount( nub ); }
inline UInt32 hopCount( void )
{ return fAuxiliary->hopCount(); }
inline TerminationState getTerminationState( void )
{ return fAuxiliary->getTerminationState(); }
protected:
inline void setTerminationState( TerminationState state )
{ fAuxiliary->setTerminationState( state ); }
virtual IOFireWireNubAux * createAuxiliary( void );
public:
inline bool isPhysicalAccessEnabled( void )
{ return fAuxiliary->isPhysicalAccessEnabled(); }
inline IOFWSimpleContiguousPhysicalAddressSpace * createSimpleContiguousPhysicalAddressSpace( vm_size_t size, IODirection direction )
{ return fAuxiliary->createSimpleContiguousPhysicalAddressSpace( size, direction ); }
inline IOFWSimplePhysicalAddressSpace * createSimplePhysicalAddressSpace( vm_size_t size, IODirection direction )
{ return fAuxiliary->createSimplePhysicalAddressSpace( size, direction ); }
private:
OSMetaClassDeclareReservedUsed(IOFireWireNub, 0);
OSMetaClassDeclareReservedUsed(IOFireWireNub, 1);
OSMetaClassDeclareReservedUnused(IOFireWireNub, 2);
OSMetaClassDeclareReservedUnused(IOFireWireNub, 3);
};
#endif