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