IOFireWireDevice.h [plain text]
#ifndef _IOKIT_IOFIREWIREDEVICE_H
#define _IOKIT_IOFIREWIREDEVICE_H
#include <IOKit/firewire/IOFireWireNub.h>
class IOFireWireROMCache;
struct IOFWNodeScan;
struct RomScan;
class IOFireWireDevice : public IOFireWireNub
{
OSDeclareDefaultStructors(IOFireWireDevice)
friend class IOFireWireController;
protected:
enum RegistrationState
{
kDeviceRegistered,
kDeviceNeedsRegisterService,
kDeviceNotRegistered
};
IOFireWireROMCache * fDeviceROM;
bool fOpenFromDevice;
UInt32 fOpenFromUnitCount;
UInt32 fROMGeneration;
IORecursiveLock *fROMLock;
RegistrationState fRegistrationState;
struct ExpansionData { };
ExpansionData *reserved;
static void readROMDirGlue(void *refcon, IOReturn status,
IOFireWireNub *device, IOFWCommand *fwCmd);
static void readROMThreadFunc(void *arg);
static void terminateDevice(void *arg);
void processROM(RomScan *romScan);
virtual void free();
public:
virtual IOReturn message( UInt32 type, IOService * provider, void * argument );
virtual bool handleOpen( IOService * forClient, IOOptionBits options, void * arg );
virtual void handleClose( IOService * forClient, IOOptionBits options );
virtual bool handleIsOpen( const IOService * forClient ) const;
virtual IOReturn cacheROM(OSData *rom, UInt32 offset, const UInt32 *&romBase);
virtual const UInt32 * getROMBase();
virtual void setNodeROM(UInt32 generation, UInt16 localNodeID,
const IOFWNodeScan *info);
virtual bool matchPropertyTable(OSDictionary * table);
virtual bool init(OSDictionary * propTable, const IOFWNodeScan *scan);
virtual bool attach(IOService * provider );
virtual bool finalize( IOOptionBits options );
virtual void setNodeFlags( UInt32 flags );
virtual void clearNodeFlags( UInt32 flags );
virtual UInt32 getNodeFlags( void );
virtual IOReturn configureNode( void );
virtual IOFWPhysicalAddressSpace *createPhysicalAddressSpace(IOMemoryDescriptor *mem);
virtual IOFWPseudoAddressSpace *createPseudoAddressSpace(FWAddress *addr, UInt32 len,
FWReadCallback reader, FWWriteCallback writer, void *refcon);
protected:
virtual IOReturn readRootDirectory( IOConfigDirectory * directory, OSDictionary * propTable );
virtual IOReturn processRootDirectory( OSDictionary * propTable );
virtual IOReturn readUnitDirectories( IOConfigDirectory * directory, OSSet * unitInfo );
virtual IOReturn processUnitDirectories( OSSet * unitSet );
virtual void setRegistrationState( RegistrationState fRegistrationState );
virtual void preprocessDirectories( OSDictionary * rootPropTable, OSSet * unitSet );
virtual void configurePhysicalFilter( void );
private:
OSMetaClassDeclareReservedUnused(IOFireWireDevice, 0);
OSMetaClassDeclareReservedUnused(IOFireWireDevice, 1);
};
#endif