Chameleon

Chameleon Svn Source Tree

Root/branches/slice/trunkM/i386/include/IOKit/sbp2/IOFireWireSBP2Target.h

1/*
2 * Copyright (c) 1998-2000 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 @header IOFireWireSBP2Target
25 Contains the class definition for IOFireWireSBP2Target.
26*/
27
28#ifndef _IOKIT_IOFIREWIRESBP2TARGET_H
29#define _IOKIT_IOFIREWIRESBP2TARGET_H
30
31#include <IOKit/firewire/IOFireWireUnit.h>
32#include <IOKit/IOService.h>
33
34enum
35{
36 kIOFWSBP2FailsOnAckBusy = (1 << 0),
37kIOFWSBP2FailsOnBusResetsDuringIO = (1 << 1),
38kIOFWSBP2DontUsePTPacketLimit = (1 << 2)
39};
40
41/*!
42 @class IOFireWireSBP2Target
43 @abstract Serves as bridge between IOFireWireUnit and IOFireWireLUN.
44 @discussion Matches against IOFireWireUnits supporting the SBP2 protocol. Creates IOFireWireSBP2LUN nubs for matching. Most drivers will match against an IOFireWireSBP2LUN, but matching against an IOFireWireSBP2Target is also supported. This can be useful in cases where a single driver wishes to
45 control all LUNs on a device. Support for this technique is minimal, however, and the driver will be
46 required to discover it's LUNs through the registry.
47*/
48
49class IOFireWireSBP2Target : public IOService
50{
51 OSDeclareDefaultStructors(IOFireWireSBP2Target);
52
53protected:
54
55/////////////////////////////////////////
56 // rom keys
57
58 enum
59 {
60 kCmdSpecIDKey = 0x38,
61 kCmdSetKey= 0x39,
62 kSoftwareRevKey= 0x3b,
63 kFirmwareRevKey = 0x3c,
64 kLUNKey= 0x14,
65 kLUNDirectoryKey= 0xd4,
66 kManagementAgentOffsetKey= 0x54,
67kUnitCharacteristicsKey = 0x3A,
68kRevisionKey= 0x21,
69kFastStartKey= 0x3E
70 };
71
72 typedef struct
73 {
74UInt32 cmdSpecID;
75UInt32 cmdSet;
76UInt32 vendorID;
77UInt32 softwareRev;
78UInt32 firmwareRev;
79UInt32 lun;
80UInt32 devType;
81UInt32 unitCharacteristics;
82UInt32 managementOffset;
83UInt32 revision;
84bool fastStartSupported;
85UInt32 fastStart;
86 } LUNInfo;
87
88 // reserved for future use
89 struct ExpansionData
90{
91boolfStarted;
92OSArray *fPendingMgtAgentCommands ;
93UInt32fNumberPendingMgtAgentOrbs;
94UInt32fNumLUNs;
95};
96 ExpansionData * fExpansionData;
97
98/////////////////////////////////////////
99// private fields
100
101 bool fOpenFromTarget;
102 UInt32fOpenFromLUNCount;
103 IOFireWireUnit * fProviderUnit;
104 UInt32fFlags;
105
106IOFireWireController * fControl;
107
108UInt32 fIOCriticalSectionCount;
109
110/////////////////////////////////////////
111// private internals
112
113 virtual void free( void );
114 virtual IOReturn message( UInt32 type,
115IOService * provider,
116void * argument = 0);
117
118 virtual void scanForLUNs( void );
119 IOReturn createLUN( LUNInfo * info );
120
121public:
122
123/////////////////////////////////////////
124// public methods
125
126/*! @function handleOpen
127@abstract Overrideable method to control the open / close behaviour of an IOService.
128@discussion See IOService for discussion.
129@param forClient Designates the client of the provider requesting the open.
130@param options Options for the open, may be interpreted by the implementor of handleOpen.
131@result Return true if the open was successful, false otherwise. */
132
133 virtual bool handleOpen( IOService * forClient, IOOptionBits options, void * arg );
134
135/*!
136@function handleClose
137@abstract Overrideable method to control the open / close behaviour of an IOService.
138@discussion See IOService for discussion.
139@param forClient Designates the client of the provider requesting the close.
140@param options Options for the close, may be interpreted by the implementor of handleOpen.
141*/
142
143virtual void handleClose( IOService * forClient, IOOptionBits options );
144
145/*!
146@function handleIsOpen
147@abstract Overrideable method to control the open / close behaviour of an IOService.
148@discussion See IOService for discussion.
149@param forClient If non-zero, isOpen returns the open state for that client. If zero is passed, isOpen returns the open state for all clients.
150@result Returns true if the specific, or any, client has the IOService open.
151*/
152
153 virtual bool handleIsOpen( const IOService * forClient ) const;
154
155/*!
156@function start
157@abstract During an IOService instantiation, the start method is called when the IOService has been selected to run on the provider.
158@discussion See IOService for discussion.
159@result Return true if the start was successful, false otherwise (which will cause the instance to be detached and usually freed).
160*/
161
162 virtual bool start( IOService *provider );
163
164/*!
165@function stop
166@abstract During an IOService termination, the stop method is called in its clients before they are detached & it is destroyed.
167@discussion See IOService for discussion.
168*/
169
170virtual void stop( IOService *provider );
171
172/*!
173@function getFireWireUnit
174@abstract Returns an IOFireWireUnit object.
175@discussion An IOFireWireUnit is the provider of an IOFireWireSBP2Target. In order to use the base FireWire services
176you will need a reference to the unit. This method returns that reference.
177@result Returns a pointer to an IOFireWireUnit.
178*/
179
180 virtual IOFireWireUnit * getFireWireUnit( void );
181
182/*!
183@function matchPropertyTable
184@abstract Implements SBP2 specific matching.
185@discussion See IOService for discussion.
186 @param table The dictionary of properties to be matched against.
187@result Returns false if the family considers the matching dictionary does not match in properties it understands, true otherwise.
188*/
189
190virtual bool matchPropertyTable( OSDictionary * table );
191
192 virtual void setTargetFlags( UInt32 flags );
193 virtual UInt32 getTargetFlags( void );
194
195protected:
196 virtual void configurePhysicalFilter( void );
197
198public:
199 virtual void clearTargetFlags( UInt32 flags );
200virtual IOReturn beginIOCriticalSection( void );
201virtual void endIOCriticalSection( void );
202
203 virtual bool finalize( IOOptionBits options );
204
205 IOReturn synchMgmtAgentAccess( IOFWCommand * mgmtOrbCommand );
206voidcompleteMgmtAgentAccess( );
207void clearMgmtAgentAccess( );
208voidcancelMgmtAgentAccess( IOFWCommand * mgmtOrbCommand );
209
210protected:
211
212 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 0);
213 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 1);
214 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 2);
215 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 3);
216 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 4);
217 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 5);
218 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 6);
219 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 7);
220 OSMetaClassDeclareReservedUnused(IOFireWireSBP2Target, 8);
221
222};
223
224#endif
225

Archive Download this file

Revision: 1171