ADC Home > Reference Library > Reference > Darwin > Kernel Framework Reference
|
IOEventSource |
Inherits from: | |
Declared In: |
Abstract class for all work-loop event sources.
The IOEventSource declares the abstract super class that all
event sources must inherit from if an IOWorkLoop is to receive events from them.
An event source can represent any event that should cause the work loop of a
device to wake up and perform work. Two examples of event sources are the
IOInterruptEventSource which delivers interrupt notifications and IOCommandGate
which delivers command requests.
A kernel module can always use the work-loop model for serializing access to
anything at all. The IOEventSource is used for communicating events to the
work loop, and the chain of event sources should be used to walk the possible
event sources and demultipex them. Note a particular instance of an event
source may only be a member of 1 linked list chain. If you need to move it
between chains than make sure it is removed from the original chain before
attempting to move it.
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 handing off change request to its own thread and thus single threading access to its state.
All subclasses of the IOEventSource are expected to implement the checkForWork() member function.
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.
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.
Pure Virtual member function used by IOWorkLoop for work scheduling.
Disables event source.
Enables event source.
Get'ter for action variable.
Get'ter for eventChainNext variable.
Get'ter for workLoop variable.
Primary initializer for the IOEventSource class.
Get'ter for enable variable.
Convenience function for workLoop->onThread.
Set'ter for action variable.
Set'ter for eventChainNext variable.
Set'ter for workLoop variable.
checkForWork |
Pure Virtual member function used by IOWorkLoop for work scheduling.
protected
virtual bool checkForWork() = 0;
Returns true if this function needs to be called again before all its outstanding events have been processed.
This function will be called to request a subclass to check its internal state for any work to do and then to call out the owner/action.
disable |
Disables event source.
public
virtual void disable();
A subclass implementation is expected to respect the enabled state when checkForWork is called.
enable |
Enables event source.
public
virtual void enable();
A subclass implementation is expected to respect the enabled state when checkForWork is called. Calling this function will cause the work loop to be signalled so that a checkForWork is performed.
getAction |
Get'ter for action variable.
public
virtual IOEventSource::Action getAction() const;
Returns the value of action.
getNext |
Get'ter for eventChainNext variable.
protected
virtual IOEventSource *getNext() const;
Returns the value of eventChainNext.
getWorkLoop |
Get'ter for workLoop variable.
public
virtual IOWorkLoop *getWorkLoop() const;
Returns the value of workLoop.
init |
Primary initializer for the IOEventSource class.
protected
virtual bool init( OSObject *owner, IOEventSource::Action action = 0);
owner
Owner of this instance of an event source. Used as the first parameter of the action callout. Owner will generally be an OSObject it doesn't have to be as no member functions will be called directly in it. It can just be a refcon for a client routine.
action
Pointer to C call out function. Action is a pointer to a C function that gets called when this event source has outstanding work. It will usually be called by the checkForWork member function. The first parameter of the action call out will always be the owner, this allows C++ member functions to be used as actions. Defaults to 0.
Returns true if the inherited classes and this instance initialize successfully.
isEnabled |
Get'ter for enable variable.
public
virtual bool isEnabled() const;
Returns true if enabled.
onThread |
Convenience function for workLoop->onThread.
public
virtual bool onThread() const;
Returns true if called on the work loop thread.
setAction |
Set'ter for action variable.
public
virtual void setAction( IOEventSource::Action action);
action
Pointer to a C function of type IOEventSource::Action.
setNext |
Set'ter for eventChainNext variable.
protected
virtual void setNext( IOEventSource *next);
next
Pointer to another IOEventSource instance.
setWorkLoop |
Set'ter for workLoop variable.
protected
virtual void setWorkLoop( IOWorkLoop *workLoop);
workLoop
Target work loop of this event source instance. A subclass of IOWorkLoop that at least reacts to signalWorkAvailable() and onThread functions.
Action |
public
typedef void ( *Action)( OSObject *owner, ...);
owner
Target of the function, can be used as a refcon. The owner is set during initialization. Note if a C++ function was specified this parameter is implicitly the first paramter in the target member function's parameter list.
Placeholder type for C++ function overloading discrimination. As the all event sources require an action and it has to be stored somewhere and be of some type, this is that type.
ExpansionData |
protected
struct ExpansionData { };
This structure will be used to expand the capablilties of the IOEventSource in the future.
action |
protected
Action action;
The action method called when an event has been delivered
enabled |
protected
bool enabled;
Is this event source enabled to deliver requests to the work-loop.
eventChainNext |
protected
IOEventSource *eventChainNext;
The next event source in the event chain. nil at end of chain.
owner |
protected
OSObject *owner;
refcon |
protected
void *refcon;
reserved |
protected
ExpansionData *reserved;
Reserved for future use. (Internal use only)
workLoop |
protected
IOWorkLoop *workLoop;
IOEventSourceAction |
#define IOEventSourceAction IOEventSource::Action
Backward compatibilty define for the old non-class scoped type definition. See Action.
|
Last Updated: 2008-12-19