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