#ifndef _PMAssertions_h_
#define _PMAssertions_h_
#include <IOKit/pwr_mgt/IOPM.h>
#include <sys/queue.h>
#define _kIOPMAssertionTypeExternalMediaCStr "ExternalMedia"
#define _kIOPMAssertionTypeExternalMedia CFSTR(_kIOPMAssertionTypeExternalMediaCStr)
#ifndef kIOPMRootDomainWakeTypeNetwork
#define kIOPMRootDomainWakeTypeNetwork CFSTR("Network")
#endif
#ifndef kIOPMRootDomainWakeTypeAlarm
#define kIOPMRootDomainWakeTypeAlarm CFSTR("Alarm")
#endif
#ifndef kIOPMRootDomainWakeTypeMaintenance
#define kIOPMRootDomainWakeTypeMaintenance CFSTR("Maintenance")
#endif
#ifndef kIOPMRootDomainWakeTypeSleepTimer
#define kIOPMRootDomainWakeTypeSleepTimer CFSTR("SleepTimer")
#endif
#ifndef kIOPMRootDomainWakeTypeSleepService
#define kIOPMRootDomainWakeTypeSleepService CFSTR("SleepService")
#endif
#ifndef kIOPMRootDomainWakeReasonRTC
#define kIOPMRootDomainWakeReasonRTC CFSTR("RTC")
#endif
#ifndef kIORootDomainWakeReasonDarkPME
#define kIORootDomainWakeReasonDarkPME CFSTR("EC.DarkPME")
#endif
#ifndef kIOPMrootDomainWakeTypeLowBattery
#define kIOPMrootDomainWakeTypeLowBattery CFSTR("LowBattery")
#endif
typedef enum {
kHighPerfIndex = 0,
kPreventIdleIndex = 1,
kDisableInflowIndex = 2,
kInhibitChargeIndex = 3,
kDisableWarningsIndex = 4,
kPreventDisplaySleepIndex = 5,
kEnableIdleIndex = 6,
kNoRealPowerSourcesDebugIndex = 7,
kPreventSleepIndex = 8,
kExternalMediaIndex = 9,
kDeclareUserActivity = 10,
kPushServiceTaskIndex = 11,
kBackgroundTaskIndex = 12,
kIOPMNumAssertionTypes
} kerAssertionType;
typedef struct assertion {
LIST_ENTRY(assertion) link;
CFMutableDictionaryRef props; pid_t pid; uint32_t state; uint64_t createTime; uint64_t timeout;
kerAssertionType kassert; IOPMAssertionID assertionId;
uint32_t mods;
uint32_t retainCnt; } assertion_t;
#define kAssertionStateTimed 0x1
#define kAssertionStateInactive 0x2
#define kAssertionStateValidOnBatt 0x4
#define kAssertionStateLogged 0x8
#define kAssertionModTimer 0x1
#define kAssertionModLevel 0x2
#define kAssertionModType 0x4
#define kAssertionModPowerConstraint 0x8
typedef enum {
kAssertionOpRaise,
kAssertionOpRelease,
kAssertionOpEval, kAssertionOpGlobalTimeout
} assertionOps;
typedef struct assertionType assertionType_t;
typedef void (*assertionHandler_f)(assertionType_t *a, assertionOps op);
struct assertionType {
uint32_t flags;
LIST_HEAD(, assertion) activeTimed;
LIST_HEAD(, assertion) active;
LIST_HEAD(, assertion) inactive;
uint32_t validOnBattCount;
kerAssertionType kassert;
dispatch_source_t timer;
dispatch_source_t globalTimer;
uint64_t globalTimeout;
uint32_t forceTimedoutCnt;
CFStringRef uuid;
assertionHandler_f handler;
uint32_t linkedTypes;
} ;
#define kAssertionTypeNotValidOnBatt 0x1
#define kAssertionTypeGloballyTimed 0x2
#define kAssertionTypeDisabled 0x4
__private_extern__ void PMAssertions_prime(void);
__private_extern__ void createOnBootAssertions(void);
__private_extern__ void PMAssertions_SettingsHaveChanged(void);
__private_extern__ IOReturn _IOPMSetActivePowerProfilesRequiresRoot(
CFDictionaryRef which_profile,
int uid,
int gid);
__private_extern__ IOReturn _IOPMAssertionCreateRequiresRoot(
mach_port_t task_port,
char *nameCStr,
char *assertionCStr,
int level,
int *assertion_id);
__private_extern__ void _TaskPortInvalidatedCallout(CFMachPortRef port, void *info);
__private_extern__ void _PMAssertionsDriverAssertionsHaveChanged(uint32_t changedDriverAssertions);
__private_extern__ void _ProxyAssertions(const struct IOPMSystemCapabilityChangeParameters *capArgs);
__private_extern__ void PMAssertions_TurnOffAssertions_ApplePushServiceTask(void);
__private_extern__ IOReturn InternalCreateAssertion(
CFMutableDictionaryRef properties,
IOPMAssertionID *outID);
__private_extern__ void InternalReleaseAssertion(
IOPMAssertionID *outID);
__private_extern__ void InternalEvaluateAssertions(void);
__private_extern__ void evalAllUserActivityAssertions(unsigned int dispSlpTimer);
__private_extern__ CFMutableDictionaryRef _IOPMAssertionDescriptionCreate(
CFStringRef AssertionType,
CFStringRef Name,
CFStringRef Details,
CFStringRef HumanReadableReason,
CFStringRef LocalizationBundlePath,
CFTimeInterval Timeout,
CFStringRef TimeoutBehavior);
__private_extern__ CFStringRef processInfoGetName(pid_t p);
__private_extern__ void setSleepServicesTimeCap(uint32_t timeoutInMS);
__private_extern__ bool systemBlockedInS0Dark( );
__private_extern__ bool checkForActivesByType(kerAssertionType type);
__private_extern__ void disableAssertionType(kerAssertionType type);
__private_extern__ void enableAssertionType(kerAssertionType type);
__private_extern__ void applyToAllAssertionsSync(assertionType_t *assertType,
bool applyToInactives, void (^performOnAssertion)(assertion_t *));
__private_extern__ void configAssertionType(kerAssertionType idx, bool initialConfig);
#if !TARGET_OS_EMBEDDED
__private_extern__ void logASLAssertionTypeSummary( kerAssertionType type);
#endif
#endif