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