#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;
class IOFireWireDevice;
class IOLocalConfigDirectory;
class IOFWLocalIsochPort;
class IOFireWirePowerManager;
class IOFireWireBus;
#pragma mark -
class IOFireWireBusAux : public OSObject
{
OSDeclareDefaultStructors(IOFireWireBusAux)
friend class IOFireWireBus;
protected:
struct ExpansionData { };
ExpansionData * reserved;
private:
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 0);
OSMetaClassDeclareReservedUnused(IOFireWireBusAux, 1);
OSMetaClassDeclareReservedUnused(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:
typedef void (CallUserProc)(void *refcon, void * userProc, void * dclCommand);
typedef struct _DCLTaskInfo {
task_t fTask; vm_address_t fDCLBaseAddr;
UInt32 fDCLSize; vm_address_t fDataBaseAddr;
UInt32 fDataSize;
CallUserProc *fCallUser; void *fCallRefCon; } DCLTaskInfo;
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;
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