IOFWSBP2PseudoAddressSpace.cpp [plain text]
#include <IOKit/firewire/IOFireWireUnit.h>
#include <IOKit/firewire/IOFireWireDevice.h>
#include "IOFWSBP2PseudoAddressSpace.h"
OSDefineMetaClassAndStructors(IOFWSBP2PseudoAddressSpace, IOFWPseudoAddressSpace);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 0);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 1);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 2);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 3);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 4);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 5);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 6);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 7);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 8);
OSMetaClassDefineReservedUnused(IOFWSBP2PseudoAddressSpace, 9);
#pragma mark -
void IOFWSBP2PseudoAddressSpace::setAddressLo( UInt32 addressLo )
{
fBase.addressLo = addressLo;
}
IOFWSBP2PseudoAddressSpace * IOFWSBP2PseudoAddressSpace::simpleRead( IOFireWireBus * control,
FWAddress * addr,
UInt32 len,
const void * data)
{
IOFWSBP2PseudoAddressSpace * me = new IOFWSBP2PseudoAddressSpace;
do
{
if(!me)
break;
if(!me->initAll(control, addr, len, simpleReader, NULL, (void *)me))
{
me->release();
me = NULL;
break;
}
me->fDesc = IOMemoryDescriptor::withAddress((void *)data, len, kIODirectionOut);
if(!me->fDesc)
{
me->release();
me = NULL;
}
} while(false);
return me;
}
IOFWSBP2PseudoAddressSpace * IOFWSBP2PseudoAddressSpace::simpleRW( IOFireWireBus * control,
FWAddress * addr,
UInt32 len,
void * data )
{
IOFWSBP2PseudoAddressSpace * me = new IOFWSBP2PseudoAddressSpace;
do
{
if(!me)
break;
if(!me->initAll(control, addr, len, simpleReader, simpleWriter, (void *)me))
{
me->release();
me = NULL;
break;
}
me->fDesc = IOMemoryDescriptor::withAddress(data, len, kIODirectionOutIn);
if(!me->fDesc)
{
me->release();
me = NULL;
}
} while(false);
return me;
}
IOFWSBP2PseudoAddressSpace * IOFWSBP2PseudoAddressSpace::createPseudoAddressSpace( IOFireWireBus * control,
IOFireWireUnit * unit,
FWAddress * addr,
UInt32 len,
FWReadCallback reader,
FWWriteCallback writer,
void * refcon )
{
IOFWSBP2PseudoAddressSpace * space = NULL;
IOFireWireDevice * device = NULL;
space = new IOFWSBP2PseudoAddressSpace;
if( space != NULL )
{
if( !space->initAll( control, addr, len, reader, writer, refcon ) )
{
space->release();
space = NULL;
}
}
if( space != NULL )
{
device = OSDynamicCast( IOFireWireDevice, unit->getProvider() );
if( device == NULL )
{
space->release();
space = NULL;
}
}
if( space != NULL )
{
space->addTrustedNode( device );
}
return space;
}