IOFireWireLibPriv.h [plain text]
#ifndef _IOKIT_IOFireWireLibPriv_H_
#define _IOKIT_IOFireWireLibPriv_H_
#include <stdio.h>
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
#include "IOFireWireLib.h"
#include "IOFireWireFamilyCommon.h"
#define kIOFireWireLibConnection 11
__BEGIN_DECLS
void * IOFireWireLibFactory(CFAllocatorRef allocator, CFUUIDRef typeID) ;
__END_DECLS
#define INTERFACEIMP_INTERFACE \
0, \
& IOFireWireIUnknown::SQueryInterface, \
& IOFireWireIUnknown::SAddRef, \
& IOFireWireIUnknown::SRelease
class IOFireWireIUnknown: IUnknown
{
struct InterfaceMap
{
IUnknownVTbl* pseudoVTable ;
IOFireWireIUnknown* obj ;
} ;
public:
static HRESULT STDMETHODCALLTYPE SQueryInterface(void* self, REFIID iid, LPVOID* ppv) ;
static ULONG STDMETHODCALLTYPE SAddRef(void* self) ;
static ULONG STDMETHODCALLTYPE SRelease(void* self) ;
virtual HRESULT QueryInterface(REFIID iid, LPVOID* ppv) = 0;
virtual ULONG AddRef(void) ;
virtual ULONG Release(void) ;
inline static IOFireWireIUnknown* GetThis(void* interface)
{ return (IOFireWireIUnknown *) ((InterfaceMap *) interface)->obj; };
IOFireWireIUnknown(): mRefCount(1) {}
virtual ~IOFireWireIUnknown() {}
protected:
UInt32 mRefCount ;
} ;
class IOFireWireDeviceInterfaceImp: public IOFireWireIUnknown
{
public:
IOFireWireDeviceInterfaceImp() ;
virtual ~IOFireWireDeviceInterfaceImp() ;
IOReturn Probe(CFDictionaryRef propertyTable,
io_service_t service, SInt32 *order );
IOReturn Start(CFDictionaryRef propertyTable,
io_service_t service );
IOReturn Stop();
virtual Boolean IsInited() const { return mIsInited; }
virtual io_object_t GetDevice() const { return mDefaultDevice; }
virtual IOReturn Open() ;
virtual IOReturn OpenWithSessionRef(
IOFireWireSessionRef session) ;
virtual void Close() ;
virtual const IOReturn AddCallbackDispatcherToRunLoop(CFRunLoopRef inRunLoop) ;
virtual void RemoveCallbackDispatcherFromRunLoop() ;
virtual const Boolean NotificationIsOn() { return mNotifyIsOn; }
virtual const Boolean TurnOnNotification(
void* callBackRefCon) ;
virtual void TurnOffNotification() ;
virtual const IOFireWireBusResetHandler
SetBusResetHandler(
IOFireWireBusResetHandler inBusResetHandler) ;
virtual const IOFireWireBusResetDoneHandler
SetBusResetDoneHandler(
IOFireWireBusResetDoneHandler inBusResetDoneHandler) ;
static void BusResetHandler(
void* refCon,
IOReturn result) ;
static void BusResetDoneHandler(
void* refCon,
IOReturn result) ;
virtual void ClientCommandIsComplete(
FWClientCommandID commandID,
IOReturn status) ;
virtual IOReturn Read(
io_object_t device,
const FWAddress & addr,
void* buf,
UInt32* size,
Boolean failOnReset = false,
UInt32 generation = 0) ;
virtual IOReturn ReadQuadlet(
io_object_t device,
const FWAddress & addr,
UInt32* val,
Boolean failOnReset = false,
UInt32 generation = 0) ;
virtual IOReturn Write(
io_object_t device,
const FWAddress & addr,
const void* buf,
UInt32* size,
Boolean failOnReset = false,
UInt32 generation = 0) ;
virtual IOReturn WriteQuadlet(
io_object_t device,
const FWAddress & addr,
const UInt32 val,
Boolean failOnReset = false,
UInt32 generation = 0) ;
virtual IOReturn CompareSwap(
io_object_t device,
const FWAddress & addr,
UInt32 cmpVal,
UInt32 newVal,
Boolean failOnReset = false,
UInt32 generation = 0) ;
virtual IOFireWireLibCommandRef
CreateReadCommand(
io_object_t device,
const FWAddress & addr,
void* buf,
UInt32 size,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefcon,
REFIID iid) ;
virtual IOFireWireLibCommandRef
CreateReadQuadletCommand(
io_object_t device,
const FWAddress & addr,
UInt32 quads[],
UInt32 numQuads,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
virtual IOFireWireLibCommandRef
CreateWriteCommand(
io_object_t device,
const FWAddress & addr,
void* buf,
UInt32 size,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
virtual IOFireWireLibCommandRef
CreateWriteQuadletCommand(
io_object_t device,
const FWAddress & addr,
UInt32 quads[],
UInt32 numQuads,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
virtual IOFireWireLibCommandRef
CreateCompareSwapCommand(
io_object_t device,
const FWAddress & addr,
UInt32 cmpVal,
UInt32 newVal,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
virtual IOReturn BusReset() ;
virtual IOReturn GetCycleTime(
UInt32* cycleTime) ;
virtual IOReturn GetGenerationAndNodeID(
UInt32* outGeneration,
UInt16* outNodeID) ;
virtual IOReturn GetLocalNodeID(
UInt16* outLocalNodeID) ;
virtual IOReturn GetResetTime(
AbsoluteTime* resetTime) ;
virtual IOFireWireLibPseudoAddressSpaceRef
CreatePseudoAddressSpace(
UInt32 inLength,
void* inRefCon,
UInt32 inQueueBufferSize,
void* inBackingStore,
UInt32 inFlags,
REFIID iid) ;
virtual IOFireWireLibPhysicalAddressSpaceRef
CreatePhysicalAddressSpace(
UInt32 inLength,
void* inBackingStore,
UInt32 inFlags,
REFIID iid) ;
virtual IOFireWireLibLocalUnitDirectoryRef
CreateLocalUnitDirectory(
REFIID iid) ;
virtual IOFireWireLibConfigDirectoryRef
GetConfigDirectory(
REFIID iid) ;
virtual IOFireWireLibConfigDirectoryRef
CreateConfigDirectoryWithIOObject(
io_object_t inObject,
REFIID iid) ;
virtual IOReturn FireBugMsg(
const char* msg) ;
const io_connect_t OpenDefaultConnection() ;
const io_object_t GetUserClientConnection() const { return mUserClientConnection; }
const io_connect_t GetDefaultDevice() const { return mDefaultDevice; }
const CFMachPortRef GetAsyncCFPort() const { return mAsyncCFPort; }
const mach_port_t GetAsyncPort() const { return mAsyncPort ; }
IOReturn CreateAsyncPorts() ;
const Boolean AsyncPortsExist() const ;
const CFMachPortRef GetIsochAsyncCFPort() const { return mIsochAsyncCFPort ; }
const mach_port_t GetIsochAsyncPort() const { return mIsochAsyncPort ; }
IOReturn CreateIsochAsyncPorts() ;
const Boolean IsochAsyncPortsExist() const ;
virtual IOReturn CreateCFStringWithOSStringRef(
FWKernOSStringRef inStringRef,
UInt32 inStringLen,
CFStringRef*& text) ;
virtual IOReturn CreateCFDataWithOSDataRef(
FWKernOSDataRef inDataRef,
IOByteCount inDataLen,
CFDataRef*& data) ;
virtual IOReturn AddIsochCallbackDispatcherToRunLoop(
CFRunLoopRef inRunLoop) ;
virtual IOFireWireLibIsochChannelRef
CreateIsochChannel(
Boolean doIrm,
UInt32 packetSize,
IOFWSpeed prefSpeed,
REFIID iid) ;
virtual IOFireWireLibRemoteIsochPortRef
CreateRemoteIsochPort(
Boolean inTalking,
REFIID iid) ;
virtual IOFireWireLibLocalIsochPortRef
CreateLocalIsochPort(
Boolean inTalking,
DCLCommandStruct* inDCLProgram,
UInt32 inStartEvent,
UInt32 inStartState,
UInt32 inStartMask,
IOVirtualRange inDCLProgramRanges[], UInt32 inDCLProgramRangeCount,
IOVirtualRange inBufferRanges[],
UInt32 inBufferRangeCount,
REFIID iid) ;
virtual IOFireWireLibDCLCommandPoolRef
CreateDCLCommandPool(
IOByteCount size,
REFIID iid ) ;
virtual void PrintDCLProgram(
const DCLCommandStruct* inDCL,
UInt32 inDCLCount) ;
protected:
Boolean mIsInited ;
Boolean mNotifyIsOn ;
mach_port_t mMasterDevicePort ;
mach_port_t mPort ;
io_object_t mDefaultDevice ;
CFMutableSetRef mPseudoAddressSpaces ;
CFMutableSetRef mPhysicalAddressSpaces ;
CFMutableSetRef mUnitDirectories ;
CFMutableSetRef mIOFireWireLibCommands ;
CFMutableSetRef mConfigDirectories ;
io_connect_t mUserClientConnection ;
CFMachPortRef mAsyncCFPort ;
mach_port_t mAsyncPort ;
io_async_ref_t mBusResetAsyncRef ;
io_async_ref_t mBusResetDoneAsyncRef ;
IOFireWireBusResetHandler mBusResetHandler ;
IOFireWireBusResetDoneHandler mBusResetDoneHandler ;
CFRunLoopRef mRunLoop ;
CFRunLoopSourceRef mRunLoopSource ;
Boolean mIsOpen ;
CFMachPortRef mIsochAsyncCFPort ;
mach_port_t mIsochAsyncPort ;
CFRunLoopRef mIsochRunLoop ;
CFRunLoopSourceRef mIsochRunLoopSource ;
} ;
class IOFireWireDeviceInterfaceCOM: public IOFireWireDeviceInterfaceImp
{
public:
IOFireWireDeviceInterfaceCOM() ;
virtual ~IOFireWireDeviceInterfaceCOM() ;
struct InterfaceMap
{
IUnknownVTbl* pseudoVTable;
IOFireWireDeviceInterfaceCOM* obj;
};
static IOCFPlugInInterface sIOCFPlugInInterface ;
InterfaceMap mIOCFPlugInInterface ;
static IOFireWireDeviceInterface sInterface ;
InterfaceMap mInterface ;
inline static IOFireWireDeviceInterfaceCOM* GetThis(IOFireWireLibDeviceRef self)
{ return (IOFireWireDeviceInterfaceCOM *) ((InterfaceMap *) self)->obj; };
static IOCFPlugInInterface** Alloc() ;
virtual HRESULT QueryInterface( REFIID iid, LPVOID* ppv );
static IOReturn SProbe(IOFireWireLibDeviceRef self, CFDictionaryRef propertyTable,
io_service_t service, SInt32 *order );
static IOReturn SStart(IOFireWireLibDeviceRef self, CFDictionaryRef propertyTable,
io_service_t service );
static IOReturn SStop( IOFireWireLibDeviceRef self );
static const Boolean SInterfaceIsInited(
IOFireWireLibDeviceRef self) ;
static io_object_t SGetDevice(
IOFireWireLibDeviceRef self) ;
static IOReturn SOpen(
IOFireWireLibDeviceRef self) ;
static IOReturn SOpenWithSessionRef(
IOFireWireLibDeviceRef self,
IOFireWireSessionRef session) ;
static void SClose(
IOFireWireLibDeviceRef self) ;
static const Boolean SNotificationIsOn(
IOFireWireLibDeviceRef self) ;
static const IOReturn SAddCallbackDispatcherToRunLoop(IOFireWireLibDeviceRef self, CFRunLoopRef inRunLoop) ;
static void SRemoveCallbackDispatcherFromRunLoop(IOFireWireLibDeviceRef self) ;
static const Boolean STurnOnNotification(
IOFireWireLibDeviceRef self) ;
static void STurnOffNotification(
IOFireWireLibDeviceRef self) ;
static const IOFireWireBusResetHandler
SSetBusResetHandler(
IOFireWireLibDeviceRef self,
IOFireWireBusResetHandler inBusResetHandler) ;
static const IOFireWireBusResetDoneHandler
SSetBusResetDoneHandler(
IOFireWireLibDeviceRef self,
IOFireWireBusResetDoneHandler inBusResetDoneHandler) ;
static void SClientCommandIsComplete(
IOFireWireLibDeviceRef self,
FWClientCommandID commandID,
IOReturn status) ;
static IOReturn SRead(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
void* buf,
UInt32* size,
Boolean failOnReset = false,
UInt32 generation = 0) ;
static IOReturn SReadQuadlet(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
UInt32* val,
Boolean failOnReset = false,
UInt32 generation = 0) ;
static IOReturn SWrite(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
const void* buf,
UInt32* size,
Boolean failOnReset = false,
UInt32 generation = 0) ;
static IOReturn SWriteQuadlet(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
const UInt32 val,
Boolean failOnReset = false,
UInt32 generation = 0) ;
static IOReturn SCompareSwap(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
UInt32 cmpVal,
UInt32 newVal,
Boolean failOnReset = false,
UInt32 generation = 0) ;
static IOFireWireLibCommandRef
SCreateReadCommand(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
void* buf,
UInt32 size,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefcon,
REFIID iid) ;
static IOFireWireLibCommandRef
SCreateReadQuadletCommand(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress * addr,
UInt32 quads[],
UInt32 numQuads,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
static IOFireWireLibCommandRef
SCreateWriteCommand(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress* addr,
void* buf,
UInt32 size,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
static IOFireWireLibCommandRef
SCreateWriteQuadletCommand(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress * addr,
UInt32 quads[],
UInt32 numQuads,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
static IOFireWireLibCommandRef
SCreateCompareSwapCommand(
IOFireWireLibDeviceRef self,
io_object_t device,
const FWAddress * addr,
UInt32 cmpVal,
UInt32 newVal,
IOFireWireLibCommandCallback callback,
Boolean failOnReset,
UInt32 generation,
void* inRefCon,
REFIID iid) ;
static IOReturn SBusReset(
IOFireWireLibDeviceRef self) ;
static IOReturn SGetCycleTime(
IOFireWireLibDeviceRef self,
UInt32* outCycleTime)
{ return GetThis(self)->GetCycleTime(outCycleTime); }
static IOReturn SGetGenerationAndNodeID(
IOFireWireLibDeviceRef self,
UInt32* outGeneration,
UInt16* outNodeID)
{ return GetThis(self)->GetGenerationAndNodeID(outGeneration, outNodeID); }
static IOReturn SGetLocalNodeID(
IOFireWireLibDeviceRef self,
UInt16* outLocalNodeID)
{ return GetThis(self)->GetLocalNodeID(outLocalNodeID); }
static IOReturn SGetResetTime(
IOFireWireLibDeviceRef self,
AbsoluteTime* outResetTime)
{ return GetThis(self)->GetResetTime(outResetTime); }
static IOFireWireLibLocalUnitDirectoryRef
SCreateLocalUnitDirectory(
IOFireWireLibDeviceRef self,
REFIID iid) ;
static IOFireWireLibConfigDirectoryRef
SGetConfigDirectory(
IOFireWireLibDeviceRef self,
REFIID iid) ;
static IOFireWireLibConfigDirectoryRef
SCreateConfigDirectoryWithIOObject(
IOFireWireLibDeviceRef self,
io_object_t inObject,
REFIID iid) ;
static IOFireWireLibPseudoAddressSpaceRef
SCreatePseudoAddressSpace(
IOFireWireLibDeviceRef self,
UInt32 inLength,
void* inRefCon,
UInt32 inQueueBufferSize,
void* inBackingStore,
UInt32 inFlags,
REFIID iid) ;
static IOFireWireLibPhysicalAddressSpaceRef
SCreatePhysicalAddressSpace(
IOFireWireLibDeviceRef self,
UInt32 inLength,
void* inBackingStore,
UInt32 inFlags,
REFIID iid) ;
static IOReturn SFireBugMsg(
IOFireWireLibDeviceRef self,
const char * msg)
{ return GetThis(self)->FireBugMsg(msg); }
static IOReturn SAddIsochCallbackDispatcherToRunLoop(
IOFireWireLibDeviceRef self,
CFRunLoopRef inRunLoop) ;
static IOFireWireLibIsochChannelRef
SCreateIsochChannel(
IOFireWireLibDeviceRef self,
Boolean doIrm,
UInt32 packetSize,
IOFWSpeed prefSpeed,
REFIID iid) ;
static IOFireWireLibRemoteIsochPortRef
SCreateRemoteIsochPort(
IOFireWireLibDeviceRef self,
Boolean inTalking,
REFIID iid) ;
static IOFireWireLibLocalIsochPortRef
SCreateLocalIsochPort(
IOFireWireLibDeviceRef self,
Boolean inTalking,
DCLCommandStruct* inDCLProgram,
UInt32 inStartEvent,
UInt32 inStartState,
UInt32 inStartMask,
IOVirtualRange inDCLProgramRanges[], UInt32 inDCLProgramRangeCount,
IOVirtualRange inBufferRanges[],
UInt32 inBufferRangeCount,
REFIID iid) ;
static IOFireWireLibDCLCommandPoolRef
SCreateDCLCommandPool(
IOFireWireLibDeviceRef self,
IOByteCount size,
REFIID iid ) ;
static void SPrintDCLProgram(
IOFireWireLibDeviceRef self,
const DCLCommandStruct* inDCL,
UInt32 inDCLCount) ;
} ;
#endif //_IOKIT_IOFireWireLibPriv_H_