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