]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOService.h
xnu-792.6.22.tar.gz
[apple/xnu.git] / iokit / IOKit / IOService.h
index 9dd414e63d06af3f62119ed171c5cd48721971d5..71c47184e5346c7aeee6442f690ec9c290819bdd 100644 (file)
@@ -99,6 +99,7 @@ extern const OSSymbol *       gIONameMatchKey;
 extern const OSSymbol *                gIONameMatchedKey;
 extern const OSSymbol *                gIOPropertyMatchKey;
 extern const OSSymbol *                gIOLocationMatchKey;
+extern const OSSymbol *                gIOParentMatchKey;
 extern const OSSymbol *                gIOPathMatchKey;
 extern const OSSymbol *                gIOMatchCategoryKey;
 extern const OSSymbol *                gIODefaultMatchCategoryKey;
@@ -313,12 +314,24 @@ public:
 
     virtual bool didTerminate( IOService * provider, IOOptionBits options, bool * defer );
 
+    /* method available in Mac OS X 10.4 or later */
+/*! @function nextIdleTimeout
+    @abstract Allows subclasses to customize idle power management behavior.
+    @discussion Returns the next time that the device should idle into its next lower power state. Subclasses may override for custom idle behavior.
+    @param currentTime The current time
+    @param lastActivity The time of last activity on this device
+    @param powerState The device's current power state.
+    @result Returns the next time the device should idle off (in seconds, relative to the current time). */
+
+    virtual SInt32 nextIdleTimeout(AbsoluteTime currentTime, 
+        AbsoluteTime lastActivity, unsigned int powerState);
+
 private:
     OSMetaClassDeclareReservedUsed(IOService, 0);
     OSMetaClassDeclareReservedUsed(IOService, 1);
     OSMetaClassDeclareReservedUsed(IOService, 2);
+    OSMetaClassDeclareReservedUsed(IOService, 3);
 
-    OSMetaClassDeclareReservedUnused(IOService, 3);
     OSMetaClassDeclareReservedUnused(IOService, 4);
     OSMetaClassDeclareReservedUnused(IOService, 5);
     OSMetaClassDeclareReservedUnused(IOService, 6);
@@ -392,8 +405,7 @@ public:
     @discussion When an IOService is successfully terminated, it is immediately made inactive, which blocks further attach()es, matching or notifications occuring on the object. It remains inactive until the last client closes, and is then finalized and destroyed.
     @result Returns true if the IOService has been terminated. */
 
-    inline bool isInactive( void ) const
-       { return( 0 != (kIOServiceInactiveState & getState())); }
+    bool isInactive( void ) const;
 
     /* Stack creation */
 
@@ -1792,30 +1804,38 @@ private:
     IOReturn notifyAll ( bool is_prechange );
     bool notifyChild ( IOPowerConnection * nextObject, bool is_prechange );
     bool inform ( IOPMinformee * nextObject, bool is_prechange );
-    void our_prechange_03 ( void );
-    void our_prechange_04 ( void );
-    void our_prechange_05 ( void );
-    void our_prechange_1 ( void );
-    void our_prechange_2 ( void );
-    void our_prechange_3 ( void );
-    void our_prechange_4 ( void );
-    IOReturn parent_down_0 ( void );
-    IOReturn parent_down_02 ( void );
-    void parent_down_04 ( void );
-    void parent_down_05 ( void );
-    IOReturn parent_down_1 ( void );
-    IOReturn parent_down_2 ( void );
-    void parent_down_3 ( void );
-    void parent_down_4 ( void );
-    void parent_down_5 ( void );
-    void parent_down_6 ( void );
-    void parent_up_0 ( void );
-    IOReturn parent_up_1 ( void );
-    IOReturn parent_up_2 ( void );
-    IOReturn parent_up_3 ( void );
-    void parent_up_4 ( void );
-    void parent_up_5 ( void );
-    void parent_up_6 ( void );
+    
+    // Power Management state machine
+    // power change initiated by driver
+    void OurChangeTellClientsPowerDown ( void );
+    void OurChangeTellPriorityClientsPowerDown ( void );
+    void OurChangeNotifyInterestedDriversWillChange ( void );
+    void OurChangeSetPowerState ( void );
+    void OurChangeWaitForPowerSettle ( void );
+    void OurChangeNotifyInterestedDriversDidChange ( void );
+    void OurChangeFinish ( void );
+    
+    // downward power change initiated by a power parent
+    IOReturn ParentDownTellPriorityClientsPowerDown_Immediate ( void );
+    IOReturn ParentDownNotifyInterestedDriversWillChange_Immediate ( void );
+    void ParentDownTellPriorityClientsPowerDown_Delayed ( void );
+    void ParentDownNotifyInterestedDriversWillChange_Delayed ( void );
+    IOReturn ParentDownSetPowerState_Immediate ( void );
+    IOReturn ParentDownWaitForPowerSettleAndNotifyDidChange_Immediate ( void );
+    void ParentDownNotifyDidChangeAndAcknowledgeChange_Delayed ( void );
+    void ParentDownSetPowerState_Delayed ( void );
+    void ParentDownWaitForPowerSettle_Delayed ( void );
+    void ParentDownAcknowledgeChange_Delayed ( void );
+    
+    // upward power change initiated by a power parent
+    void ParentUpSetPowerState_Delayed ( void );
+    IOReturn ParentUpSetPowerState_Immediate ( void );
+    IOReturn ParentUpWaitForSettleTime_Immediate ( void );
+    IOReturn ParentUpNotifyInterestedDriversDidChange_Immediate ( void );
+    void ParentUpWaitForSettleTime_Delayed ( void );
+    void ParentUpNotifyInterestedDriversDidChange_Delayed ( void );
+    void ParentUpAcknowledgePowerChange_Delayed ( void );
+    
     void all_done ( void );
     void all_acked ( void );
     void driver_acked ( void );
@@ -1835,6 +1855,7 @@ private:
     bool responseValid ( unsigned long x );
     IOReturn allowCancelCommon ( void );
     void computeDesiredState ( void );
+    void rebuildChildClampBits ( void );
 };
 
 #endif /* ! _IOKIT_IOSERVICE_H */