xref: /xnu-8020.121.3/iokit/IOKit/IOEventSource.h (revision fdd8201d7b966f0c3ea610489d29bd841d358941)
1*fdd8201dSApple OSS Distributions /*
2*fdd8201dSApple OSS Distributions  * Copyright (c) 1998-2019 Apple Inc. All rights reserved.
3*fdd8201dSApple OSS Distributions  *
4*fdd8201dSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*fdd8201dSApple OSS Distributions  *
6*fdd8201dSApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*fdd8201dSApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*fdd8201dSApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*fdd8201dSApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*fdd8201dSApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*fdd8201dSApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*fdd8201dSApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*fdd8201dSApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*fdd8201dSApple OSS Distributions  *
15*fdd8201dSApple OSS Distributions  * Please obtain a copy of the License at
16*fdd8201dSApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*fdd8201dSApple OSS Distributions  *
18*fdd8201dSApple OSS Distributions  * The Original Code and all software distributed under the License are
19*fdd8201dSApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*fdd8201dSApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*fdd8201dSApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*fdd8201dSApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*fdd8201dSApple OSS Distributions  * Please see the License for the specific language governing rights and
24*fdd8201dSApple OSS Distributions  * limitations under the License.
25*fdd8201dSApple OSS Distributions  *
26*fdd8201dSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*fdd8201dSApple OSS Distributions  */
28*fdd8201dSApple OSS Distributions /*
29*fdd8201dSApple OSS Distributions  *  Copyright (c) 1998 Apple Computer, Inc.	 All rights reserved.
30*fdd8201dSApple OSS Distributions  *  HISTORY
31*fdd8201dSApple OSS Distributions  *   1998-7-13	Godfrey van der Linden(gvdl)
32*fdd8201dSApple OSS Distributions  *       Created.
33*fdd8201dSApple OSS Distributions  *   1998-10-30	Godfrey van der Linden(gvdl)
34*fdd8201dSApple OSS Distributions  *       Converted to C++
35*fdd8201dSApple OSS Distributions  */
36*fdd8201dSApple OSS Distributions #ifndef _IOKIT_IOEVENTSOURCE_H
37*fdd8201dSApple OSS Distributions #define _IOKIT_IOEVENTSOURCE_H
38*fdd8201dSApple OSS Distributions 
39*fdd8201dSApple OSS Distributions #include <sys/cdefs.h>
40*fdd8201dSApple OSS Distributions 
41*fdd8201dSApple OSS Distributions #include <libkern/c++/OSObject.h>
42*fdd8201dSApple OSS Distributions 
43*fdd8201dSApple OSS Distributions #include <IOKit/IOLib.h>
44*fdd8201dSApple OSS Distributions #include <IOKit/system.h>
45*fdd8201dSApple OSS Distributions #include <IOKit/IOWorkLoop.h>
46*fdd8201dSApple OSS Distributions 
47*fdd8201dSApple OSS Distributions #if IOKITSTATS
48*fdd8201dSApple OSS Distributions #include <IOKit/IOStatisticsPrivate.h>
49*fdd8201dSApple OSS Distributions #endif
50*fdd8201dSApple OSS Distributions 
51*fdd8201dSApple OSS Distributions __BEGIN_DECLS
52*fdd8201dSApple OSS Distributions #include <mach/clock_types.h>
53*fdd8201dSApple OSS Distributions #include <kern/clock.h>
54*fdd8201dSApple OSS Distributions __END_DECLS
55*fdd8201dSApple OSS Distributions 
56*fdd8201dSApple OSS Distributions /*!
57*fdd8201dSApple OSS Distributions  *   @class IOEventSource : public OSObject
58*fdd8201dSApple OSS Distributions  *   @abstract Abstract class for all work-loop event sources.
59*fdd8201dSApple OSS Distributions  *   @discussion The IOEventSource declares the abstract super class that all
60*fdd8201dSApple OSS Distributions  *  event sources must inherit from if an IOWorkLoop is to receive events from them.
61*fdd8201dSApple OSS Distributions  *  <br><br>
62*fdd8201dSApple OSS Distributions  *       An event source can represent any event that should cause the work-loop of a
63*fdd8201dSApple OSS Distributions  *  device to wake up and perform work.  Two examples of event sources are the
64*fdd8201dSApple OSS Distributions  *  IOInterruptEventSource which delivers interrupt notifications and IOCommandGate
65*fdd8201dSApple OSS Distributions  *  which delivers command requests.
66*fdd8201dSApple OSS Distributions  *  <br><br>
67*fdd8201dSApple OSS Distributions  *       A kernel module can always use the work-loop model for serialising access to
68*fdd8201dSApple OSS Distributions  *  anything at all.  The IOEventSource is used for communicating events to the
69*fdd8201dSApple OSS Distributions  *  work-loop, and the chain of event sources should be used to walk the possible
70*fdd8201dSApple OSS Distributions  *  event sources and demultipex them.  Note a particular instance of an event
71*fdd8201dSApple OSS Distributions  *  source may only be a member of 1 linked list chain.  If you need to move it
72*fdd8201dSApple OSS Distributions  *  between chains than make sure it is removed from the original chain before
73*fdd8201dSApple OSS Distributions  *  attempting to move it.
74*fdd8201dSApple OSS Distributions  *  <br><br>
75*fdd8201dSApple OSS Distributions  *       The IOEventSource makes no attempt to maintain the consistency of its internal data across multi-threading.  It is assumed that the user of these basic tools will protect the data that these objects represent in some sort of device wide instance lock.	For example the IOWorkLoop maintains the event chain by using an IOCommandGate and thus single threading access to its state.
76*fdd8201dSApple OSS Distributions  *  <br><br>
77*fdd8201dSApple OSS Distributions  *       All subclasses of IOEventSource that wish to perform work on the work-loop thread are expected to implement the checkForWork() member function. As of Mac OS X, 10.7 (Darwin 11), checkForWork is no longer pure virtual, and should not be overridden if there is no work to be done.
78*fdd8201dSApple OSS Distributions  *
79*fdd8201dSApple OSS Distributions  *  <br><br>
80*fdd8201dSApple OSS Distributions  *       checkForWork() is the key method in this class.	 It is called by some work-loop when convienient and is expected to evaluate its internal state and determine if an event has occurred since the last call.  In the case of an event having occurred then the instance defined target(owner)/action will be called.	 The action is stored as an ordinary C function pointer but the first parameter is always the owner.  This means that a C++ member function can be used as an action function though this depends on the ABI.
81*fdd8201dSApple OSS Distributions  *  <br><br>
82*fdd8201dSApple OSS Distributions  *       Although the eventChainNext variable contains a reference to the next event source in the chain this reference is not retained.  The list 'owner' i.e. the client that creates the event, not the work-loop, is expected to retain the source.
83*fdd8201dSApple OSS Distributions  */
84*fdd8201dSApple OSS Distributions class IOEventSource : public OSObject
85*fdd8201dSApple OSS Distributions {
86*fdd8201dSApple OSS Distributions 	OSDeclareAbstractStructors(IOEventSource);
87*fdd8201dSApple OSS Distributions 	friend class IOWorkLoop;
88*fdd8201dSApple OSS Distributions #if IOKITSTATS
89*fdd8201dSApple OSS Distributions 	friend class IOStatistics;
90*fdd8201dSApple OSS Distributions #endif
91*fdd8201dSApple OSS Distributions 
92*fdd8201dSApple OSS Distributions public:
93*fdd8201dSApple OSS Distributions /*!
94*fdd8201dSApple OSS Distributions  *   @typedef Action
95*fdd8201dSApple OSS Distributions  *   @discussion Placeholder type for C++ function overloading discrimination.
96*fdd8201dSApple OSS Distributions  *  As the all event sources require an action and it has to be stored somewhere
97*fdd8201dSApple OSS Distributions  *  and be of some type, this is that type.
98*fdd8201dSApple OSS Distributions  *   @param owner
99*fdd8201dSApple OSS Distributions  *       Target of the function, can be used as a refcon.  The owner is set
100*fdd8201dSApple OSS Distributions  *  during initialisation.	 Note if a C++ function was specified this parameter
101*fdd8201dSApple OSS Distributions  *  is implicitly the first paramter in the target member function's parameter list.
102*fdd8201dSApple OSS Distributions  */
103*fdd8201dSApple OSS Distributions 	typedef void (*Action)(OSObject *owner, ...);
104*fdd8201dSApple OSS Distributions 
105*fdd8201dSApple OSS Distributions /*! @defined IOEventSourceAction
106*fdd8201dSApple OSS Distributions  *   @discussion Backward compatibilty define for the old non-class scoped type definition.  See $link IOEventSource::Action */
107*fdd8201dSApple OSS Distributions  #define IOEventSourceAction IOEventSource::Action
108*fdd8201dSApple OSS Distributions 
109*fdd8201dSApple OSS Distributions #ifdef __BLOCKS__
110*fdd8201dSApple OSS Distributions 	typedef IOReturn (^ActionBlock)();
111*fdd8201dSApple OSS Distributions #endif /* __BLOCKS__ */
112*fdd8201dSApple OSS Distributions 
113*fdd8201dSApple OSS Distributions protected:
114*fdd8201dSApple OSS Distributions /*! @var eventChainNext
115*fdd8201dSApple OSS Distributions  *       The next event source in the event chain. nil at end of chain. */
116*fdd8201dSApple OSS Distributions 	IOEventSource *eventChainNext;
117*fdd8201dSApple OSS Distributions 
118*fdd8201dSApple OSS Distributions /*! @var owner The owner object called when an event has been delivered. */
119*fdd8201dSApple OSS Distributions 	OSObject *owner;
120*fdd8201dSApple OSS Distributions 
121*fdd8201dSApple OSS Distributions /*! @var action
122*fdd8201dSApple OSS Distributions  *       The action method called when an event has been delivered */
123*fdd8201dSApple OSS Distributions 
124*fdd8201dSApple OSS Distributions #if XNU_KERNEL_PRIVATE
125*fdd8201dSApple OSS Distributions 	union { Action action; ActionBlock actionBlock; };
126*fdd8201dSApple OSS Distributions #else /* XNU_KERNEL_PRIVATE */
127*fdd8201dSApple OSS Distributions 	Action action;
128*fdd8201dSApple OSS Distributions #endif /* !XNU_KERNEL_PRIVATE */
129*fdd8201dSApple OSS Distributions 
130*fdd8201dSApple OSS Distributions /*! @var enabled
131*fdd8201dSApple OSS Distributions  *       Is this event source enabled to deliver requests to the work-loop. */
132*fdd8201dSApple OSS Distributions 	bool enabled;
133*fdd8201dSApple OSS Distributions 
134*fdd8201dSApple OSS Distributions #if XNU_KERNEL_PRIVATE
135*fdd8201dSApple OSS Distributions 	enum{
136*fdd8201dSApple OSS Distributions 		kPassive         = 0x0001,
137*fdd8201dSApple OSS Distributions 		kActive          = 0x0002,
138*fdd8201dSApple OSS Distributions 		kActionBlock     = 0x0004,
139*fdd8201dSApple OSS Distributions 		kSubClass0       = 0x0008,
140*fdd8201dSApple OSS Distributions 	};
141*fdd8201dSApple OSS Distributions 	uint8_t  eventSourceReserved1[1];
142*fdd8201dSApple OSS Distributions 	uint16_t flags;
143*fdd8201dSApple OSS Distributions #if __LP64__
144*fdd8201dSApple OSS Distributions 	uint8_t eventSourceReserved2[4];
145*fdd8201dSApple OSS Distributions #endif /* __LP64__ */
146*fdd8201dSApple OSS Distributions 
147*fdd8201dSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */
148*fdd8201dSApple OSS Distributions 
149*fdd8201dSApple OSS Distributions /*! @var workLoop What is the work-loop for this event source. */
150*fdd8201dSApple OSS Distributions 	IOWorkLoop *workLoop;
151*fdd8201dSApple OSS Distributions 
152*fdd8201dSApple OSS Distributions /*! @var refcon What ever the client wants to do, see $link setRefcon. */
153*fdd8201dSApple OSS Distributions 	void *refcon;
154*fdd8201dSApple OSS Distributions 
155*fdd8201dSApple OSS Distributions /*! @struct ExpansionData
156*fdd8201dSApple OSS Distributions  *   @discussion This structure will be used to expand the capablilties of the IOEventSource in the future.
157*fdd8201dSApple OSS Distributions  */
158*fdd8201dSApple OSS Distributions 	struct ExpansionData {
159*fdd8201dSApple OSS Distributions #if IOKITSTATS
160*fdd8201dSApple OSS Distributions 		struct IOEventSourceCounter *counter;
161*fdd8201dSApple OSS Distributions #else
162*fdd8201dSApple OSS Distributions 		void *iokitstatsReserved;
163*fdd8201dSApple OSS Distributions #endif
164*fdd8201dSApple OSS Distributions 	};
165*fdd8201dSApple OSS Distributions 
166*fdd8201dSApple OSS Distributions /*! @var reserved
167*fdd8201dSApple OSS Distributions  *   Reserved for future use.  (Internal use only)  */
168*fdd8201dSApple OSS Distributions 	ExpansionData *reserved;
169*fdd8201dSApple OSS Distributions 
170*fdd8201dSApple OSS Distributions /*! @function init
171*fdd8201dSApple OSS Distributions  *   @abstract Primary initialiser for the IOEventSource class.
172*fdd8201dSApple OSS Distributions  *   @param owner
173*fdd8201dSApple OSS Distributions  *       Owner of this instance of an event source.  Used as the first parameter
174*fdd8201dSApple OSS Distributions  *  of the action callout.	Owner must be an OSObject.
175*fdd8201dSApple OSS Distributions  *   @param action
176*fdd8201dSApple OSS Distributions  *       Pointer to C call out function.	 Action is a pointer to a C function
177*fdd8201dSApple OSS Distributions  *  that gets called when this event source has outstanding work.  It will usually
178*fdd8201dSApple OSS Distributions  *  be called by the checkForWork member function.	The first parameter of the
179*fdd8201dSApple OSS Distributions  *  action call out will always be the owner, this allows C++ member functions to
180*fdd8201dSApple OSS Distributions  *  be used as actions.  Defaults to 0.
181*fdd8201dSApple OSS Distributions  *   @result true if the inherited classes and this instance initialise
182*fdd8201dSApple OSS Distributions  *  successfully.
183*fdd8201dSApple OSS Distributions  */
184*fdd8201dSApple OSS Distributions 	virtual bool init(OSObject *owner, IOEventSource::Action action = NULL);
185*fdd8201dSApple OSS Distributions 
186*fdd8201dSApple OSS Distributions 	virtual void free( void ) APPLE_KEXT_OVERRIDE;
187*fdd8201dSApple OSS Distributions 
188*fdd8201dSApple OSS Distributions /*! @function checkForWork
189*fdd8201dSApple OSS Distributions  *   @abstract Virtual member function used by IOWorkLoop for work
190*fdd8201dSApple OSS Distributions  *  scheduling.
191*fdd8201dSApple OSS Distributions  *   @discussion This function will be called to request a subclass to check
192*fdd8201dSApple OSS Distributions  *  its internal state for any work to do and then to call out the owner/action.
193*fdd8201dSApple OSS Distributions  *  If this event source never performs any work (e.g. IOCommandGate), this
194*fdd8201dSApple OSS Distributions  *  method should not be overridden. NOTE: This method is no longer declared pure
195*fdd8201dSApple OSS Distributions  *  virtual. A default implementation is provided in IOEventSource.
196*fdd8201dSApple OSS Distributions  *   @result Return true if this function needs to be called again before all its outstanding events have been processed.
197*fdd8201dSApple OSS Distributions  */
198*fdd8201dSApple OSS Distributions 	virtual bool checkForWork();
199*fdd8201dSApple OSS Distributions 
200*fdd8201dSApple OSS Distributions /*! @function setWorkLoop
201*fdd8201dSApple OSS Distributions  *   @abstract Set'ter for $link workLoop variable.
202*fdd8201dSApple OSS Distributions  *   @param workLoop
203*fdd8201dSApple OSS Distributions  *       Target work-loop of this event source instance.	 A subclass of
204*fdd8201dSApple OSS Distributions  *  IOWorkLoop that at least reacts to signalWorkAvailable() and onThread functions.
205*fdd8201dSApple OSS Distributions  */
206*fdd8201dSApple OSS Distributions 	virtual void setWorkLoop(IOWorkLoop *workLoop);
207*fdd8201dSApple OSS Distributions 
208*fdd8201dSApple OSS Distributions /*! @function setNext
209*fdd8201dSApple OSS Distributions  *   @abstract Set'ter for $link eventChainNext variable.
210*fdd8201dSApple OSS Distributions  *   @param next
211*fdd8201dSApple OSS Distributions  *       Pointer to another IOEventSource instance.
212*fdd8201dSApple OSS Distributions  */
213*fdd8201dSApple OSS Distributions 	virtual void setNext(IOEventSource *next);
214*fdd8201dSApple OSS Distributions 
215*fdd8201dSApple OSS Distributions /*! @function getNext
216*fdd8201dSApple OSS Distributions  *   @abstract Get'ter for $link eventChainNext variable.
217*fdd8201dSApple OSS Distributions  *   @result value of eventChainNext.
218*fdd8201dSApple OSS Distributions  */
219*fdd8201dSApple OSS Distributions 	virtual IOEventSource *getNext() const;
220*fdd8201dSApple OSS Distributions 
221*fdd8201dSApple OSS Distributions 
222*fdd8201dSApple OSS Distributions protected:
223*fdd8201dSApple OSS Distributions // Methods to access the IOWorkLoop exported fields
224*fdd8201dSApple OSS Distributions 	void signalWorkAvailable();
225*fdd8201dSApple OSS Distributions 	void openGate();
226*fdd8201dSApple OSS Distributions 	void closeGate();
227*fdd8201dSApple OSS Distributions 	bool tryCloseGate();
228*fdd8201dSApple OSS Distributions 	int sleepGate(void *event, UInt32 type);
229*fdd8201dSApple OSS Distributions 	int sleepGate(void *event, AbsoluteTime deadline, UInt32 type);
230*fdd8201dSApple OSS Distributions 	void wakeupGate(void *event, bool oneThread);
231*fdd8201dSApple OSS Distributions 
232*fdd8201dSApple OSS Distributions public:
233*fdd8201dSApple OSS Distributions /*! @function setAction
234*fdd8201dSApple OSS Distributions  *   @abstract Set'ter for $link action variable.
235*fdd8201dSApple OSS Distributions  *   @param action Pointer to a C function of type IOEventSource::Action. */
236*fdd8201dSApple OSS Distributions 	virtual void setAction(IOEventSource::Action action);
237*fdd8201dSApple OSS Distributions 
238*fdd8201dSApple OSS Distributions /*! @function getAction
239*fdd8201dSApple OSS Distributions  *   @abstract Get'ter for $link action variable.
240*fdd8201dSApple OSS Distributions  *   @result value of action. */
241*fdd8201dSApple OSS Distributions 	virtual IOEventSource::Action getAction() const;
242*fdd8201dSApple OSS Distributions 
243*fdd8201dSApple OSS Distributions #ifdef __BLOCKS__
244*fdd8201dSApple OSS Distributions /*! @function setActionBlock
245*fdd8201dSApple OSS Distributions  *   @abstract Setter for action ivar. The current block is released, & the new block is retained.
246*fdd8201dSApple OSS Distributions  *   @param block Block pointer of type IOEventSource::ActionBlock. */
247*fdd8201dSApple OSS Distributions 	void setActionBlock(ActionBlock block);
248*fdd8201dSApple OSS Distributions /*! @function getActionBlock
249*fdd8201dSApple OSS Distributions  *   @abstract Getter for action ivar.
250*fdd8201dSApple OSS Distributions  *   @result Block pointer of type IOEventSource::ActionBlock, if set, or NULL. */
251*fdd8201dSApple OSS Distributions 	ActionBlock getActionBlock(ActionBlock) const;
252*fdd8201dSApple OSS Distributions #endif /* __BLOCKS__ */
253*fdd8201dSApple OSS Distributions 
254*fdd8201dSApple OSS Distributions /*! @function setRefcon
255*fdd8201dSApple OSS Distributions  *   @abstract Setter for refcon ivar. This function will assert if a block action has been set.
256*fdd8201dSApple OSS Distributions  *   @param refcon Refcon. */
257*fdd8201dSApple OSS Distributions 	void setRefcon(void *refcon);
258*fdd8201dSApple OSS Distributions /*! @function getRefcon
259*fdd8201dSApple OSS Distributions  *   @abstract Getter for refcon ivar.
260*fdd8201dSApple OSS Distributions  *   @result The refcon. This function will assert if a block action has been set. */
261*fdd8201dSApple OSS Distributions 	void * getRefcon() const;
262*fdd8201dSApple OSS Distributions 
263*fdd8201dSApple OSS Distributions /*! @function enable
264*fdd8201dSApple OSS Distributions  *   @abstract Enable event source.
265*fdd8201dSApple OSS Distributions  *   @discussion A subclass implementation is expected to respect the enabled
266*fdd8201dSApple OSS Distributions  *  state when checkForWork is called.  Calling this function will cause the
267*fdd8201dSApple OSS Distributions  *  work-loop to be signalled so that a checkForWork is performed. */
268*fdd8201dSApple OSS Distributions 	virtual void enable();
269*fdd8201dSApple OSS Distributions 
270*fdd8201dSApple OSS Distributions /*! @function disable
271*fdd8201dSApple OSS Distributions  *   @abstract Disable event source.
272*fdd8201dSApple OSS Distributions  *   @discussion A subclass implementation is expected to respect the enabled
273*fdd8201dSApple OSS Distributions  *  state when checkForWork is called. */
274*fdd8201dSApple OSS Distributions 	virtual void disable();
275*fdd8201dSApple OSS Distributions 
276*fdd8201dSApple OSS Distributions /*! @function isEnabled
277*fdd8201dSApple OSS Distributions  *   @abstract Get'ter for $link enable variable.
278*fdd8201dSApple OSS Distributions  *   @result true if enabled. */
279*fdd8201dSApple OSS Distributions 	virtual bool isEnabled() const;
280*fdd8201dSApple OSS Distributions 
281*fdd8201dSApple OSS Distributions /*! @function getWorkLoop
282*fdd8201dSApple OSS Distributions  *   @abstract Get'ter for $link workLoop variable.
283*fdd8201dSApple OSS Distributions  *   @result value of workLoop. */
284*fdd8201dSApple OSS Distributions 	virtual IOWorkLoop *getWorkLoop() const;
285*fdd8201dSApple OSS Distributions 
286*fdd8201dSApple OSS Distributions /*! @function onThread
287*fdd8201dSApple OSS Distributions  *   @abstract Convenience function for workLoop->onThread.
288*fdd8201dSApple OSS Distributions  *   @result true if called on the work-loop thread.
289*fdd8201dSApple OSS Distributions  */
290*fdd8201dSApple OSS Distributions 	virtual bool onThread() const;
291*fdd8201dSApple OSS Distributions 
292*fdd8201dSApple OSS Distributions private:
293*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 0);
294*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 1);
295*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 2);
296*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 3);
297*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 4);
298*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 5);
299*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 6);
300*fdd8201dSApple OSS Distributions 	OSMetaClassDeclareReservedUnused(IOEventSource, 7);
301*fdd8201dSApple OSS Distributions };
302*fdd8201dSApple OSS Distributions 
303*fdd8201dSApple OSS Distributions #endif /* !_IOKIT_IOEVENTSOURCE_H */
304