IOFireWireAVCLocalNode.cpp [plain text]
#include <IOKit/avc/IOFireWireAVCLocalNode.h>
OSDefineMetaClassAndStructors(IOFireWireAVCLocalNode, IOService);
#pragma mark -
#pragma mark еее IOService methods еее
bool IOFireWireAVCLocalNode::start(IOService *provider)
{
fDevice = OSDynamicCast(IOFireWireNub, provider);
if(!fDevice)
return false;
if (!IOService::start(provider))
return false;
fPCRSpace = IOFireWirePCRSpace::getPCRAddressSpace(fDevice->getBus());
if(!fPCRSpace)
return false;
fPCRSpace->activate();
fAVCTargetSpace = IOFireWireAVCTargetSpace::getAVCTargetSpace(fDevice->getController());
if(!fAVCTargetSpace)
return false;
fAVCTargetSpace->activateWithUserClient((IOFireWireAVCProtocolUserClient*)0xFFFFFFFF);
fPCRSpace->setAVCTargetSpacePointer(fAVCTargetSpace);
registerService();
fStarted = true;
return true;
}
bool IOFireWireAVCLocalNode::finalize(IOOptionBits options)
{
return IOService::finalize(options);
}
void IOFireWireAVCLocalNode::stop(IOService *provider)
{
IOService::stop(provider);
}
void IOFireWireAVCLocalNode::free(void)
{
if(fPCRSpace)
{
fPCRSpace->deactivate();
fPCRSpace->release();
}
if(fAVCTargetSpace)
{
fAVCTargetSpace->deactivateWithUserClient((IOFireWireAVCProtocolUserClient*)0xFFFFFFFF);
fAVCTargetSpace->release();
}
return IOService::free();
}
IOReturn IOFireWireAVCLocalNode::message(UInt32 type, IOService *provider, void *argument)
{
IOReturn res = kIOReturnUnsupported;
switch (type)
{
case kIOMessageServiceIsTerminated:
case kIOMessageServiceIsRequestingClose:
case kIOMessageServiceIsResumed:
res = kIOReturnSuccess;
break;
case kIOMessageServiceIsSuspended:
res = kIOReturnSuccess;
if((fStarted == true) && (fPCRSpace))
fPCRSpace->clearAllP2PConnections();
break;
default:
break;
}
messageClients(type);
return res;
}