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