1/* 2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22 23/* 24 * 25 * IOFireWireAVCLocalNode.h 26 * 27 * Implementation of class to initialize the Local node's AVC Target mode support 28 * 29 */ 30 31#include <IOKit/avc/IOFireWireAVCLocalNode.h> 32 33OSDefineMetaClassAndStructors(IOFireWireAVCLocalNode, IOService); 34 35#pragma mark - 36#pragma mark ��� IOService methods ��� 37 38bool IOFireWireAVCLocalNode::start(IOService *provider) 39{ 40 //IOLog( "IOFireWireAVCLocalNode::start\n"); 41 42 fDevice = OSDynamicCast(IOFireWireNub, provider); 43 if(!fDevice) 44 return false; 45 46 if (!IOService::start(provider)) 47 return false; 48 49 fPCRSpace = IOFireWirePCRSpace::getPCRAddressSpace(fDevice->getBus()); 50 if(!fPCRSpace) 51 return false; 52 fPCRSpace->activate(); 53 54 fAVCTargetSpace = IOFireWireAVCTargetSpace::getAVCTargetSpace(fDevice->getController()); 55 if(!fAVCTargetSpace) 56 return false; 57 fAVCTargetSpace->activateWithUserClient((IOFireWireAVCProtocolUserClient*)0xFFFFFFFF); 58 59 // Enable the communication between the PCR space and the Target space objects 60 fPCRSpace->setAVCTargetSpacePointer(fAVCTargetSpace); 61 62 registerService(); 63 64 fStarted = true; 65 66 return true; 67} 68 69bool IOFireWireAVCLocalNode::finalize(IOOptionBits options) 70{ 71 //IOLog( "IOFireWireAVCLocalNode::finalize\n"); 72 73 return IOService::finalize(options); 74} 75 76void IOFireWireAVCLocalNode::stop(IOService *provider) 77{ 78 //IOLog( "IOFireWireAVCLocalNode::stop\n"); 79 80 IOService::stop(provider); 81} 82 83void IOFireWireAVCLocalNode::free(void) 84{ 85 //IOLog( "IOFireWireAVCLocalNode::free\n"); 86 87 if(fPCRSpace) 88 { 89 fPCRSpace->deactivate(); 90 fPCRSpace->release(); 91 } 92 93 if(fAVCTargetSpace) 94 { 95 fAVCTargetSpace->deactivateWithUserClient((IOFireWireAVCProtocolUserClient*)0xFFFFFFFF); 96 fAVCTargetSpace->release(); 97 } 98 99 return IOService::free(); 100} 101 102IOReturn IOFireWireAVCLocalNode::message(UInt32 type, IOService *provider, void *argument) 103{ 104 IOReturn res = kIOReturnUnsupported; 105 106 //IOLog( "IOFireWireAVCLocalNode::message\n"); 107 108 switch (type) 109 { 110 case kIOMessageServiceIsTerminated: 111 case kIOMessageServiceIsRequestingClose: 112 case kIOMessageServiceIsResumed: 113 res = kIOReturnSuccess; 114 break; 115 116 // This message is received when a bus-reset start happens! 117 case kIOMessageServiceIsSuspended: 118 res = kIOReturnSuccess; 119 if((fStarted == true) && (fPCRSpace)) 120 fPCRSpace->clearAllP2PConnections(); 121 break; 122 123 default: 124 break; 125 } 126 127 messageClients(type); 128 129 return res; 130} 131 132 133