#ifndef _privatelib_h_
#define _privatelib_h_
#include <TargetConditionals.h>
#include <CoreFoundation/CoreFoundation.h>
#include <SystemConfiguration/SystemConfiguration.h>
#include <SystemConfiguration/SCValidation.h>
#include <SystemConfiguration/SCPreferencesPrivate.h>
#include <SystemConfiguration/SCDynamicStorePrivate.h>
#include <SystemConfiguration/SCPreferences.h>
#include <SystemConfiguration/SCDynamicStoreCopySpecificPrivate.h>
#include <SystemConfiguration/SCDPlugin.h>
#if TARGET_OS_EMBEDDED
#define __MACH_PORT_DEBUG(cond, str, port) do {} while(0)
#endif
#include <SystemConfiguration/SCPrivate.h>
#include <IOKit/pwr_mgt/IOPM.h>
#include <IOKit/pwr_mgt/IOPMPrivate.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
#include <IOKit/pwr_mgt/IOPMLibPrivate.h>
#include <IOKit/pwr_mgt/IOPMUPSPrivate.h>
#include <IOKit/ps/IOPSKeys.h>
#include <IOKit/ps/IOPowerSources.h>
#include <IOKit/ps/IOPowerSourcesPrivate.h>
#include <IOKit/IOKitKeysPrivate.h>
#include <IOKit/IOCFUnserialize.h>
#include <IOKit/IOMessage.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/IOReturn.h>
#include <dispatch/dispatch.h>
#include "PMAssertions.h"
#if !TARGET_OS_EMBEDDED
#define HAVE_CF_USER_NOTIFICATION 1
#define HAVE_SMART_BATTERY 1
#endif
#define kProcNameBufLen (2*MAXCOMLEN)
#define CAPABILITY_BIT_CHANGED(x, y, b) ((x ^ y) & b)
#define CHANGED_CAP_BITS(x, y) ((x) ^ (y))
#define BIT_IS_SET(x,b) ((x & b)==b)
#define BIT_IS_NOT_SET(x,b) ((x & (b))==0)
enum {
kLogWakeEvents = (1<<0),
kLogAssertions = (1<<1)
};
__private_extern__ bool PMDebugEnabled(uint32_t which);
enum {
kRStateNormal = 0,
kRStateDark,
kRStateMaintenance,
kRStateCount
};
enum {
kSmartBattPFExternalInput = (1<<0),
kSmartBattPFSafetyOverVoltage = (1<<1),
kSmartBattPFChargeSafeOverTemp = (1<<2),
kSmartBattPFDischargeSafeOverTemp = (1<<3),
kSmartBattPFCellImbalance = (1<<4),
kSmartBattPFChargeFETFailure = (1<<5),
kSmartBattPFDischargeFETFailure = (1<<6),
kSmartBattPFDataFlushFault = (1<<7),
kSmartBattPFPermanentAFECommFailure = (1<<8),
kSmartBattPFPeriodicAFECommFailure = (1<<9),
kSmartBattPFChargeSafetyOverCurrent = (1<<10),
kSmartBattPFDischargeSafetyOverCurrent = (1<<11),
kSmartBattPFOpenThermistor = (1<<12),
kSmartBattPFFuseBlown = (1<<15)
};
typedef enum {
kBatteryPowered = 0,
kACPowered
} PowerSources;
struct IOPMBattery {
io_registry_entry_t me;
io_object_t msg_port;
CFMutableDictionaryRef properties;
int externalConnected:1;
int externalChargeCapable:1;
int isCharging:1;
int isPresent:1;
int markedDeclining:1;
int isTimeRemainingUnknown:1;
uint32_t pfStatus;
int currentCap;
int maxCap;
int designCap;
int voltage;
int avgAmperage;
int instantAmperage;
int maxerr;
int cycleCount;
int location;
int hwAverageTR;
int hwInstantTR;
int swCalculatedTR;
int invalidWakeSecs;
CFStringRef batterySerialNumber;
CFStringRef health;
CFStringRef failureDetected;
CFStringRef name;
CFStringRef dynamicStoreKey;
CFStringRef chargeStatus;
};
typedef struct IOPMBattery IOPMBattery;
typedef struct {
unsigned int fMinutesToDim;
unsigned int fMinutesToSpin;
unsigned int fMinutesToSleep;
unsigned int fWakeOnLAN;
unsigned int fWakeOnRing;
unsigned int fAutomaticRestart;
unsigned int fSleepOnPowerButton;
unsigned int fWakeOnClamshell;
unsigned int fWakeOnACChange;
unsigned int fDisplaySleepUsesDimming;
unsigned int fMobileMotionModule;
unsigned int fGPU;
unsigned int fDeepSleepEnable;
unsigned int fDeepSleepDelay;
unsigned int fAutoPowerOffEnable;
unsigned int fAutoPowerOffDelay;
} IOPMAggressivenessFactors;
enum {
kIOHibernateMinFreeSpace = 750*1024ULL*1024ULL
};
__private_extern__ IOReturn ActivatePMSettings(
CFDictionaryRef useSettings,
bool removeUnsupportedSettings);
#define kPowerManagementBundlePathCString "/System/Library/CoreServices/powerd.bundle"
#define kPowerdBundleIdentifier CFSTR("com.apple.powerd")
#define kPowerManagementBundlePathString CFSTR(kPowerManagementBundlePathCString)
#define kMsgTracerDomainKey "com.apple.message.domain"
#define kMsgTracerSignatureKey "com.apple.message.signature"
#define kMsgTracerUUIDKey "com.apple.message.uuid"
#define kMsgTracerUUID2Key "com.apple.message.uuid2"
#define kMsgTraceDelayKey "com.apple.message.delay"
#define kMsgTracerValueKey "com.apple.message.value"
#define kMsgTracerValue2Key "com.apple.message.value2"
#define kMsgTracerValue3Key "com.apple.message.value3"
#define kMsgTracerResultKey "com.apple.message.result"
#define kMsgTracerResultSuccess "Success"
#define kMsgTracerResultFailure "Failure"
#define kMsgTracerResultNoop "Noop"
#define kMsgTracerValueUndefined "undefined"
#define kMsgTracerDomainPMSleep "com.apple.powermanagement.Sleep"
#define kMsgTracerDomainPMMaintenance "com.apple.powermanagement.MaintenanceWake"
#define kMsgTracerDomainPMWake "com.apple.powermanagement.Wake"
#define kMsgTracerDomainPMDarkWake "com.apple.powermanagement.DarkWake"
#define kMsgTraceRDomainPMSystemPowerState "com.apple.powermanagement.SystemPowerState"
#define kMsgTracerDomainPMAssertions "com.apple.powermanagement.Assertions"
#define kMsgTracerDomainPMWakeRequests "com.apple.powermanagement.WakeRequests"
#define kMsgTracerDomainHibernateStatistics "com.apple.powermanagement.HibernateStats"
#define kMsgTracerDomainFilteredFailure "com.apple.powermanagement.FilteredFailure"
#define kMsgTracerDomainAppNotify "com.apple.powermanagement.Notification"
#define kMsgTracerDomainAppResponse "com.apple.powermanagement.ApplicationResponse"
#define kMsgTracerDomainAppResponseReceived kMsgTracerDomainAppResponse ".Response"
#define kMsgTracerDomainAppResponseCancel kMsgTracerDomainAppResponse ".Cancelled"
#define kMsgTracerDomainAppResponseSlow kMsgTracerDomainAppResponse ".SlowResponse"
#define kMsgTracerDomainAppResponseTimedOut kMsgTracerDomainAppResponse ".Timedout"
#define kMsgTracerSigSuccess kMsgTracerResultSuccess
#define kMsgTracerSigEarlyFailure "Early Failure"
#define kMsgTracerSigAppsFailure "Apps Failure"
#define kMsgTracerSigPriorityFailure "Priority Failure"
#define kMsgTracerSigInterestFailure "Interest Failure"
#define kMsgTracerSigCapabilityFailure "Capability Failure"
#define kMsgTracerSigNotificationFailure "Notification Failure"
#define kMsgTracerSigDriversFailure "Drivers Failure"
#define kMsgTracerSigHibernateFailure "Hibernate Failure"
#define kMsgTracerSigPlatformActionFailure "Platform Action Failure"
#define kMsgTracerSigPlatformDriverFailure "Platform Driver Failure"
#define kMsgTracerSigCpusFailure "Cpus Failure"
#define kMsgTracerSigPlatformFailure "Platform Failure"
#define kMsgTracerSigLoginwindowAuthFailure "Loginwindow Authorization Failure"
#define kMsgTracerSigResponseTimedOut "Timed Out"
#define kMsgTracerSigResponseCancel "Cancelled"
#define kMsgTracerSigResponseSlow "Slow Response"
#define kMsgTracerDomainSleepServiceStarted "com.apple.sleepservices.sessionStarted"
#define kMsgTracerDomainSleepServiceTerminated "com.apple.sleepservices.sessionTerminated"
#define kMsgTracerDomainSleepServiceCapApp "com.apple.sleepservices.clientCapTimeout"
#define kMsgTracerPrefixSleepServices "com.apple.sleepservices."
#define kMsgTracerPrefixPM "com.apple.powermanagement."
#define kMsgTracerSigSleepServiceExitClean "com.apple.sleepserviced.ExitCleanAssertions"
#define kMsgTracerSigSleepServiceTimedOut "com.apple.sleepserviced.ExitTimeOutAssertions"
#define kMsgTracerSigSleepServiceElevatedFull "com.apple.sleepserviced.ElevatedToFullWake"
#define kMsgTracerSigSleepServiceElevatedDark "com.apple.sleepserviced.ElevatedToDarkWake"
#define kPMASLMessageKey "com.apple.powermanagement"
#define kPMASLMessageLogValue "pmlog"
#define kPMASLActionKey "Action"
#define kPMASLPIDKey "Process"
#define kPMASLAssertionNameKey "AssertionName"
#define kPMASLAssertionActionCreate "Created"
#define kPMASLAssertionActionRelease "Released"
#define kPMASLAssertionActionClientDeath "ClientDied"
#define kPMASLAssertionActionTimeOut "TimedOut"
#define kPMASLAssertionActionSummary "Summary"
#define kPMASLAssertionActionTurnOff "Turned off"
#define kPMASLAssertionActionTurnOn "Turned on"
enum {
kWakeStateDark = (1 << 0),
kWakeStateBattery = (1 << 1),
kWakeStateLidClosed = (1 << 2)
};
#define kWakeStateFull 0
#define kWakeStateAC 0
#define kWakeStateLidOpen 0
#define kWakeStateCount (8)
enum {
kThermalStateFansOn = (1 << 0),
kThermalStateSleepRequest = (1 << 1)
};
#define kThermalStateFansOff 0
#define kThermalStateNoRequest 0
#define kThermalStateCount (4)
void initializeMT2Aggregator(void);
void mt2DarkWakeEnded(void);
void mt2EvaluateSystemSupport(void);
void mt2RecordWakeEvent(uint32_t description);
void mt2RecordThermalEvent(uint32_t description);
void mt2RecordAssertionEvent(assertionOps action, assertion_t *theAssertion);
void mt2PublishReports(void);
#ifndef kIOPMAssertionProcessNameKey
#define kIOPMAssertionProcessNameKey CFSTR("Process Name")
#endif
#ifndef kIOPMRootDomainWakeReasonKey
#define kIOPMRootDomainWakeReasonKey "Wake Reason"
#endif
#ifndef kIOPMRootDomainWakeTypeKey
#define kIOPMRootDomainWakeTypeKey "Wake Type"
#endif
#define kAssertionHumanReadableReasonTTY CFSTR("A remote user is connected. That prevents system sleep.")
__private_extern__ void logASLMessageSleep(const char *sig, const char *uuidStr,
const char *failureStr, int sleep_type);
enum {
kIsFullWake = 0,
kIsDarkWake = 1,
kIsDarkToFullWake = 2,
kIsS0Sleep
};
__private_extern__ void logASLMessageWake(const char *sig, const char *uuidStr,
const char *failureStr, int dark_wake);
__private_extern__ void logASLMessageFilteredFailure(uint64_t pmFailureStage, const char *pmFailureString,
const char *uuidStr, int shutdowncode);
__private_extern__ void logASLMessageHibernateStatistics(void);
__private_extern__ void logASLMessageApplicationResponse(CFStringRef logSourceString, CFStringRef appNameString,
CFStringRef responseTypeString, CFNumberRef responseTime,
int notificationBits);
__private_extern__ void logASLMessageAppNotify( CFStringRef appNameString, int notificationBits);
__private_extern__ void logASLMessageKernelApplicationResponses(void);
__private_extern__ void logASLMessageSystemPowerState(bool inS3, int runState);
__private_extern__ void logASLMessagePMConnectionScheduledWakeEvents(CFStringRef requestedMaintenancesString);
__private_extern__ void logASLMessageExecutedWakeupEvent(CFStringRef requestedMaintenancesString);
#define kAppResponseLogSourceKernel CFSTR("Kernel")
#define kAppResponseLogSourcePMConnection CFSTR("PMConnection")
#define kAppResponseLogSourceSleepServiceCap CFSTR("SleepService")
#define kAppResponseLogThresholdMS 250
#define kPMSettingsCachedUUIDKey "LastSleepUUID"
#define kPMSettingsDictionaryDateKey "Date"
#define kPMSettingsDictionaryUUIDKey "UUID"
__private_extern__ CFAbsoluteTime _CFAbsoluteTimeFromPMEventTimeStamp(uint64_t kernelPackedTime);
__private_extern__ IOPMBattery **_batteries(void);
__private_extern__ IOPMBattery *_newBatteryFound(io_registry_entry_t);
__private_extern__ void _batteryChanged(IOPMBattery *);
__private_extern__ bool _batteryHas(IOPMBattery *, CFStringRef);
__private_extern__ int _batteryCount(void);
__private_extern__ void _removeBattery(io_registry_entry_t);
__private_extern__ IOReturn _getACAdapterInfo(uint64_t *acBits);
__private_extern__ PowerSources _getPowerSource(void);
__private_extern__ void wakeDozingMachine(void);
#if !TARGET_OS_EMBEDDED
__private_extern__ CFUserNotificationRef _copyUPSWarning(void);
__private_extern__ IOReturn _smcWakeTimerPrimer(void);
__private_extern__ IOReturn _smcWakeTimerGetResults(uint16_t *mSec);
__private_extern__ bool smcSilentRunningSupport(void);
#endif
__private_extern__ void _askNicelyThenShutdownSystem(void);
__private_extern__ void _askNicelyThenRestartSystem(void);
__private_extern__ void _askNicelyThenSleepSystem(void);
__private_extern__ SCDynamicStoreRef _getSharedPMDynamicStore(void);
__private_extern__ bool _getUUIDString(char *buf, int buflen);
__private_extern__ bool _getSleepReason(char *buf, int buflen);
__private_extern__ bool _getWakeReason(char *buf, int buflen);
__private_extern__ io_registry_entry_t getRootDomain(void);
__private_extern__ IOReturn _setRootDomainProperty(CFStringRef key, CFTypeRef val);
__private_extern__ CFTypeRef _copyRootDomainProperty(CFStringRef key);
__private_extern__ int callerIsRoot(int uid);
__private_extern__ int callerIsAdmin(int uid, int gid);
__private_extern__ int callerIsConsole(int uid, int gid);
__private_extern__ void _PortInvalidatedCallout(CFMachPortRef port, void *info);
__private_extern__ const char *stringForLWCode(uint8_t code);
__private_extern__ const char *stringForPMCode(uint8_t code);
__private_extern__ CFTimeInterval _getHIDIdleTime(void);
__private_extern__ CFRunLoopRef _getPMRunLoop(void);
__private_extern__ dispatch_queue_t _getPMDispatchQueue(void);
__private_extern__ bool getAggressivenessValue(CFDictionaryRef dict,
CFStringRef key,
CFNumberType type,
uint32_t *ret);
__private_extern__ void _oneOffHacksSetup(void);
__private_extern__ IOReturn getNvramArgInt(char *key, int *value);
#endif