]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOWorkLoop.h
xnu-1699.26.8.tar.gz
[apple/xnu.git] / iokit / IOKit / IOWorkLoop.h
index 808329adab0a383e54bf5edaee62e719bbac5f3c..e248a9b3bd7cabf0fb78de278045c88f1c556d2f 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 1998-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 1998-2009 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  * 
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
  * 
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
-/*
-Copyright (c) 1998 Apple Computer, Inc.         All rights reserved.
-HISTORY
-    1998-7-13  Godfrey van der Linden(gvdl)
-       Created.
-    1998-10-30 Godfrey van der Linden(gvdl)
-       Converted to C++
-*/
 
 #ifndef __IOKIT_IOWORKLOOP_H
 #define __IOKIT_IOWORKLOOP_H
 
 #ifndef __IOKIT_IOWORKLOOP_H
 #define __IOKIT_IOWORKLOOP_H
@@ -44,6 +36,10 @@ HISTORY
 
 #include <IOKit/system.h>
 
 
 #include <IOKit/system.h>
 
+#if IOKITSTATS
+#include <IOKit/IOStatisticsPrivate.h>
+#endif
+
 class IOEventSource;
 class IOTimerEventSource;
 class IOCommandGate;
 class IOEventSource;
 class IOTimerEventSource;
 class IOCommandGate;
@@ -87,7 +83,14 @@ private:
     @abstract Static function that calls the threadMain function. 
 */
     static void threadMainContinuation(IOWorkLoop *self);
     @abstract Static function that calls the threadMain function. 
 */
     static void threadMainContinuation(IOWorkLoop *self);
-
+       
+/*! @function eventSourcePerformsWork
+       @abstract Checks if the event source passed in overrides checkForWork() to perform any work.
+IOWorkLoop uses this to determine if the event source should be polled in runEventSources() or not.
+       @param inEventSource The event source to check.
+*/
+       bool eventSourcePerformsWork(IOEventSource *inEventSource);
+       
 protected:
 
 /*! @typedef maintCommandEnum
 protected:
 
 /*! @typedef maintCommandEnum
@@ -138,6 +141,15 @@ protected:
 */    
     struct ExpansionData {
        IOOptionBits options;
 */    
     struct ExpansionData {
        IOOptionBits options;
+       IOEventSource *passiveEventChain;
+#if DEBUG
+       void * allocationBacktrace[16];
+#endif /* DEBUG */
+#if IOKITSTATS
+       struct IOWorkLoopCounter *counter;
+#else
+       void *iokitstatsReserved;
+#endif
     };
 
 /*! @var reserved
     };
 
 /*! @var reserved
@@ -237,13 +249,13 @@ public:
 
 /*! @function enableAllInterrupts
     @abstract Calls enable() in all interrupt event sources.
 
 /*! @function enableAllInterrupts
     @abstract Calls enable() in all interrupt event sources.
-    @discussion For all event sources (ES) for which IODynamicCast(IOInterruptEventSource, ES) is valid, in eventChain call enable() function.  See IOEventSource::enable().
+    @discussion For all event sources (ES) for which OSDynamicCast(IOInterruptEventSource, ES) is valid, in eventChain call enable() function.  See IOEventSource::enable().
 */
     virtual void enableAllInterrupts() const;
 
 /*! @function disableAllInterrupts
     @abstract Calls disable() in all interrupt event sources.
 */
     virtual void enableAllInterrupts() const;
 
 /*! @function disableAllInterrupts
     @abstract Calls disable() in all interrupt event sources.
-    @discussion For all event sources (ES) for which IODynamicCast(IOInterruptEventSource, ES) is valid,  in eventChain call disable() function.  See IOEventSource::disable().
+    @discussion For all event sources (ES) for which OSDynamicCast(IOInterruptEventSource, ES) is valid,  in eventChain call disable() function.  See IOEventSource::disable().
 */
     virtual void disableAllInterrupts() const;
 
 */
     virtual void disableAllInterrupts() const;
 
@@ -252,6 +264,9 @@ protected:
     // Internal APIs used by event sources to control the thread
     friend class IOEventSource;
     friend class IOTimerEventSource;
     // Internal APIs used by event sources to control the thread
     friend class IOEventSource;
     friend class IOTimerEventSource;
+#if IOKITSTATS
+    friend class IOStatistics;
+#endif
     virtual void signalWorkAvailable();
     virtual void openGate();
     virtual void closeGate();
     virtual void signalWorkAvailable();
     virtual void openGate();
     virtual void closeGate();