X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/c0fea4742e91338fffdcf79f86a7c1d5e2b97eb1..8ad349bb6ed4a0be06e34c92be0d98b92e078db4:/iokit/IOKit/pwr_mgt/RootDomain.h diff --git a/iokit/IOKit/pwr_mgt/RootDomain.h b/iokit/IOKit/pwr_mgt/RootDomain.h index df1ded306..98c8e5c32 100644 --- a/iokit/IOKit/pwr_mgt/RootDomain.h +++ b/iokit/IOKit/pwr_mgt/RootDomain.h @@ -1,23 +1,31 @@ /* * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the + * License may not be used to create, or enable the creation or + * redistribution of, unlawful or unlicensed copies of an Apple operating + * system, or to circumvent, violate, or enable the circumvention or + * violation of, any terms of an Apple operating system software license + * agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ */ #ifndef _IOKIT_ROOTDOMAIN_H #define _IOKIT_ROOTDOMAIN_H @@ -28,6 +36,8 @@ class IOPMPowerStateQueue; class RootDomainUserClient; +#define kRootDomainSupportedFeatures "Supported Features" + enum { kRootDomainSleepNotSupported = 0x00000000, kRootDomainSleepSupported = 0x00000001, @@ -35,35 +45,31 @@ enum { kPCICantSleep = 0x00000004 }; -#define kRootDomainSupportedFeatures "Supported Features" - -// Supported Feature bitfields for IOPMrootDomain::publishFeature() +// Constants for use as arguments to the settings callback PMU/SMU defines +// with registerPMSettingsController enum { - kIOPMSupportedOnAC = 1<<0, - kIOPMSupportedOnBatt = 1<<1, - kIOPMSupportedOnUPS = 1<<2 + kIOPMAutoWakeSetting = 1, + kIOPMAutoPowerOnSetting, + kIOPMWakeOnRingSetting, + kIOPMAutoRestartOnPowerLossSetting, + kIOPMWakeOnLidSetting, + kIOPMWakeOnACChangeSetting, + kIOPMTimeZoneSetting }; +typedef int IOPMSystemSettingType; -typedef IOReturn (*IOPMSettingControllerCallback) \ - (OSObject *target, const OSSymbol *type, \ - OSObject *val, uintptr_t refcon); -extern "C" -{ - IONotifier * registerSleepWakeInterest( - IOServiceInterestHandler, void *, void * = 0); - - IONotifier * registerPrioritySleepWakeInterest( - IOServiceInterestHandler handler, - void * self, void * ref = 0); - - IOReturn acknowledgeSleepWakeNotification(void * ); - IOReturn vetoSleepWakeNotification(void * PMrefcon); +typedef IOReturn (*IOPMSettingControllerCallback)(IOPMSystemSettingType arg_type, int arg_val, void *info); - IOReturn rootDomainRestart ( void ); - - IOReturn rootDomainShutdown ( void ); +extern "C" +{ + IONotifier * registerSleepWakeInterest(IOServiceInterestHandler, void *, void * = 0); + IONotifier * registerPrioritySleepWakeInterest(IOServiceInterestHandler handler, void * self, void * ref = 0); + IOReturn acknowledgeSleepWakeNotification(void * ); + IOReturn vetoSleepWakeNotification(void * PMrefcon); + IOReturn rootDomainRestart ( void ); + IOReturn rootDomainShutdown ( void ); } #define IOPM_ROOTDOMAIN_REV 2 @@ -92,95 +98,24 @@ public: void stopIgnoringClamshellEventsDuringWakeup ( void ); void wakeFromDoze( void ); void broadcast_it (unsigned long, unsigned long ); - - // KEXT driver announces support of power management feature void publishFeature( const char *feature ); - - // KEXT driver announces support of power management feature - // And specifies power sources with kIOPMSupportedOn{AC/Batt/UPS} bitfield. - // Returns a unique uint32_t identifier for later removing support for this - // feature. - // NULL is acceptable for uniqueFeatureID for kexts without plans to unload. - void publishFeature( const char *feature, - uint32_t supportedWhere, - uint32_t *uniqueFeatureID); - - // KEXT driver announces removal of a previously published power management - // feature. Pass 'uniqueFeatureID' returned from publishFeature() - IOReturn removePublishedFeature( uint32_t removeFeatureID ); - void unIdleDevice( IOService *, unsigned long ); void announcePowerSourceChange( void ); - + // Override of these methods for logging purposes. virtual IOReturn changePowerStateTo ( unsigned long ordinal ); virtual IOReturn changePowerStateToPriv ( unsigned long ordinal ); -/*! @function copyPMSetting - @abstract Copy the current value for a PM setting. Returns OSNumber or - OSData depending on the setting. - @param whichSetting Name of the desired setting. - @result OSObject *value if valid, NULL otherwise. */ - OSObject *copyPMSetting(OSSymbol *whichSetting); - -/*! @function registerPMSettingController - @abstract Register for callbacks on changes to certain PM settings. - @param settings NULL terminated array of C strings, each string for a PM - setting that the caller is interested in and wants to get callbacks for. - @param callout C function ptr or member function cast as such. - @param target The target of the callback, usually 'this' - @param refcon Will be passed to caller in callback; for caller's use. - @param handle Caller should keep the OSObject * returned here. If non-NULL, - handle will have a retain count of 1 on return. To deregister, pass to - unregisterPMSettingController() - @result kIOReturnSuccess on success. */ - IOReturn registerPMSettingController( - const OSSymbol *settings[], - IOPMSettingControllerCallback callout, - OSObject *target, - uintptr_t refcon, - OSObject **handle); // out param - -/*! @function registerPMSettingController - @abstract Register for callbacks on changes to certain PM settings. - @param settings NULL terminated array of C strings, each string for a PM - setting that the caller is interested in and wants to get callbacks for. - @param supportedPowerSources bitfield indicating which power sources these - settings are supported for (kIOPMSupportedOnAC, etc.) - @param callout C function ptr or member function cast as such. - @param target The target of the callback, usually 'this' - @param refcon Will be passed to caller in callback; for caller's use. - @param handle Caller should keep the OSObject * returned here. If non-NULL, - handle will have a retain count of 1 on return. To deregister, pass to - unregisterPMSettingController() - @result kIOReturnSuccess on success. */ - IOReturn registerPMSettingController( - const OSSymbol *settings[], - uint32_t supportedPowerSources, - IOPMSettingControllerCallback callout, - OSObject *target, - uintptr_t refcon, - OSObject **handle); // out param + IOReturn registerPMSettingController(IOPMSettingControllerCallback, void *); private: - // Points to our parent - class IORootParent * patriarch; - - // Pref: idle time before idle sleep - long sleepSlider; - - // Pref: longest of other idle times (disk and display) - long longestNonSleepSlider; - - // Difference between sleepSlider and longestNonSleepSlider - long extraSleepDelay; - - // Used to wait between say display idle and system idle - thread_call_t extraSleepTimer; - - // Used to ignore clamshell close events while we're waking from sleep - thread_call_t clamshellWakeupIgnore; + class IORootParent * patriarch; // points to our parent + long sleepSlider; // pref: idle time before idle sleep + long longestNonSleepSlider; // pref: longest of other idle times + long extraSleepDelay; // sleepSlider - longestNonSleepSlider + thread_call_t extraSleepTimer; // used to wait between say display idle and system idle + thread_call_t clamshellWakeupIgnore; // Used to ignore clamshell close events while we're waking from sleep virtual void powerChangeDone ( unsigned long ); virtual void command_received ( void *, void * , void * , void *); @@ -200,16 +135,13 @@ private: static bool displayWranglerPublished( void * target, void * refCon, IOService * newService); - static bool batteryPublished( void * target, void * refCon, + static bool batteryLocationPublished( void * target, void * refCon, IOService * resourceService ); - void adjustPowerState ( void ); void setQuickSpinDownTimeout ( void ); + void adjustPowerState( void ); void restoreUserSpinDownTimeout ( void ); - - bool shouldSleepOnClamshellClosed (void ); - void sendClientClamshellNotification ( void ); - + IOLock *featuresDictLock; // guards supportedFeatures IOPMPowerStateQueue *pmPowerStateQueue; unsigned int user_spindown; // User's selected disk spindown value @@ -225,29 +157,25 @@ private: unsigned int acAdaptorConnect:1; unsigned int ignoringClamshellDuringWakeup:1; - unsigned int clamshellIsClosed:1; - unsigned int clamshellExists:1; - unsigned int reservedA:4; + unsigned int reservedA:6; unsigned char reservedB[3]; - OSArray *allowedPMSettings; - - // Settings controller info - IORecursiveLock *settingsCtrlLock; - OSDictionary *settingsCallbacks; - OSDictionary *fPMSettingsDict; - IOReturn setPMSetting(const OSSymbol *, OSObject *); - - thread_call_t diskSyncCalloutEntry; - IONotifier *_batteryPublishNotifier; - IONotifier *_displayWranglerNotifier; + struct PMSettingCtrl { + IOPMSettingControllerCallback func; + void *refcon; + }; + // Private helper to call PM setting controller + IOReturn setPMSetting(int type, OSNumber *); + struct ExpansionData { + PMSettingCtrl *_settingController; + thread_call_t diskSyncCalloutEntry; + IONotifier *_batteryLocationNotifier; + IONotifier *_displayWranglerNotifier; }; ExpansionData *_reserved; IOOptionBits platformSleepSupport; - - friend class PMSettingObject; }; class IORootParent: public IOService @@ -259,8 +187,6 @@ private: public: - virtual IOReturn changePowerStateToPriv ( unsigned long ordinal ); - bool start ( IOService * nub ); void shutDownSystem ( void ); void restartSystem ( void );