1 | /*␊ |
2 | * Copyright (c) 1998-2002 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 | * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved.␊ |
24 | *␊ |
25 | * HISTORY␊ |
26 | *␊ |
27 | */␊ |
28 | ␊ |
29 | #ifndef _IOKIT_IOFIREWIRECONTROLLER_H␊ |
30 | #define _IOKIT_IOFIREWIRECONTROLLER_H␊ |
31 | ␊ |
32 | #ifndef FIREWIREPRIVATE␊ |
33 | #warning Please do not include this file. Include IOFireWireBus.h instead.␊ |
34 | #endif␊ |
35 | ␊ |
36 | #include <IOKit/IOEventSource.h>␊ |
37 | #include <IOKit/firewire/IOFireWireBus.h>␊ |
38 | #include <IOKit/firewire/IOFireWireFamilyCommon.h>␊ |
39 | #include <IOKit/firewire/IOFireWireIRMAllocation.h>␊ |
40 | #include <IOKit/firewire/IOFWPHYPacketListener.h>␊ |
41 | #include <IOKit/firewire/IOFireWireMultiIsochReceive.h>␊ |
42 | ␊ |
43 | class OSData;␊ |
44 | class IOWorkLoop;␊ |
45 | class IOEventSource;␊ |
46 | class IOFWQEventSource;␊ |
47 | class IOTimerEventSource;␊ |
48 | class IOMemoryDescriptor;␊ |
49 | class IOFireWireController;␊ |
50 | class IOFWAddressSpace;␊ |
51 | class IOFWPseudoAddressSpace;␊ |
52 | class IOFireWireNub;␊ |
53 | class IOFireWireDevice;␊ |
54 | class IOFireWireDeviceAux;␊ |
55 | class IOFireWireUnit;␊ |
56 | class IODCLProgram;␊ |
57 | class IOLocalConfigDirectory;␊ |
58 | class IOFireWireLink;␊ |
59 | class IOFireWireSBP2ORB;␊ |
60 | class IOFireWireSBP2Login;␊ |
61 | class IOFireWireROMCache;␊ |
62 | class IOFireWireLocalNode;␊ |
63 | class IOFWWorkLoop;␊ |
64 | class IOFireWireIRM;␊ |
65 | class IOFireWirePowerManager;␊ |
66 | class IOFWSimplePhysicalAddressSpace;␊ |
67 | class IOFWSimpleContiguousPhysicalAddressSpace;␊ |
68 | class IOFWAsyncStreamReceiver;␊ |
69 | class IOFWAsyncStreamListener;␊ |
70 | class IOFWUserVectorCommand;␊ |
71 | class IOFWAsyncPHYCommand;␊ |
72 | class IOFWPHYPacketListener;␊ |
73 | class IOFWUserPHYPacketListener;␊ |
74 | ␊ |
75 | #if FIRELOGCORE␊ |
76 | class IOFireLog;␊ |
77 | class IOFireLogPublisher;␊ |
78 | #endif␊ |
79 | ␊ |
80 | const UInt32 kMaxWaitForValidSelfID = 20; // Still invalid SelfID after 20 retries␊ |
81 | ␊ |
82 | // Phy packet defs.␊ |
83 | ␊ |
84 | enum␊ |
85 | {␊ |
86 | ␉kFWPhyPacketID␉␉␉␉␉= FWBitRange (0, 1),␊ |
87 | ␉kFWPhyPacketIDPhase␉␉␉␉= FWBitRangePhase (0, 1),␊ |
88 | ␊ |
89 | ␉kFWPhyPacketPhyID␉␉␉␉= FWBitRange (2, 7),␊ |
90 | ␉kFWPhyPacketPhyIDPhase␉␉␉= FWBitRangePhase (2, 7)␊ |
91 | };␊ |
92 | ␊ |
93 | enum␊ |
94 | {␊ |
95 | ␉kSelfIDPacketSize␉␉␉␉= 8,␊ |
96 | ␉kMaxSelfIDs␉␉␉␉␉␉= 4␉// SelfID 0,1,3,8␊ |
97 | };␊ |
98 | ␊ |
99 | enum␊ |
100 | {␊ |
101 | ␉kFWConfigurationPacketID␉␉= 0,␊ |
102 | ␉kFWLinkOnPacketID␉␉␉␉= 1,␊ |
103 | ␉kFWSelfIDPacketID␉␉␉␉= 2␊ |
104 | };␊ |
105 | ␊ |
106 | enum␊ |
107 | {␊ |
108 | ␉kFWPhyConfigurationR␉␉␉␉␉= FW_BIT(8),␊ |
109 | ␉kFWPhyConfigurationT␉␉␉␉␉= FW_BIT(9),␊ |
110 | ␉kFWPhyConfigurationGapCnt␉␉␉␉= FWBitRange (10, 15),␊ |
111 | ␉kFWPhyConfigurationGapCntPhase␉␉␉= FWBitRangePhase (10, 15)␊ |
112 | };␊ |
113 | ␊ |
114 | enum␊ |
115 | {␊ |
116 | ␉kFWSelfIDPortStatusChild␉␉␉␉= 3,␊ |
117 | ␉kFWSelfIDPortStatusParent␉␉␉␉= 2,␊ |
118 | ␉kFWSelfIDPortStatusNotConnected␉␉␉= 1,␊ |
119 | ␉kFWSelfIDPortStatusNotPresent␉␉␉= 0,␊ |
120 | ␊ |
121 | ␉kFWSelfIDNoPower␉␉␉␉␉␉= 0,␊ |
122 | ␉kFWSelfIDSelfPowered15W␉␉␉␉␉= 1,␊ |
123 | ␉kFWSelfIDSelfPowered30W␉␉␉␉␉= 2,␊ |
124 | ␉kFWSelfIDSelfPowered45W␉␉␉␉␉= 3,␊ |
125 | ␉kFWSelfIDBusPowered1W␉␉␉␉␉= 4,␊ |
126 | ␉kFWSelfIDBusPowered3W␉␉␉␉␉= 5,␊ |
127 | ␉kFWSelfIDBusPowered6W␉␉␉␉␉= 6,␊ |
128 | ␉kFWSelfIDBusPowered10W␉␉␉␉␉= 7,␊ |
129 | ␊ |
130 | ␉kFWSelfIDPhyID␉␉␉␉␉␉␉= kFWPhyPacketPhyID,//zzz do we need or want this?␊ |
131 | ␉kFWSelfIDPhyIDPhase␉␉␉␉␉␉= kFWPhyPacketPhyIDPhase,␊ |
132 | ␉kFWSelfIDM␉␉␉␉␉␉␉␉= FW_BIT(31),␊ |
133 | ␊ |
134 | ␉kFWSelfID0L␉␉␉␉␉␉␉␉= FW_BIT(9),␊ |
135 | ␉kFWSelfID0GapCnt␉␉␉␉␉␉= FWBitRange (10, 15),␊ |
136 | ␉kFWSelfID0GapCntPhase␉␉␉␉␉= FWBitRangePhase (10, 15),␊ |
137 | ␉kFWSelfID0SP␉␉␉␉␉␉␉= FWBitRange (16, 17),␊ |
138 | ␉kFWSelfID0SPPhase␉␉␉␉␉␉= FWBitRangePhase (16, 17),␊ |
139 | ␉kFWSelfID0Del␉␉␉␉␉␉␉= FWBitRange (18, 19),␊ |
140 | ␉kFWSelfID0DelPhase␉␉␉␉␉␉= FWBitRangePhase (18, 19),␊ |
141 | ␉kFWSelfID0C␉␉␉␉␉␉␉␉= FW_BIT(20),␊ |
142 | ␉kFWSelfID0Pwr␉␉␉␉␉␉␉= FWBitRange (21, 23),␊ |
143 | ␉kFWSelfID0PwrPhase␉␉␉␉␉␉= FWBitRangePhase (21, 23),␊ |
144 | ␉kFWSelfID0P0␉␉␉␉␉␉␉= FWBitRange (24, 25),␊ |
145 | ␉kFWSelfID0P0Phase␉␉␉␉␉␉= FWBitRangePhase (24, 25),␊ |
146 | ␉kFWSelfID0P1␉␉␉␉␉␉␉= FWBitRange (26, 27),␊ |
147 | ␉kFWSelfID0P1Phase␉␉␉␉␉␉= FWBitRangePhase (26, 27),␊ |
148 | ␉kFWSelfID0P2␉␉␉␉␉␉␉= FWBitRange (28, 29),␊ |
149 | ␉kFWSelfID0P2Phase␉␉␉␉␉␉= FWBitRangePhase (28, 29),␊ |
150 | ␉kFWSelfID0I␉␉␉␉␉␉␉␉= FW_BIT(30),␊ |
151 | ␊ |
152 | ␉kFWSelfIDPacketType␉␉␉␉␉␉= FW_BIT(8),␊ |
153 | ␉kFWSelfIDNN␉␉␉␉␉␉␉␉= FWBitRange (9, 11),␊ |
154 | ␉kFWSelfIDNNPhase␉␉␉␉␉␉= FWBitRangePhase (9, 11),␊ |
155 | ␉kFWSelfIDNPa␉␉␉␉␉␉␉= FWBitRange (14, 15),␊ |
156 | ␉kFWSelfIDNPaPhase␉␉␉␉␉␉= FWBitRangePhase (14, 15),␊ |
157 | ␉kFWSelfIDNPb␉␉␉␉␉␉␉= FWBitRange (16, 17),␊ |
158 | ␉kFWSelfIDNPbPhase␉␉␉␉␉␉= FWBitRangePhase (16, 17),␊ |
159 | ␉kFWSelfIDNPc␉␉␉␉␉␉␉= FWBitRange (18, 19),␊ |
160 | ␉kFWSelfIDNPcPhase␉␉␉␉␉␉= FWBitRangePhase (18, 19),␊ |
161 | ␉kFWSelfIDNPd␉␉␉␉␉␉␉= FWBitRange (20, 21),␊ |
162 | ␉kFWSelfIDNPdPhase␉␉␉␉␉␉= FWBitRangePhase (20, 21),␊ |
163 | ␉kFWSelfIDNPe␉␉␉␉␉␉␉= FWBitRange (22, 23),␊ |
164 | ␉kFWSelfIDNPePhase␉␉␉␉␉␉= FWBitRangePhase (22, 23),␊ |
165 | ␉kFWSelfIDNPf␉␉␉␉␉␉␉= FWBitRange (24, 25),␊ |
166 | ␉kFWSelfIDNPfPhase␉␉␉␉␉␉= FWBitRangePhase (24, 25),␊ |
167 | ␉kFWSelfIDNPg␉␉␉␉␉␉␉= FWBitRange (26, 27),␊ |
168 | ␉kFWSelfIDNPgPhase␉␉␉␉␉␉= FWBitRangePhase (26, 27),␊ |
169 | ␉kFWSelfIDNPh␉␉␉␉␉␉␉= FWBitRange (28, 29),␊ |
170 | ␉kFWSelfIDNPhPhase␉␉␉␉␉␉= FWBitRangePhase (28, 29),␊ |
171 | ␉kFWSelfIDMore␉␉␉␉␉␉␉= FW_BIT(31)␊ |
172 | };␊ |
173 | ␊ |
174 | // Primary packet defs.␊ |
175 | enum␊ |
176 | {␊ |
177 | ␉kFWPacketTCode␉␉␉␉␉␉␉= FWBitRange (24, 27),␊ |
178 | ␉kFWPacketTCodePhase␉␉␉␉␉␉= FWBitRangePhase (24, 27)␊ |
179 | };␊ |
180 | ␊ |
181 | ␊ |
182 | enum␊ |
183 | {␊ |
184 | ␉kFWAsynchSpd␉␉␉␉␉␉␉= FWBitRange (14, 15),␊ |
185 | ␉kFWAsynchSpdPhase␉␉␉␉␉␉= FWBitRangePhase (14, 15),␊ |
186 | ␊ |
187 | ␉kFWAsynchTLabel␉␉␉␉␉␉␉= FWBitRange (16, 21),␊ |
188 | ␉kFWAsynchTLabelPhase␉␉␉␉␉= FWBitRangePhase (16, 21),␊ |
189 | ␉kFWAsynchTTotal ␉␉␉␉␉␉= ((0xffffffff & kFWAsynchTLabel) >> kFWAsynchTLabelPhase)+1,␊ |
190 | ␉kFWAsynchRt␉␉␉␉␉␉␉␉= FWBitRange (22, 23),␊ |
191 | ␉kFWAsynchRtPhase␉␉␉␉␉␉= FWBitRangePhase (22, 23),␊ |
192 | ␉kFWAsynchNew␉␉␉␉␉␉␉= 0,␊ |
193 | ␉kFWAsynchRetryA␉␉␉␉␉␉␉= 2,␊ |
194 | ␉kTIAsycnhRetryB␉␉␉␉␉␉␉= 3,␊ |
195 | ␊ |
196 | ␉kFWAsynchPriority␉␉␉␉␉␉= FWBitRange (28, 31),␊ |
197 | ␉kFWAsynchPriorityPhase␉␉␉␉␉= FWBitRangePhase (28, 31),␊ |
198 | ␊ |
199 | ␉kFWAsynchDestinationID␉␉␉␉␉= FWBitRange (0, 15),␊ |
200 | ␉kFWAsynchDestinationIDPhase␉␉␉␉= FWBitRangePhase (0, 15),␊ |
201 | ␊ |
202 | ␉kFWAsynchSourceID␉␉␉␉␉␉= FWBitRange (0, 15),␊ |
203 | ␉kFWAsynchSourceIDPhase␉␉␉␉␉= FWBitRangePhase (0, 15),␊ |
204 | ␊ |
205 | ␉kFWAsynchDestinationOffsetHigh␉␉␉= FWBitRange (16, 31),␊ |
206 | ␉kFWAsynchDestinationOffsetHighPhase␉␉= FWBitRangePhase (16, 31),␊ |
207 | ␊ |
208 | ␉kFWAsynchDestinationOffsetLow␉␉␉= FWBitRange (0, 31),␊ |
209 | ␉kFWAsynchDestinationOffsetLowPhase␉␉= FWBitRangePhase (0, 31),␊ |
210 | ␊ |
211 | ␉kFWAsynchDataLength␉␉␉␉␉␉= FWBitRange (0, 15),␊ |
212 | ␉kFWAsynchDataLengthPhase␉␉␉␉= FWBitRangePhase (0, 15),␊ |
213 | ␊ |
214 | ␉kFWAsynchExtendedTCode␉␉␉␉␉= FWBitRange (16, 31),␊ |
215 | ␉kFWAsynchExtendedTCodePhase␉␉␉␉= FWBitRangePhase (16, 31),␊ |
216 | ␊ |
217 | ␉kFWAsynchAckSent␉␉␉␉␉␉= FWBitRange (28, 31),␊ |
218 | ␉kFWAsynchAckSentPhase␉␉␉␉␉= FWBitRangePhase (28, 31),␊ |
219 | ␊ |
220 | ␉kFWAsynchRCode␉␉␉␉␉␉␉= FWBitRange (16, 19),␊ |
221 | ␉kFWAsynchRCodePhase␉␉␉␉␉␉= FWBitRangePhase (16, 19)␊ |
222 | };␊ |
223 | ␊ |
224 | enum␊ |
225 | {␊ |
226 | ␉kFWTCodeWriteQuadlet␉␉␉␉␉= 0,␊ |
227 | ␉kFWTCodeWriteBlock␉␉␉␉␉␉= 1,␊ |
228 | ␉kFWTCodeWriteResponse␉␉␉␉␉= 2,␊ |
229 | ␉kFWTCodeReadQuadlet␉␉␉␉␉␉= 4,␊ |
230 | ␉kFWTCodeReadBlock␉␉␉␉␉␉= 5,␊ |
231 | ␉kFWTCodeReadQuadletResponse␉␉␉␉= 6,␊ |
232 | ␉kFWTCodeReadBlockResponse␉␉␉␉= 7,␊ |
233 | ␉kFWTCodeCycleStart␉␉␉␉␉␉= 8,␊ |
234 | ␉kFWTCodeLock␉␉␉␉␉␉␉= 9,␊ |
235 | ␉kFWTCodeIsochronousBlock␉␉␉␉= 10,␊ |
236 | ␉kFWTCodeLockResponse␉␉␉␉␉= 11,␊ |
237 | ␉kFWTCodePHYPacket␉␉␉␉␉␉= 14␊ |
238 | };␊ |
239 | ␊ |
240 | enum␊ |
241 | {␊ |
242 | ␉kFWExtendedTCodeMaskSwap␉␉␉␉= 1,␊ |
243 | ␉kFWExtendedTCodeCompareSwap␉␉␉␉= 2,␊ |
244 | ␉kFWExtendedTCodeFetchAdd␉␉␉␉= 3,␊ |
245 | ␉kFWExtendedTCodeLittleAdd␉␉␉␉= 4,␊ |
246 | ␉kFWExtendedTCodeBoundedAdd␉␉␉␉= 5,␊ |
247 | ␉kFWExtendedTCodeWrapAdd␉␉␉␉␉= 6,␊ |
248 | ␉kFWExtendedTCodeVendorDependent␉␉␉= 7␊ |
249 | };␊ |
250 | ␊ |
251 | // debug boot-arg constants␊ |
252 | enum␊ |
253 | {␊ |
254 | ␉kFWDebugIgnoreNodeNone␉␉␉␉␉= 0xFFFFFFFF␊ |
255 | };␊ |
256 | ␊ |
257 | struct AsyncPendingTrans {␊ |
258 | IOFWAsyncCommand *␉fHandler;␊ |
259 | IOFWCommand *␉␉fAltHandler;␊ |
260 | int␉␉␉fTCode;␊ |
261 | bool␉␉fInUse;␊ |
262 | };␊ |
263 | ␊ |
264 | struct IOFWNodeScan {␊ |
265 | IOFireWireController ␉*␉fControl;␊ |
266 | FWAddress␉␉␉␉␉fAddr;␊ |
267 | UInt32␉␉␉␉␉␉fBuf[5];␉// Enough for bus info block␊ |
268 | UInt32 ␉␉␉␉␉*␉fSelfIDs;␊ |
269 | int␉␉␉␉␉␉␉fNumSelfIDs;␊ |
270 | int␉␉␉␉␉␉␉fROMSize;␊ |
271 | int␉␉␉␉␉␉␉fRead;␊ |
272 | IOFWReadQuadCommand ␉* ␉fCmd;␊ |
273 | ␉IOFWCompareAndSwapCommand * fLockCmd;␊ |
274 | ␉UInt32␉␉␉␉␉␉generation;␊ |
275 | UInt32␉␉␉␉␉␉fIRMBitBucketOld;␊ |
276 | UInt32␉␉␉␉␉␉fIRMBitBucketNew;␊ |
277 | bool␉␉␉␉␉␉fIRMisBad;␊ |
278 | bool␉␉␉␉␉␉speedChecking;␊ |
279 | bool␉␉␉␉␉␉fContenderNeedsChecking;␊ |
280 | bool␉␉␉␉␉␉fIRMCheckingRead;␊ |
281 | bool␉␉␉␉␉␉fIRMCheckingLock;␊ |
282 | ␉int␉␉␉␉␉␉␉fRetriesBumped;␊ |
283 | ␉bool␉␉␉␉␉␉fMustNotBeRoot;␊ |
284 | };␊ |
285 | ␊ |
286 | ␊ |
287 | typedef struct IOFWDuplicateGUIDStruct IOFWDuplicateGUIDRec;␊ |
288 | struct IOFWDuplicateGUIDStruct␊ |
289 | {␊ |
290 | ␉IOFWDuplicateGUIDRec␉␉* ␉fNextGUID;␊ |
291 | ␉CSRNodeUniqueID␉␉␉␉fGUID;␊ |
292 | ␉UInt32␉␉␉␉␉␉fLastGenSeen;␊ |
293 | };␊ |
294 | ␉␊ |
295 | ␊ |
296 | // IOFireWireDuplicateGUIDList␊ |
297 | //␊ |
298 | // A little class for keeping track of GUIDs which where we have observed 2 nodes with␊ |
299 | // the same GUID␊ |
300 | ␊ |
301 | class IOFireWireDuplicateGUIDList : public OSObject␊ |
302 | {␊ |
303 | OSDeclareDefaultStructors(IOFireWireDuplicateGUIDList);␊ |
304 | ␊ |
305 | private:␊ |
306 | IOFWDuplicateGUIDRec␉␉* ␉fFirstGUID;␊ |
307 | ␊ |
308 | protected:␊ |
309 | virtual void free();␊ |
310 | ␊ |
311 | public:␊ |
312 | ␊ |
313 | ␉static IOFireWireDuplicateGUIDList * create( void );␊ |
314 | ␊ |
315 | ␉void addDuplicateGUID( CSRNodeUniqueID guid, UInt32 gen );␊ |
316 | ␉void removeDuplicateGUID( CSRNodeUniqueID guid );␊ |
317 | ␉␊ |
318 | ␉bool findDuplicateGUID( CSRNodeUniqueID guid, UInt32 gen );␊ |
319 | ␉␊ |
320 | };␊ |
321 | ␊ |
322 | #define kMaxPendingTransfers kFWAsynchTTotal␊ |
323 | ␊ |
324 | class IOFireWireController;␊ |
325 | ␊ |
326 | #pragma mark -␊ |
327 | ␊ |
328 | /*! ␊ |
329 | ␉@class IOFireWireControllerAux␊ |
330 | */␊ |
331 | ␊ |
332 | class IOFireWireControllerAux : public IOFireWireBusAux␊ |
333 | {␊ |
334 | OSDeclareDefaultStructors(IOFireWireControllerAux)␊ |
335 | ␊ |
336 | ␉friend class IOFireWireController;␊ |
337 | ␉␊ |
338 | protected:␊ |
339 | ␉␊ |
340 | ␉IOFireWireController * ␉␉fPrimary;␊ |
341 | ␉␊ |
342 | ␉UInt8␉␉␉␉␉␉fMaxRec;␊ |
343 | ␉␊ |
344 | ␉UInt8␉␉␉␉␉␉fPadding;␊ |
345 | ␉UInt16␉␉␉␉␉␉fPadding2;␊ |
346 | ␉␊ |
347 | ␉IOFWUserObjectExporter *␉fSessionRefExporter;␊ |
348 | ␉␊ |
349 | ␉/*! ␊ |
350 | ␉␉@struct ExpansionData␊ |
351 | ␉␉@discussion This structure will be used to expand the capablilties of the class in the future.␊ |
352 | */ ␊ |
353 | ␉ ␊ |
354 | struct ExpansionData { };␊ |
355 | ␊ |
356 | ␉/*! ␊ |
357 | ␉␉@var reserved␊ |
358 | ␉␉Reserved for future use. (Internal use only) ␊ |
359 | ␉*/␊ |
360 | ␊ |
361 | ␉ExpansionData * reserved;␊ |
362 | ␊ |
363 | virtual bool ␉␉␉␉␉␉␉␉␉init ( ␊ |
364 | ␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉IOFireWireController * ␉primary );␊ |
365 | ␉virtual␉void ␉␉␉␉␉␉␉␉␉free ();␊ |
366 | ␉virtual IOFWDCLPool *␉␉␉␉␉␉␉createDCLPool ( unsigned capacity ) const ;␉␊ |
367 | ␉virtual UInt8␉␉␉␉␉␉␉␉␉getMaxRec( void );␊ |
368 | ␉␊ |
369 | ␉virtual UInt64 getFireWirePhysicalAddressMask( void );␊ |
370 | ␉virtual UInt32 getFireWirePhysicalAddressBits( void );␊ |
371 | ␉virtual UInt64 getFireWirePhysicalBufferMask( void );␊ |
372 | ␉virtual UInt32 getFireWirePhysicalBufferBits( void );␊ |
373 | ␉␊ |
374 | ␉virtual IOFWSimpleContiguousPhysicalAddressSpace * createSimpleContiguousPhysicalAddressSpace( vm_size_t size, IODirection direction );␊ |
375 | ␉virtual IOFWSimplePhysicalAddressSpace * createSimplePhysicalAddressSpace( vm_size_t size, IODirection direction );␊ |
376 | ␉␊ |
377 | ␉virtual IOFWUserObjectExporter * getSessionRefExporter( void );␊ |
378 | ␉␊ |
379 | private:␊ |
380 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 0);␊ |
381 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 1);␊ |
382 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 2);␊ |
383 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 3);␊ |
384 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 4);␊ |
385 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 5);␊ |
386 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 6);␊ |
387 | OSMetaClassDeclareReservedUnused(IOFireWireControllerAux, 7);␊ |
388 | ␊ |
389 | };␊ |
390 | ␊ |
391 | ␊ |
392 | #pragma mark -␊ |
393 | ␊ |
394 | /*! @class IOFireWireController␊ |
395 | */␊ |
396 | class IOFireWireController : public IOFireWireBus␊ |
397 | {␊ |
398 | OSDeclareAbstractStructors(IOFireWireController)␊ |
399 | ␊ |
400 | protected:␊ |
401 | enum busState {␊ |
402 | kStarting = 0,␉␉␊ |
403 | ␉␉kAsleep,␉␉␉// Link off, zzzzzz␊ |
404 | ␉␉kWaitingBusReset,␊ |
405 | kWaitingSelfIDs,␉// Bus has been reset, no selfIDs yet␊ |
406 | kWaitingScan,␉␉// Got selfIDs, waiting a bit before hitting lame devices␊ |
407 | kScanning,␉␉␉// Reading node ROMs␊ |
408 | kWaitingPrune,␉␉// Read all ROMs, pausing before pruning missing devices␊ |
409 | kRunning,␉␉␉// Normal happy state,␊ |
410 | ␉␉kWaitingBusResetStart␉// bus reset is desired, but not yet sent to the fwim␊ |
411 | };␊ |
412 | ␊ |
413 | ␉enum ResetState␊ |
414 | ␉{␊ |
415 | ␉␉kResetStateResetting,␊ |
416 | ␉␉kResetStateDisabled,␊ |
417 | ␉␉kResetStateArbitrated␊ |
418 | ␉};␊ |
419 | ␊ |
420 | ␉enum␊ |
421 | ␉{␊ |
422 | ␉␉kDisablePhysicalAccess ␉= (1 << 0)␊ |
423 | ␉};␊ |
424 | ␉␉␊ |
425 | struct timeoutQ: public IOFWCmdQ␊ |
426 | {␊ |
427 | IOTimerEventSource *fTimer;␊ |
428 | virtual void headChanged(IOFWCommand *oldHead);␊ |
429 | void busReset();␊ |
430 | };␊ |
431 | ␉␊ |
432 | struct pendingQ: public IOFWCmdQ␊ |
433 | {␊ |
434 | IOFWQEventSource *fSource;␊ |
435 | virtual void headChanged(IOFWCommand *oldHead);␊ |
436 | };␊ |
437 | ␊ |
438 | friend class IOFireWireLink;␊ |
439 | ␉friend class IOFireWireDevice;␊ |
440 | ␉friend class IOFireWireDeviceAux;␊ |
441 | ␉friend class IOFWAddressSpace;␊ |
442 | ␉friend class IOFWAddressSpaceAux;␊ |
443 | friend class IOFWPseudoAddressSpace;␊ |
444 | friend class IOFireWireSBP2ORB;␊ |
445 | ␉friend class IOFireWireSBP2Login;␊ |
446 | ␉friend class IOFWLocalIsochPort;␊ |
447 | ␉friend class IOFWCommand;␊ |
448 | friend class IOFireWireUnit;␊ |
449 | ␉friend class IOFireWirePCRSpace;␊ |
450 | friend class IOFireWireROMCache;␊ |
451 | friend class IOFWAsyncStreamCommand;␊ |
452 | ␉friend class IOFireWireAVCLocalUnit;␊ |
453 | ␉friend class IOFireWireAVCUnit;␊ |
454 | friend class IOFireWireAVCCommand;␊ |
455 | ␉friend class IOFireWirePowerManager;␊ |
456 | ␉friend class IOFWWriteQuadCommand;␊ |
457 | ␉friend class IOFWWriteCommand;␊ |
458 | ␉friend class IOFWCompareAndSwapCommand;␊ |
459 | ␉friend class IOFWAsyncCommand;␊ |
460 | ␉friend class IOFireWireAVCTargetSpace;␊ |
461 | ␉friend class AppleFWOHCI;␊ |
462 | ␉friend class IOFireWireNub;␊ |
463 | ␉friend class IOFWAsyncStreamListener;␊ |
464 | ␉friend class IOFireWireLocalNode;␊ |
465 | ␉friend class IOFireWireIRMAllocation;␊ |
466 | ␉friend class IOFWUserVectorCommand;␊ |
467 | ␉friend class IOFWAsyncPHYCommand;␊ |
468 | ␉friend class IOFWUserPHYPacketListener;␊ |
469 | ␉friend class IOFWAsyncStreamReceiver;␉␊ |
470 | ␉␊ |
471 | #if FIRELOGCORE␊ |
472 | ␉friend class IOFireLog;␊ |
473 | #endif␊ |
474 | ␊ |
475 | IOFireWireLink *␉␉␉fFWIM;␊ |
476 | IOFWWorkLoop *␉␉␉␉fWorkLoop;␊ |
477 | IOTimerEventSource *␉␉fTimer;␊ |
478 | OSSet *␉␉␉␉␉␉fLocalAddresses;␉// Collection of local adress spaces␊ |
479 | OSIterator *␉␉␉␉fSpaceIterator;␉␉// Iterator over local addr spaces␊ |
480 | ␊ |
481 | OSSet *␉␉␉␉␉␉fAllocatedChannels;␉// Need to be informed of bus resets␊ |
482 | OSIterator *␉␉␉␉fAllocChannelIterator;␉// Iterator over channels␊ |
483 | ␊ |
484 | ␉OSSet *␉␉␉␉␉␉fIRMAllocations;␉// Need to be informed of bus resets␊ |
485 | OSIterator *␉␉␉␉fIRMAllocationsIterator;␉// Iterator over channels␊ |
486 | ␉OSSet *␉␉␉␉␉␉fIRMAllocationsAllocated;␉// Need to be informed of bus resets␊ |
487 | ␊ |
488 | // Bus management variables (although we aren't a FireWire Bus Manager...)␊ |
489 | AbsoluteTime␉␉␉␉fResetTime;␉␉// Time of last reset␊ |
490 | UInt32␉␉␉␉␉␉fBusGeneration;␉␉// ID of current bus topology.␊ |
491 | UInt16␉␉␉␉␉␉fLocalNodeID;␉␉// ID of local node, ie. this computer␊ |
492 | UInt16␉␉␉␉␉␉fRootNodeID;␉␉// ID of root, ie. highest node id in use.␊ |
493 | UInt16␉␉␉␉␉␉fIRMNodeID;␉␉// ID of Isochronous resource manager, or kFWBadNodeID␊ |
494 | bool␉␉␉␉␉␉fBusMgr;␉␉// true if at least one node is bus manager capable␊ |
495 | IORegistryEntry *␉␉␉fNodes[kFWMaxNodesPerBus];␉// FireWire nodes on this bus␊ |
496 | UInt32 *␉␉␉␉␉fNodeIDs[kFWMaxNodesPerBus+1];␉// Pointer to SelfID list for each node␊ |
497 | ␉␉␉␉␉␉␉// +1 so we know how many selfIDs the last node has␊ |
498 | ␉␉␉␉␉␉␉␊ |
499 | UInt32␉␉␉␉␉␉fGapCount;␉␉// What we think the gap count should be␊ |
500 | //UInt8␉␉␉␉␉␉fSpeedCodes[(kFWMaxNodesPerBus+1)*kFWMaxNodesPerBus];␊ |
501 | UInt8␉␉␉␉␉␉fSpeedVector[((kFWMaxNodesPerBus+1)*kFWMaxNodesPerBus)/2];␊ |
502 | ␉␉␉␉␉␉// Max speed between two nodes␊ |
503 | busState␉␉␉␉␉fBusState;␉␉// Which state are we in?␊ |
504 | int␉␉␉␉␉␉␉fNumROMReads;␉␉// Number of device ROMs we are still reading␊ |
505 | // SelfIDs␊ |
506 | int␉␉␉␉␉␉␉fNumSelfIDs;␉␉// Total number of SelfID packets␊ |
507 | UInt32␉␉␉␉␉␉fSelfIDs[kMaxSelfIDs*kFWMaxNodesPerBus];␊ |
508 | ␊ |
509 | // The local device's Config ROM␊ |
510 | UInt32␉␉␉␉␉␉fROMHeader[5];␉␉// More or less fixed header and bus info block␊ |
511 | IOLocalConfigDirectory *␉fRootDir;␉␉// Local Config ROM root directory.␊ |
512 | ␊ |
513 | // log base 2 of maximum packet size the FWIM can send/receive␊ |
514 | // Normally calculated from bus info block.␊ |
515 | int␉fMaxSendLog;␊ |
516 | int fMaxRecvLog;␊ |
517 | ␊ |
518 | IOFWAddressSpace *␉␉␉fROMAddrSpace;␊ |
519 | IOMemoryDescriptor *␉␉fBadReadResponse;␉// Send back easily identified bad data to out of range addrs. ␊ |
520 | ␊ |
521 | // Array for outstanding requests (up to 64)␊ |
522 | AsyncPendingTrans␉␉␉fTrans[kMaxPendingTransfers];␊ |
523 | int␉␉␉␉␉␉␉fLastTrans;␊ |
524 | ␊ |
525 | // queue for executing commands that may timeout␊ |
526 | timeoutQ␉␉␉␉␉fTimeoutQ;␊ |
527 | ␊ |
528 | // queue for commands that can't execute yet␊ |
529 | pendingQ␉␉␉␉␉fPendingQ;␊ |
530 | ␊ |
531 | // queue for async commands interrupted by bus reset␊ |
532 | IOFWCmdQ␉␉␉␉␉fAfterResetHandledQ;␊ |
533 | ␊ |
534 | // Command to change bus state after a delay.␊ |
535 | IOFWDelayCommand *␉␉␉fDelayedStateChangeCmd;␊ |
536 | bool␉␉␉␉␉␉fDelayedStateChangeCmdNeedAbort;␊ |
537 | ␊ |
538 | ␉UInt32␉␉␉␉␉␉fDelayedPhyPacket;␊ |
539 | ␉bool␉␉␉␉␉␉fBusResetScheduled;␊ |
540 | ␉ResetState␉␉␉␉␉fBusResetState;␊ |
541 | ␉IOFWDelayCommand *␉␉␉fBusResetStateChangeCmd;␊ |
542 | ␉UInt32␉␉␉␉␉␉fBusResetDisabledCount;␊ |
543 | ␊ |
544 | #if FIRELOGCORE␊ |
545 | IOFireLogPublisher *␉␉fFireLogPublisher;␊ |
546 | #else␊ |
547 | void *␉␉␉␉␉␉fFireLogPublisher;␊ |
548 | #endif␊ |
549 | ␊ |
550 | OSData *␉␉␉␉␉fAllocatedAddresses;␊ |
551 | ␊ |
552 | ␉UInt32␉␉␉␉␉␉fDevicePruneDelay;␊ |
553 | ␉␊ |
554 | ␉IOFWPhysicalAccessMode␉␉fPhysicalAccessMode;␊ |
555 | ␉IOFWSecurityMode␉␉␉fSecurityMode;␊ |
556 | ␉IONotifier *␉␉␉␉fKeyswitchNotifier;␊ |
557 | ␉␊ |
558 | ␉IOFireWireIRM *␉␉␉␉fIRM;␊ |
559 | ␉IOFireWirePowerManager *␉fBusPowerManager;␊ |
560 | ␉␊ |
561 | ␉bool␉␉␉␉␉␉fGapCountMismatch;␊ |
562 | ␊ |
563 | ␉bool␉␉␉␉␉␉fUseHalfSizePackets;␊ |
564 | ␉bool␉␉␉␉␉␉fRequestedHalfSizePackets;␊ |
565 | ␊ |
566 | ␉IOFWNodeScan *␉␉␉␉␉fScans[kFWMaxNodesPerBus];␊ |
567 | ␉IOFireWireDuplicateGUIDList␉*␉fGUIDDups;␊ |
568 | ␉␊ |
569 | ␉bool␉␉␉␉␉␉fDelegateCycleMaster;␊ |
570 | ␉bool␉␉␉␉␉␉fBadIRMsKnown;␊ |
571 | ␉␊ |
572 | ␉UInt32␉␉␉␉␉␉fPreviousGap;␊ |
573 | ␉␊ |
574 | ␉UInt32␉␉␉␉␉␉fOutOfTLabels;␊ |
575 | ␉UInt32␉␉␉␉␉␉fOutOfTLabels10S;␊ |
576 | ␉UInt32␉␉␉␉␉␉fOutOfTLabelsThreshold;␊ |
577 | ␊ |
578 | #ifdef LEGACY_SHUTDOWN␊ |
579 | ␉IONotifier *␉␉␉␉fPowerEventNotifier;␊ |
580 | #endif␊ |
581 | ␊ |
582 | ␉bool␉␉␉␉␉␉fStarted;␊ |
583 | ␊ |
584 | ␉UInt32␉␉␉␉␉␉fIOCriticalSectionCount;␊ |
585 | ␉UInt32␉␉␉␉␉␉fHubPort;␊ |
586 | ␉UInt32␉␉␉␉␉␉fDebugIgnoreNode;␊ |
587 | ␊ |
588 | ␉OSSet *␉␉␉␉␉␉fLocalAsyncStreamReceivers; ␊ |
589 | OSIterator *␉␉␉␉fAsyncStreamReceiverIterator;␊ |
590 | ␊ |
591 | ␉bool␉␉␉␉␉␉fInstantiated;␊ |
592 | ␊ |
593 | ␉IOReturn␉␉␉␉␉fStartStatus;␊ |
594 | ␉UInt32␉␉␉␉␉␉fWaitingForSelfID;␊ |
595 | ␊ |
596 | ␉UInt32␉␉␉␉␉␉fForcedRootNodeID;␊ |
597 | ␉bool␉␉␉␉␉␉fNodeMustBeRootFlag;␊ |
598 | ␉bool␉␉␉␉␉␉fNodeMustNotBeRootFlag;␊ |
599 | ␉␊ |
600 | ␉UInt32␉␉␉␉␉␉fForcedGapCount;␊ |
601 | ␉bool␉␉␉␉␉␉fForcedGapFlag;␊ |
602 | ␊ |
603 | ␉OSSet *␉␉␉␉␉␉fPHYPacketListeners;␊ |
604 | ␉OSIterator *␉␉␉␉fPHYPacketListenersIterator;␊ |
605 | ␊ |
606 | ␉bool␉␉␉␉␉␉fDSLimited;␊ |
607 | ␉␊ |
608 | /*! @struct ExpansionData␊ |
609 | @discussion This structure will be used to expand the capablilties of the class in the future.␊ |
610 | */ ␊ |
611 | struct ExpansionData { };␊ |
612 | ␊ |
613 | /*! @var reserved␊ |
614 | Reserved for future use. (Internal use only) */␊ |
615 | ExpansionData *reserved;␊ |
616 | ␉␊ |
617 | static void clockTick(OSObject *, IOTimerEventSource *);␊ |
618 | static void readROMGlue(void *refcon, IOReturn status,␊ |
619 | ␉␉␉IOFireWireNub *device, IOFWCommand *fwCmd);␊ |
620 | static void delayedStateChange(void *refcon, IOReturn status,␊ |
621 | IOFireWireBus *bus, IOFWBusCommand *fwCmd);␊ |
622 | ␊ |
623 | virtual void processBusReset();␊ |
624 | virtual void processSelfIDs(UInt32 *IDs, int numIDs, UInt32 *ownIDs, int numOwnIDs);␊ |
625 | virtual void processTimeout(IOTimerEventSource *src);␊ |
626 | virtual void processRcvPacket( UInt32 *data, int numQuads, IOFWSpeed speed );␊ |
627 | virtual void processWriteRequest(UInt16 sourceID, UInt32 tlabel,␊ |
628 | ␉␉␉␉UInt32 *hdr, void *buf, int len, IOFWSpeed speed);␊ |
629 | virtual void processLockRequest(UInt16 sourceID, UInt32 tlabel,␊ |
630 | ␉␉␉␉UInt32 *hdr, void *buf, int len, IOFWSpeed speed);␊ |
631 | ␊ |
632 | // Process read from a local address, return rcode␊ |
633 | virtual UInt32 doReadSpace(UInt16 nodeID, IOFWSpeed &speed, FWAddress addr, UInt32 len,␊ |
634 | IOMemoryDescriptor **buf, IOByteCount * offset, IODMACommand **dma_command,␊ |
635 | IOFWRequestRefCon refcon);␊ |
636 | ␊ |
637 | // Process write to a local address, return rcode␊ |
638 | virtual UInt32 doWriteSpace(UInt16 nodeID, IOFWSpeed &speed, FWAddress addr, UInt32 len,␊ |
639 | const void *buf, IOFWRequestRefCon refcon);␊ |
640 | ␊ |
641 | // Process lock to a local address, return rcode␊ |
642 | UInt32 doLockSpace(UInt16 nodeID, IOFWSpeed &speed, FWAddress addr, UInt32 inlen,␊ |
643 | const UInt32 *newVal, UInt32 &outLen, UInt32 *oldVal,␊ |
644 | UInt32 extType, IOFWRequestRefCon refcon);␊ |
645 | ␊ |
646 | virtual void updatePlane();␊ |
647 | virtual void startBusScan();␊ |
648 | ␊ |
649 | // Called when all devices on bus have been examined␊ |
650 | virtual void finishedBusScan();␊ |
651 | ␊ |
652 | virtual void buildTopology(bool doFWPlane);␊ |
653 | ␊ |
654 | virtual void readDeviceROM(IOFWNodeScan *refCon, IOReturn status);␊ |
655 | ␊ |
656 | virtual IOReturn UpdateROM();␊ |
657 | virtual IOReturn allocAddress(IOFWAddressSpace *space);␊ |
658 | virtual void freeAddress(IOFWAddressSpace *space);␊ |
659 | ␊ |
660 | ␉IOFireWireBusAux * createAuxiliary( void );␊ |
661 | ␉␊ |
662 | public:␊ |
663 | ␊ |
664 | // Initialization␊ |
665 | virtual bool init(IOFireWireLink *fwim);␊ |
666 | virtual void free();␊ |
667 | virtual bool start(IOService *provider);␊ |
668 | virtual void stop( IOService * provider );␊ |
669 | virtual bool finalize( IOOptionBits options );␊ |
670 | virtual bool requestTerminate( IOService * provider, IOOptionBits options );␊ |
671 | ␊ |
672 | ␉// Power management␊ |
673 | virtual IOReturn setPowerState ( unsigned long powerStateOrdinal, IOService* whatDevice );␊ |
674 | ␊ |
675 | // Implement IOService::getWorkLoop␊ |
676 | virtual IOWorkLoop *getWorkLoop() const;␊ |
677 | ␊ |
678 | // Allocate struct for tracking a transaction␊ |
679 | virtual AsyncPendingTrans *allocTrans(IOFWAsyncCommand *cmd=NULL);␊ |
680 | virtual void freeTrans(AsyncPendingTrans *trans);␊ |
681 | ␊ |
682 | // Really public methods␊ |
683 | ␊ |
684 | virtual IOReturn getCycleTime(UInt32 &cycleTime);␊ |
685 | virtual IOReturn getBusCycleTime(UInt32 &busTime, UInt32 &cycleTime);␊ |
686 | ␊ |
687 | // Methods to manipulate the local Config ROM␊ |
688 | virtual IOReturn AddUnitDirectory(IOLocalConfigDirectory *unitDir);␊ |
689 | virtual IOReturn RemoveUnitDirectory(IOLocalConfigDirectory *unitDir);␊ |
690 | ␊ |
691 | // Cause a bus reset␊ |
692 | virtual IOReturn resetBus();␊ |
693 | ␊ |
694 | // Send async request packets␊ |
695 | virtual IOReturn asyncRead(␉UInt32 ␉␉␉␉generation, ␊ |
696 | ␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉nodeID, ␊ |
697 | ␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉addrHi, ␊ |
698 | ␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉addrLo,␊ |
699 | int ␉␉␉␉speed, ␊ |
700 | ␉␉␉␉␉␉␉␉int ␉␉␉␉label, ␊ |
701 | ␉␉␉␉␉␉␉␉int ␉␉␉␉size, ␊ |
702 | ␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉cmd );␊ |
703 | ␊ |
704 | virtual IOReturn asyncWrite(␉UInt32 ␉␉␉␉␉generation, ␊ |
705 | ␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉nodeID, ␊ |
706 | ␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉addrHi, ␊ |
707 | ␉␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉␉addrLo,␊ |
708 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉speed, ␊ |
709 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉label, ␊ |
710 | ␉␉␉␉␉␉␉␉␉IOMemoryDescriptor *␉buf, ␊ |
711 | ␉␉␉␉␉␉␉␉␉IOByteCount ␉␉␉offset,␊ |
712 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉size, ␊ |
713 | ␉␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉␉cmd );␊ |
714 | ␉␉␉␉␊ |
715 | /* DEPRECATED */ virtual IOReturn asyncWrite(␉UInt32 ␉␉␉␉generation, ␊ |
716 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉nodeID, ␊ |
717 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉addrHi, ␊ |
718 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉addrLo,␊ |
719 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉speed, ␊ |
720 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉label, ␊ |
721 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉void *␉␉␉␉data, ␊ |
722 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉size, ␊ |
723 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉cmd );␊ |
724 | ␊ |
725 | /* DEPRECATED */ virtual IOReturn asyncLock(␉UInt32 ␉␉␉␉generation, ␊ |
726 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉nodeID, ␊ |
727 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉addrHi, ␊ |
728 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉addrLo,␊ |
729 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉speed, ␊ |
730 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉label, ␊ |
731 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉type, ␊ |
732 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉void *␉␉␉␉data, ␊ |
733 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉int ␉␉␉␉size, ␊ |
734 | ␉/* DEPRECATED */␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉cmd);␊ |
735 | ␊ |
736 | ␊ |
737 | // Send async read response packets␊ |
738 | // useful for pseudo address spaces that require servicing outside the FireWire work loop.␊ |
739 | virtual IOReturn asyncReadResponse(␉UInt32 ␉␉␉␉␉generation, ␊ |
740 | ␉␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉nodeID, ␊ |
741 | ␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉speed,␊ |
742 | ␉␉␉␉␉␉␉␉␉␉IOMemoryDescriptor *␉buf, ␊ |
743 | ␉␉␉␉␉␉␉␉␉␉IOByteCount ␉␉␉offset, ␊ |
744 | ␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉len,␊ |
745 | ␉␉␉␉␉␉␉␉␉␉IOFWRequestRefCon ␉␉refcon );␊ |
746 | ␊ |
747 | virtual IOReturn asyncLockResponse( UInt32 ␉␉␉␉␉generation, ␊ |
748 | ␉␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉nodeID, ␊ |
749 | ␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉speed,␊ |
750 | IOMemoryDescriptor *␉buf, ␊ |
751 | ␉␉␉␉␉␉␉␉␉␉IOByteCount ␉␉␉offset, ␊ |
752 | ␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉len,␊ |
753 | IOFWRequestRefCon ␉␉refcon );␊ |
754 | ␊ |
755 | // Try to fix whatever might have caused the other device to not respond␊ |
756 | virtual IOReturn handleAsyncTimeout(IOFWAsyncCommand *cmd);␊ |
757 | ␊ |
758 | // Convert a firewire nodeID into the IOFireWireDevice for it␊ |
759 | virtual IOFireWireDevice * nodeIDtoDevice(UInt32 generation, UInt16 nodeID);␊ |
760 | ␊ |
761 | // Add/remove a channel from the list informed of bus resets␊ |
762 | virtual void addAllocatedChannel(IOFWIsochChannel *channel);␊ |
763 | virtual void removeAllocatedChannel(IOFWIsochChannel *channel);␊ |
764 | ␊ |
765 | ␉// Add/remove a IRM allocation from the list informed of bus resets␊ |
766 | virtual void addIRMAllocation(IOFireWireIRMAllocation *irmAllocation);␊ |
767 | virtual void removeIRMAllocation(IOFireWireIRMAllocation *irmAllocation);␊ |
768 | ␉␊ |
769 | // Create an Isochronous Channel object␊ |
770 | // doIRM = true => allocate channel and bandwith in Isochronous Resource Manager␊ |
771 | // packetSize packet size (in bytes), used to calculate bandwidth needed.␊ |
772 | virtual IOFWIsochChannel *createIsochChannel(␊ |
773 | ␉bool doIRM, UInt32 packetSize, IOFWSpeed prefSpeed,␊ |
774 | ␉FWIsochChannelForceStopNotificationProc stopProc=NULL,␊ |
775 | ␉void *stopRefCon=NULL);␊ |
776 | ␊ |
777 | // Create a local isochronous port to run the given DCL program␊ |
778 | // if task is 0, the DCL program is for the kernel task,␊ |
779 | // otherwise all DCL pointers are valid in the specified task.␊ |
780 | // opcodes is also pointer valid in the specified task.␊ |
781 | virtual IOFWLocalIsochPort *createLocalIsochPort(bool talking,␊ |
782 | DCLCommand* opcodes, DCLTaskInfo *info = 0,␊ |
783 | ␉UInt32 startEvent = 0, UInt32 startState = 0, UInt32 startMask = 0);␊ |
784 | ␊ |
785 | // Execute specified function on workloop after specified delay␊ |
786 | // Returned command is for delay, call it's cancel() function to cancel timeout.␊ |
787 | virtual IOFWDelayCommand * createDelayedCmd(UInt32 uSecDelay, FWBusCallback func, void *refcon);␊ |
788 | ␊ |
789 | virtual IOFWPhysicalAddressSpace *createPhysicalAddressSpace(IOMemoryDescriptor *mem);␊ |
790 | virtual IOFWPseudoAddressSpace *createPseudoAddressSpace(FWAddress *addr, UInt32 len,␊ |
791 | FWReadCallback reader, FWWriteCallback writer, void *refcon);␊ |
792 | ␊ |
793 | // Extract info about the async request ␊ |
794 | virtual bool isLockRequest(IOFWRequestRefCon refcon);␊ |
795 | virtual bool isQuadRequest(IOFWRequestRefCon refcon);␊ |
796 | virtual UInt32 getExtendedTCode(IOFWRequestRefCon refcon);␊ |
797 | ␊ |
798 | // Inline accessors for protected member variables␊ |
799 | IOFWCmdQ &getTimeoutQ();␊ |
800 | ␉IOFWCmdQ &getPendingQ();␊ |
801 | IOFWCmdQ &getAfterResetHandledQ();␊ |
802 | IOFireWireLink * getLink() const;␊ |
803 | ␊ |
804 | IOLocalConfigDirectory *getRootDir() const;␊ |
805 | bool checkGeneration(UInt32 gen) const;␊ |
806 | UInt32 getGeneration() const;␊ |
807 | UInt16 getLocalNodeID() const;␊ |
808 | IOReturn getIRMNodeID(UInt32 &generation, UInt16 &id);␊ |
809 | ␊ |
810 | const AbsoluteTime * getResetTime() const;␊ |
811 | ␊ |
812 | IOFWSpeed FWSpeed(UInt16 nodeAddress) const;␊ |
813 | IOFWSpeed FWSpeed(UInt16 nodeA, UInt16 nodeB) const;␊ |
814 | ␊ |
815 | // How big (as a power of two) can packets sent to/received from the node be?␊ |
816 | virtual int maxPackLog(bool forSend, UInt16 nodeAddress) const;␊ |
817 | ␊ |
818 | // How big (as a power of two) can packets sent from A to B be?␊ |
819 | virtual int maxPackLog(UInt16 nodeA, UInt16 nodeB) const;␊ |
820 | ␊ |
821 | // Force given node to be root (via root holdoff Phy packet)␊ |
822 | virtual IOReturn makeRoot(UInt32 generation, UInt16 nodeID) ;␊ |
823 | ␊ |
824 | virtual IOFWPseudoAddressSpace *createInitialAddressSpace(UInt32 addressLo, UInt32 len,␊ |
825 | FWReadCallback reader, FWWriteCallback writer, void *refcon);␊ |
826 | ␊ |
827 | virtual IOFWAddressSpace *getAddressSpace(FWAddress address);␊ |
828 | ␊ |
829 | // Extract info about the async request - was the request ack'ed complete already?␊ |
830 | virtual bool isCompleteRequest(IOFWRequestRefCon refcon);␊ |
831 | ␊ |
832 | // Are we currently scanning the bus?␊ |
833 | bool scanningBus() const;␊ |
834 | ␊ |
835 | protected:␊ |
836 | ␊ |
837 | void openGate();␊ |
838 | void closeGate();␊ |
839 | ␉␉␊ |
840 | protected: ␊ |
841 | ␉virtual void doBusReset( void );␊ |
842 | ␉static void resetStateChange( void *refcon, IOReturn status,␊ |
843 | ␉␉␉␉␉␉␉␉ IOFireWireBus *bus, IOFWBusCommand *fwCmd);␊ |
844 | ␊ |
845 | public:␊ |
846 | ␉virtual IOReturn disableSoftwareBusResets( void );␊ |
847 | ␉virtual void enableSoftwareBusResets( void );␊ |
848 | ␊ |
849 | virtual IOFWAsyncStreamCommand * createAsyncStreamCommand( UInt32 generation,␊ |
850 | ␉␉␉UInt32 channel, UInt32 sync, UInt32 tag, IOMemoryDescriptor *hostMem,␊ |
851 | ␉␉␉␉UInt32 size, int speed,FWAsyncStreamCallback completion, void *refcon);␊ |
852 | ␊ |
853 | ␉virtual␉IOReturn asyncStreamWrite(UInt32 generation,␊ |
854 | int speed, int tag, int sync, int channel,␊ |
855 | IOMemoryDescriptor *buf, IOByteCount offset,␊ |
856 | ␉int size, IOFWAsyncStreamCommand *cmd);␊ |
857 | ␉␉␉␉␉␊ |
858 | protected:␊ |
859 | ␉bool inGate();␊ |
860 | ␊ |
861 | virtual IOReturn allocatePseudoAddress(FWAddress *addr, UInt32 lenDummy);␊ |
862 | virtual void freePseudoAddress(FWAddress addr, UInt32 lenDummy);␊ |
863 | ␉␊ |
864 | ␉virtual IORegistryEntry * createDummyRegistryEntry( IOFWNodeScan *scan );␊ |
865 | ␊ |
866 | ␉static IOFireWireLocalNode * getLocalNode(IOFireWireController *control);␊ |
867 | ␉␊ |
868 | ␉virtual void setPhysicalAccessMode( IOFWPhysicalAccessMode mode );␊ |
869 | ␉virtual IOFWPhysicalAccessMode getPhysicalAccessMode( void );␊ |
870 | ␉virtual void physicalAccessProcessBusReset( void );␊ |
871 | ␉virtual void setNodeIDPhysicalFilter( UInt16 nodeID, bool state );␊ |
872 | ␉␊ |
873 | ␉virtual void initSecurity( void );␊ |
874 | ␉virtual void freeSecurity( void );␊ |
875 | ␉static bool serverKeyswitchCallback( void * target, void * refCon, IOService * service, IONotifier * notifier );␊ |
876 | ␉virtual void setSecurityMode( IOFWSecurityMode mode );␊ |
877 | ␉virtual IOFWSecurityMode getSecurityMode( void );␊ |
878 | ␊ |
879 | ␉virtual IOReturn createTimeoutQ( void );␊ |
880 | ␉virtual void destroyTimeoutQ( void );␊ |
881 | ␉virtual IOReturn createPendingQ( void );␊ |
882 | ␉virtual void destroyPendingQ( void );␊ |
883 | ␊ |
884 | ␉virtual UInt32 countNodeIDChildren( UInt16 nodeID, int hub_port = 0, int * hubChildRemainder = NULL, bool * hubParentFlag = NULL );␊ |
885 | ␊ |
886 | public:␊ |
887 | ␉virtual UInt32 hopCount(UInt16 nodeAAddress, UInt16 nodeBAddress );␊ |
888 | ␉virtual UInt32 hopCount(UInt16 nodeAAddress );␊ |
889 | ␉␊ |
890 | ␉virtual IOFireWirePowerManager * getBusPowerManager( void );␊ |
891 | ␊ |
892 | protected:␊ |
893 | ␉virtual void handleARxReqIntComplete();␊ |
894 | ␊ |
895 | virtual IOReturn asyncLock(␉UInt32 ␉␉␉␉␉generation, ␊ |
896 | ␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉nodeID, ␊ |
897 | ␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉addrHi, ␊ |
898 | ␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉␉addrLo,␊ |
899 | ␉␉␉␉␉␉␉␉int ␉␉␉␉␉speed, ␊ |
900 | ␉␉␉␉␉␉␉␉int ␉␉␉␉␉label, ␊ |
901 | ␉␉␉␉␉␉␉␉int ␉␉␉␉␉type, ␊ |
902 | ␉␉␉␉␉␉␉␉IOMemoryDescriptor *␉buf, ␊ |
903 | ␉␉␉␉␉␉␉␉IOByteCount ␉␉␉offset,␊ |
904 | ␉␉␉␉␉␉␉␉int ␉␉␉␉␉size, ␊ |
905 | ␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉␉cmd );␊ |
906 | ␊ |
907 | virtual IOReturn asyncWrite(␉UInt32 ␉␉␉␉␉generation, ␊ |
908 | ␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉nodeID, ␊ |
909 | ␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉␉addrHi, ␊ |
910 | ␉␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉␉addrLo,␊ |
911 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉speed, ␊ |
912 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉label, ␊ |
913 | ␉␉␉␉␉␉␉␉␉IOMemoryDescriptor *␉buf, ␊ |
914 | ␉␉␉␉␉␉␉␉␉IOByteCount ␉␉␉offset,␊ |
915 | ␉␉␉␉␉␉␉␉␉int ␉␉␉␉␉size, ␊ |
916 | ␉␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉␉cmd,␊ |
917 | ␉␉␉␉␉␉␉␉␉IOFWWriteFlags ␉␉␉flags );␊ |
918 | ␊ |
919 | protected:␊ |
920 | ␉bool delayedStateCommandInUse() const;␊ |
921 | ␉void enterBusResetDisabledState( );␊ |
922 | ␉␊ |
923 | ␉virtual UInt32 getPortNumberFromIndex( UInt16 index );␊ |
924 | ␉␉␉␉␉␉␉␉␉␉␉␉␊ |
925 | virtual bool checkForDuplicateGUID(IOFWNodeScan *scan, CSRNodeUniqueID *currentGUIDs );␊ |
926 | virtual void updateDevice(IOFWNodeScan *scan );␊ |
927 | virtual bool AssignCycleMaster();␊ |
928 | ␊ |
929 | public:␊ |
930 | ␊ |
931 | ␉IOReturn clipMaxRec2K(Boolean clipMaxRec );␊ |
932 | ␉void setNodeSpeed( UInt16 nodeAddress, IOFWSpeed speed );␊ |
933 | ␉void useHalfSizePackets( void );␊ |
934 | ␉void disablePhyPortOnSleepForNodeID( UInt32 nodeID );␊ |
935 | ␊ |
936 | ␉IOReturn handleAsyncCompletion( IOFWCommand *cmd, IOReturn status );␊ |
937 | ␉void processCycle64Int();␊ |
938 | ␊ |
939 | #ifdef LEGACY_SHUTDOWN␊ |
940 | ␉static IOReturn systemShutDownHandler( void * target, void * refCon,␊ |
941 | UInt32 messageType, IOService * service,␊ |
942 | void * messageArgument, vm_size_t argSize );␊ |
943 | #else␊ |
944 | virtual void systemWillShutdown( IOOptionBits specifier );␊ |
945 | #endif␊ |
946 | ␊ |
947 | ␉IOReturn beginIOCriticalSection( void );␊ |
948 | ␉void endIOCriticalSection( void );␊ |
949 | ␊ |
950 | protected:␉␊ |
951 | ␉IOReturn poweredStart( void );␊ |
952 | ␉void setNodeSpeed( UInt16 nodeA, UInt16 nodeB, UInt8 speed );␊ |
953 | ␉void setNodeSpeed( UInt16 nodeAddress, UInt8 speed );␊ |
954 | ␊ |
955 | public:␊ |
956 | ␉bool isPhysicalAccessEnabledForNodeID( UInt16 nodeID );␊ |
957 | ␉␊ |
958 | ␉// Allocate IRM bandwidth if the specified generation is the current FireWire generation.␊ |
959 | ␉IOReturn allocateIRMBandwidthInGeneration(UInt32 bandwidthUnits, UInt32 generation) ;␊ |
960 | ␉␊ |
961 | ␉// Release IRM bandwidth if the specified generation is the current FireWire generation.␊ |
962 | ␉IOReturn releaseIRMBandwidthInGeneration(UInt32 bandwidthUnits, UInt32 generation) ;␊ |
963 | ␉␊ |
964 | ␉// Allocate IRM channel if the specified generation is the current FireWire generation.␊ |
965 | ␉IOReturn allocateIRMChannelInGeneration(UInt8 isochChannel, UInt32 generation) ;␊ |
966 | ␉␊ |
967 | ␉// Release IRM channel if the specified generation is the current FireWire generation.␊ |
968 | ␉IOReturn releaseIRMChannelInGeneration(UInt8 isochChannel, UInt32 generation) ;␊ |
969 | ␉␊ |
970 | ␉// Create an IOFireWireIRMAllocation object which can be used to allocate isoch resources that are automatically reallocated after bus-resets!␊ |
971 | ␉IOFireWireIRMAllocation *createIRMAllocation(Boolean releaseIRMResourcesOnFree = true, ␊ |
972 | ␉␉␉␉␉␉␉␉␉␉␉␉IOFireWireIRMAllocation::AllocationLostNotificationProc allocationLostProc = NULL,␊ |
973 | ␉␉␉␉␉␉␉␉␉␉␉␉void *pLostNotificationProcRefCon = NULL);␊ |
974 | ␊ |
975 | ␉IOFWAsyncStreamListener *createAsyncStreamListener( UInt32␉channel, FWAsyncStreamReceiveCallback proc, void *refcon );␊ |
976 | ␊ |
977 | ␉void removeAsyncStreamListener( IOFWAsyncStreamListener *listener );␊ |
978 | ␊ |
979 | ␉IOFWSpeed getBroadcastSpeed(){ return FWSpeed( fLocalNodeID ); };␊ |
980 | ␊ |
981 | private:␊ |
982 | ␊ |
983 | ␉IOFWAsyncStreamReceiver *allocAsyncStreamReceiver( UInt32 channel, FWAsyncStreamReceiveCallback proc, void *refcon );␊ |
984 | ␊ |
985 | ␉IOFWAsyncStreamReceiver *getAsyncStreamReceiver( UInt32 channel );␊ |
986 | ␊ |
987 | ␉void freeAllAsyncStreamReceiver();␊ |
988 | ␊ |
989 | ␉void activateAsyncStreamReceivers();␊ |
990 | ␊ |
991 | ␉void deactivateAsyncStreamReceivers();␊ |
992 | ␊ |
993 | protected:␊ |
994 | ␉IOService *findKeyswitchDevice( void );␊ |
995 | ␉void suspendBus( void );␊ |
996 | ␊ |
997 | public:␊ |
998 | ␉virtual IOReturn␉␉␉asyncRead(␉UInt32 ␉␉␉␉generation, ␊ |
999 | ␉␉␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉nodeID, ␊ |
1000 | ␉␉␉␉␉␉␉␉␉␉␉UInt16 ␉␉␉␉addrHi, ␊ |
1001 | ␉␉␉␉␉␉␉␉␉␉␉UInt32 ␉␉␉␉addrLo,␊ |
1002 | ␉␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉speed, ␊ |
1003 | ␉␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉label, ␊ |
1004 | ␉␉␉␉␉␉␉␉␉␉␉int ␉␉␉␉size, ␊ |
1005 | ␉␉␉␉␉␉␉␉␉␉␉IOFWAsyncCommand *␉cmd,␊ |
1006 | ␉␉␉␉␉␉␉␉␉␉␉IOFWReadFlags␉␉flags );␊ |
1007 | ␊ |
1008 | ␉void checkProgress( void );␊ |
1009 | ␊ |
1010 | ␉void terminateDevice( IOFireWireDevice * device );␊ |
1011 | ␊ |
1012 | ␉void nodeMustBeRoot( UInt32 nodeID );␊ |
1013 | ␊ |
1014 | ␉void nodeMustNotBeRoot( UInt32 nodeID );␉␊ |
1015 | ␊ |
1016 | ␉void setGapCount( UInt32␉gapCount );␉␊ |
1017 | ␉␊ |
1018 | ␉IOReturn asyncPHYPacket(␉UInt32␉␉␉␉␉generation, ␊ |
1019 | ␉␉␉␉␉␉␉␉UInt32␉␉␉␉␉data, ␊ |
1020 | ␉␉␉␉␉␉␉␉UInt32␉␉␉␉␉data2, ␊ |
1021 | ␉␉␉␉␉␉␉␉IOFWAsyncPHYCommand *␉cmd );␊ |
1022 | ␊ |
1023 | IOFWAsyncPHYCommand * createAsyncPHYCommand(␉UInt32␉␉␉␉generation,␊ |
1024 | ␉␉␉␉␉␉␉␉␉␉␉␉␉UInt32␉␉␉␉data1, ␊ |
1025 | ␉␉␉␉␉␉␉␉␉␉␉␉␉UInt32␉␉␉␉data2,␉␉␉␊ |
1026 | ␉␉␉␉␉␉␉␉␉␉␉␉␉FWAsyncPHYCallback␉completion, ␊ |
1027 | ␉␉␉␉␉␉␉␉␉␉␉␉␉void *␉␉␉␉refcon, ␊ |
1028 | ␉␉␉␉␉␉␉␉␉␉␉␉␉bool␉␉␉␉failOnReset );␊ |
1029 | ␉␊ |
1030 | private:␊ |
1031 | ␉AsyncPendingTrans * allocTrans( IOFWAsyncCommand * cmd, IOFWCommand * altcmd );␊ |
1032 | ␊ |
1033 | public:␊ |
1034 | ␊ |
1035 | ␉IOReturn activatePHYPacketListener( IOFWPHYPacketListener * listener );␊ |
1036 | ␉void deactivatePHYPacketListener( IOFWPHYPacketListener * listener );␊ |
1037 | ␊ |
1038 | ␉IOFWPHYPacketListener * createPHYPacketListener( FWPHYPacketCallback proc, void * refcon );␊ |
1039 | ␊ |
1040 | private:␊ |
1041 | ␉void processPHYPacket( UInt32 data1, UInt32 data2 );␊ |
1042 | ␉void enterLoggingMode( void );␊ |
1043 | ␊ |
1044 | public:␊ |
1045 | ␉IOReturn getCycleTimeAndUpTime( UInt32 &cycleTime, UInt64 &uptime );␊ |
1046 | ␊ |
1047 | protected:␊ |
1048 | ␉void removeAsyncStreamReceiver( IOFWAsyncStreamReceiver *receiver );␊ |
1049 | ␉␊ |
1050 | public:␊ |
1051 | ␊ |
1052 | ␉// Create a multi-isoch-receive listener␊ |
1053 | ␉IOFireWireMultiIsochReceiveListener * createMultiIsochReceiveListener(UInt32 channel,␊ |
1054 | ␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉ FWMultiIsochReceiveListenerCallback callback,␊ |
1055 | ␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉ void *pCallbackRefCon,␊ |
1056 | ␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉␉ FWMultiIsochReceiveListenerParams *pListenerParams = NULL);␊ |
1057 | ␉␊ |
1058 | ␉// Activate a multi-isoch-receive listener␊ |
1059 | ␉IOReturn activateMultiIsochReceiveListener(IOFireWireMultiIsochReceiveListener *pListener);␊ |
1060 | ␉␊ |
1061 | ␉// Deactivate a multi-isoch-receive listener␊ |
1062 | ␉IOReturn deactivateMultiIsochReceiveListener(IOFireWireMultiIsochReceiveListener *pListener);␊ |
1063 | ␊ |
1064 | ␉// Call for client to specify he is done with a multi-isoch receiver isoch packet␊ |
1065 | ␉void clientDoneWithMultiIsochReceivePacket(IOFireWireMultiIsochReceivePacket *pPacket);␊ |
1066 | ␊ |
1067 | public:␊ |
1068 | virtual IOFWAsyncStreamCommand * createAsyncStreamCommand( UInt32 generation,␊ |
1069 | ␉␉␉UInt32 channel, UInt32 sync, UInt32 tag, IOMemoryDescriptor *hostMem,␊ |
1070 | ␉␉␉␉UInt32 size, int speed,FWAsyncStreamCallback completion, void *refcon, bool␉failOnReset);␊ |
1071 | ␊ |
1072 | private:␊ |
1073 | ␉void addToIRMAllocationSet(IOFireWireIRMAllocation *anObject);␊ |
1074 | ␉void removeFromIRMAllocationSet(IOFireWireIRMAllocation *anObject);␊ |
1075 | ␉␊ |
1076 | protected:␉␊ |
1077 | ␉OSMetaClassDeclareReservedUnused(IOFireWireController, 0);␊ |
1078 | OSMetaClassDeclareReservedUnused(IOFireWireController, 1);␊ |
1079 | OSMetaClassDeclareReservedUnused(IOFireWireController, 2);␊ |
1080 | OSMetaClassDeclareReservedUnused(IOFireWireController, 3);␊ |
1081 | OSMetaClassDeclareReservedUnused(IOFireWireController, 4);␊ |
1082 | OSMetaClassDeclareReservedUnused(IOFireWireController, 5);␊ |
1083 | OSMetaClassDeclareReservedUnused(IOFireWireController, 6);␊ |
1084 | OSMetaClassDeclareReservedUnused(IOFireWireController, 7);␊ |
1085 | OSMetaClassDeclareReservedUnused(IOFireWireController, 8);␊ |
1086 | ␊ |
1087 | };␊ |
1088 | ␊ |
1089 | #endif /* ! _IOKIT_IOFIREWIRECONTROLLER_H */␊ |
1090 | |