1368ad365SApple OSS Distributions /* 2*bb611c8fSApple OSS Distributions * Copyright (c) 1998-2020 Apple Computer, Inc. All rights reserved. 3368ad365SApple OSS Distributions * 4e13b1fa5SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5368ad365SApple OSS Distributions * 6e13b1fa5SApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7e13b1fa5SApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8e13b1fa5SApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9e13b1fa5SApple OSS Distributions * compliance with the License. The rights granted to you under the License 10e13b1fa5SApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 11e13b1fa5SApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 12e13b1fa5SApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 13e13b1fa5SApple OSS Distributions * terms of an Apple operating system software license agreement. 14368ad365SApple OSS Distributions * 15e13b1fa5SApple OSS Distributions * Please obtain a copy of the License at 16e13b1fa5SApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 17e13b1fa5SApple OSS Distributions * 18e13b1fa5SApple OSS Distributions * The Original Code and all software distributed under the License are 19e13b1fa5SApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20368ad365SApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21368ad365SApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22e13b1fa5SApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23e13b1fa5SApple OSS Distributions * Please see the License for the specific language governing rights and 24e13b1fa5SApple OSS Distributions * limitations under the License. 25368ad365SApple OSS Distributions * 26e13b1fa5SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27368ad365SApple OSS Distributions */ 28368ad365SApple OSS Distributions /* 29368ad365SApple OSS Distributions * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 30368ad365SApple OSS Distributions * 31368ad365SApple OSS Distributions */ 32368ad365SApple OSS Distributions 33368ad365SApple OSS Distributions #include <IOKit/assert.h> 34368ad365SApple OSS Distributions #include <IOKit/IOLib.h> 35e13b1fa5SApple OSS Distributions #include <IOKit/IOKitKeys.h> 36368ad365SApple OSS Distributions #include <IOKit/IOBufferMemoryDescriptor.h> 37368ad365SApple OSS Distributions #include "RootDomainUserClient.h" 38368ad365SApple OSS Distributions #include <IOKit/pwr_mgt/IOPMLibDefs.h> 39d0c1fef6SApple OSS Distributions #include <IOKit/pwr_mgt/IOPMPrivate.h> 40186b8fceSApple OSS Distributions #include <sys/proc.h> 41368ad365SApple OSS Distributions 42368ad365SApple OSS Distributions #define super IOUserClient 43368ad365SApple OSS Distributions 44368ad365SApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 45368ad365SApple OSS Distributions 46368ad365SApple OSS Distributions OSDefineMetaClassAndStructors(RootDomainUserClient, IOUserClient) 47368ad365SApple OSS Distributions 48368ad365SApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 49368ad365SApple OSS Distributions 50a5e72196SApple OSS Distributions bool 51a5e72196SApple OSS Distributions RootDomainUserClient::initWithTask(task_t owningTask, void *security_id, 52e13b1fa5SApple OSS Distributions UInt32 type, OSDictionary * properties) 5314e3d835SApple OSS Distributions { 54a5e72196SApple OSS Distributions if (properties) { 55e13b1fa5SApple OSS Distributions properties->setObject(kIOUserClientCrossEndianCompatibleKey, kOSBooleanTrue); 56a5e72196SApple OSS Distributions } 57e13b1fa5SApple OSS Distributions 58a5e72196SApple OSS Distributions if (!super::initWithTask(owningTask, security_id, type, properties)) { 5914e3d835SApple OSS Distributions return false; 60a5e72196SApple OSS Distributions } 6114e3d835SApple OSS Distributions 6214e3d835SApple OSS Distributions fOwningTask = owningTask; 6314e3d835SApple OSS Distributions task_reference(fOwningTask); 6414e3d835SApple OSS Distributions return true; 6514e3d835SApple OSS Distributions } 6614e3d835SApple OSS Distributions 6714e3d835SApple OSS Distributions 68a5e72196SApple OSS Distributions bool 69a5e72196SApple OSS Distributions RootDomainUserClient::start( IOService * provider ) 70368ad365SApple OSS Distributions { 71368ad365SApple OSS Distributions assert(OSDynamicCast(IOPMrootDomain, provider)); 72a5e72196SApple OSS Distributions if (!super::start(provider)) { 73368ad365SApple OSS Distributions return false; 74a5e72196SApple OSS Distributions } 75368ad365SApple OSS Distributions fOwner = (IOPMrootDomain *)provider; 76368ad365SApple OSS Distributions 77368ad365SApple OSS Distributions 78368ad365SApple OSS Distributions return true; 79368ad365SApple OSS Distributions } 80368ad365SApple OSS Distributions 81a5e72196SApple OSS Distributions IOReturn 82a5e72196SApple OSS Distributions RootDomainUserClient::secureSleepSystem( uint32_t *return_code ) 8314e3d835SApple OSS Distributions { 84855239e5SApple OSS Distributions return secureSleepSystemOptions(NULL, 0, return_code); 85e13b1fa5SApple OSS Distributions } 86e13b1fa5SApple OSS Distributions 87a5e72196SApple OSS Distributions IOReturn 88a5e72196SApple OSS Distributions RootDomainUserClient::secureSleepSystemOptions( 89855239e5SApple OSS Distributions const void *inOptions, 90186b8fceSApple OSS Distributions IOByteCount inOptionsSize, 91855239e5SApple OSS Distributions uint32_t *returnCode) 92e13b1fa5SApple OSS Distributions { 9314e3d835SApple OSS Distributions int local_priv = 0; 9414e3d835SApple OSS Distributions int admin_priv = 0; 9514e3d835SApple OSS Distributions IOReturn ret = kIOReturnNotPrivileged; 9614e3d835SApple OSS Distributions 9714e3d835SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser); 9814e3d835SApple OSS Distributions local_priv = (kIOReturnSuccess == ret); 9914e3d835SApple OSS Distributions 10014e3d835SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 10114e3d835SApple OSS Distributions admin_priv = (kIOReturnSuccess == ret); 10214e3d835SApple OSS Distributions 103a5e72196SApple OSS Distributions if ((local_priv || admin_priv) && fOwner) { 104a5e72196SApple OSS Distributions OSString *unserializeErrorString = NULL; 105a5e72196SApple OSS Distributions OSObject *unserializedObject = NULL; 106a5e72196SApple OSS Distributions OSDictionary *sleepOptionsDict = NULL; // do not release 107e13b1fa5SApple OSS Distributions 108186b8fceSApple OSS Distributions proc_t p; 109186b8fceSApple OSS Distributions p = (proc_t)get_bsdtask_info(fOwningTask); 110186b8fceSApple OSS Distributions if (p) { 111186b8fceSApple OSS Distributions fOwner->setProperty("SleepRequestedByPID", proc_pid(p), 32); 112186b8fceSApple OSS Distributions } 113186b8fceSApple OSS Distributions 114a5e72196SApple OSS Distributions if (inOptions) { 115a5e72196SApple OSS Distributions unserializedObject = OSUnserializeXML((const char *)inOptions, inOptionsSize, &unserializeErrorString); 116a5e72196SApple OSS Distributions sleepOptionsDict = OSDynamicCast( OSDictionary, unserializedObject); 117a5e72196SApple OSS Distributions if (!sleepOptionsDict) { 118a5e72196SApple OSS Distributions IOLog("IOPMRootDomain SleepSystem unserialization failure: %s\n", 119a5e72196SApple OSS Distributions unserializeErrorString ? unserializeErrorString->getCStringNoCopy() : "Unknown"); 120a5e72196SApple OSS Distributions } 121a5e72196SApple OSS Distributions } 122a5e72196SApple OSS Distributions 123a5e72196SApple OSS Distributions if (sleepOptionsDict) { 124e13b1fa5SApple OSS Distributions // Publish Sleep Options in registry under root_domain 125a5e72196SApple OSS Distributions fOwner->setProperty( kRootDomainSleepOptionsKey, sleepOptionsDict); 126e13b1fa5SApple OSS Distributions } else { 127e13b1fa5SApple OSS Distributions // No options 128e13b1fa5SApple OSS Distributions // Clear any pre-existing options 129e13b1fa5SApple OSS Distributions fOwner->removeProperty( kRootDomainSleepOptionsKey ); 130e13b1fa5SApple OSS Distributions } 131e13b1fa5SApple OSS Distributions 132a5e72196SApple OSS Distributions *returnCode = fOwner->sleepSystemOptions( sleepOptionsDict ); 133a5e72196SApple OSS Distributions OSSafeReleaseNULL(unserializedObject); 134a5e72196SApple OSS Distributions OSSafeReleaseNULL(unserializeErrorString); 135e13b1fa5SApple OSS Distributions } else { 136e13b1fa5SApple OSS Distributions *returnCode = kIOReturnNotPrivileged; 137e13b1fa5SApple OSS Distributions } 138e13b1fa5SApple OSS Distributions 139e13b1fa5SApple OSS Distributions return kIOReturnSuccess; 14014e3d835SApple OSS Distributions } 14114e3d835SApple OSS Distributions 142a5e72196SApple OSS Distributions IOReturn 143a5e72196SApple OSS Distributions RootDomainUserClient::secureSetAggressiveness( 14414e3d835SApple OSS Distributions unsigned long type, 14514e3d835SApple OSS Distributions unsigned long newLevel, 14614e3d835SApple OSS Distributions int *return_code ) 14714e3d835SApple OSS Distributions { 14814e3d835SApple OSS Distributions int local_priv = 0; 14914e3d835SApple OSS Distributions int admin_priv = 0; 15014e3d835SApple OSS Distributions IOReturn ret = kIOReturnNotPrivileged; 15114e3d835SApple OSS Distributions 15214e3d835SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser); 15314e3d835SApple OSS Distributions local_priv = (kIOReturnSuccess == ret); 15414e3d835SApple OSS Distributions 15514e3d835SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 15614e3d835SApple OSS Distributions admin_priv = (kIOReturnSuccess == ret); 15714e3d835SApple OSS Distributions 15814e3d835SApple OSS Distributions if ((local_priv || admin_priv) && fOwner) { 15914e3d835SApple OSS Distributions *return_code = fOwner->setAggressiveness(type, newLevel); 16014e3d835SApple OSS Distributions } else { 16114e3d835SApple OSS Distributions *return_code = kIOReturnNotPrivileged; 16214e3d835SApple OSS Distributions } 163855239e5SApple OSS Distributions return kIOReturnSuccess; 16414e3d835SApple OSS Distributions } 16514e3d835SApple OSS Distributions 166a5e72196SApple OSS Distributions IOReturn 167a5e72196SApple OSS Distributions RootDomainUserClient::secureSetMaintenanceWakeCalendar( 168855239e5SApple OSS Distributions IOPMCalendarStruct *inCalendar, 169855239e5SApple OSS Distributions uint32_t *returnCode) 1703ca3bd55SApple OSS Distributions { 1713ca3bd55SApple OSS Distributions int admin_priv = 0; 1723ca3bd55SApple OSS Distributions IOReturn ret = kIOReturnNotPrivileged; 1733ca3bd55SApple OSS Distributions 1743ca3bd55SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 1753ca3bd55SApple OSS Distributions admin_priv = (kIOReturnSuccess == ret); 1763ca3bd55SApple OSS Distributions 1773ca3bd55SApple OSS Distributions if (admin_priv && fOwner) { 1783ca3bd55SApple OSS Distributions *returnCode = fOwner->setMaintenanceWakeCalendar(inCalendar); 1793ca3bd55SApple OSS Distributions } else { 1803ca3bd55SApple OSS Distributions *returnCode = kIOReturnNotPrivileged; 181855239e5SApple OSS Distributions } 1823ca3bd55SApple OSS Distributions return kIOReturnSuccess; 1833ca3bd55SApple OSS Distributions } 184855239e5SApple OSS Distributions 185a5e72196SApple OSS Distributions IOReturn 186a5e72196SApple OSS Distributions RootDomainUserClient::secureSetUserAssertionLevels( 187855239e5SApple OSS Distributions uint32_t assertionBitfield) 188855239e5SApple OSS Distributions { 189855239e5SApple OSS Distributions int admin_priv = 0; 190855239e5SApple OSS Distributions IOReturn ret = kIOReturnNotPrivileged; 191855239e5SApple OSS Distributions 192855239e5SApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 193855239e5SApple OSS Distributions admin_priv = (kIOReturnSuccess == ret); 194855239e5SApple OSS Distributions 195855239e5SApple OSS Distributions if (admin_priv && fOwner) { 196855239e5SApple OSS Distributions ret = fOwner->setPMAssertionUserLevels(assertionBitfield); 197855239e5SApple OSS Distributions } else { 198855239e5SApple OSS Distributions ret = kIOReturnNotPrivileged; 199855239e5SApple OSS Distributions } 200855239e5SApple OSS Distributions return kIOReturnSuccess; 2013ca3bd55SApple OSS Distributions } 202368ad365SApple OSS Distributions 203a5e72196SApple OSS Distributions IOReturn 204a5e72196SApple OSS Distributions RootDomainUserClient::secureGetSystemSleepType( 20576e12aa3SApple OSS Distributions uint32_t *outSleepType, uint32_t *sleepTimer) 206186b8fceSApple OSS Distributions { 207186b8fceSApple OSS Distributions int admin_priv = 0; 208186b8fceSApple OSS Distributions IOReturn ret; 209186b8fceSApple OSS Distributions 210186b8fceSApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 211186b8fceSApple OSS Distributions admin_priv = (kIOReturnSuccess == ret); 212186b8fceSApple OSS Distributions 213186b8fceSApple OSS Distributions if (admin_priv && fOwner) { 21476e12aa3SApple OSS Distributions ret = fOwner->getSystemSleepType(outSleepType, sleepTimer); 215186b8fceSApple OSS Distributions } else { 216186b8fceSApple OSS Distributions ret = kIOReturnNotPrivileged; 217186b8fceSApple OSS Distributions } 218186b8fceSApple OSS Distributions return ret; 219186b8fceSApple OSS Distributions } 220186b8fceSApple OSS Distributions 221a5e72196SApple OSS Distributions IOReturn 222a5e72196SApple OSS Distributions RootDomainUserClient::clientClose( void ) 223368ad365SApple OSS Distributions { 22476e12aa3SApple OSS Distributions terminate(); 22514e3d835SApple OSS Distributions 22676e12aa3SApple OSS Distributions return kIOReturnSuccess; 22776e12aa3SApple OSS Distributions } 22876e12aa3SApple OSS Distributions 229a5e72196SApple OSS Distributions void 230a5e72196SApple OSS Distributions RootDomainUserClient::stop( IOService *provider) 23176e12aa3SApple OSS Distributions { 23214e3d835SApple OSS Distributions if (fOwningTask) { 23314e3d835SApple OSS Distributions task_deallocate(fOwningTask); 234a5e72196SApple OSS Distributions fOwningTask = NULL; 23514e3d835SApple OSS Distributions } 23614e3d835SApple OSS Distributions 23776e12aa3SApple OSS Distributions super::stop(provider); 238368ad365SApple OSS Distributions } 239368ad365SApple OSS Distributions 240a5e72196SApple OSS Distributions IOReturn 241a5e72196SApple OSS Distributions RootDomainUserClient::externalMethod( 242855239e5SApple OSS Distributions uint32_t selector, 243855239e5SApple OSS Distributions IOExternalMethodArguments * arguments, 244855239e5SApple OSS Distributions IOExternalMethodDispatch * dispatch __unused, 245855239e5SApple OSS Distributions OSObject * target __unused, 246855239e5SApple OSS Distributions void * reference __unused ) 247855239e5SApple OSS Distributions { 248855239e5SApple OSS Distributions IOReturn ret = kIOReturnBadArgument; 249855239e5SApple OSS Distributions 250a5e72196SApple OSS Distributions switch (selector) { 251855239e5SApple OSS Distributions case kPMSetAggressiveness: 252855239e5SApple OSS Distributions if ((2 == arguments->scalarInputCount) 253a5e72196SApple OSS Distributions && (1 == arguments->scalarOutputCount)) { 254855239e5SApple OSS Distributions ret = this->secureSetAggressiveness( 255855239e5SApple OSS Distributions (unsigned long)arguments->scalarInput[0], 256855239e5SApple OSS Distributions (unsigned long)arguments->scalarInput[1], 257855239e5SApple OSS Distributions (int *)&arguments->scalarOutput[0]); 258855239e5SApple OSS Distributions } 259855239e5SApple OSS Distributions break; 260855239e5SApple OSS Distributions 261855239e5SApple OSS Distributions case kPMGetAggressiveness: 262855239e5SApple OSS Distributions if ((1 == arguments->scalarInputCount) 263a5e72196SApple OSS Distributions && (1 == arguments->scalarOutputCount)) { 264855239e5SApple OSS Distributions ret = fOwner->getAggressiveness( 265855239e5SApple OSS Distributions (unsigned long)arguments->scalarInput[0], 266855239e5SApple OSS Distributions (unsigned long *)&arguments->scalarOutput[0]); 267855239e5SApple OSS Distributions } 268855239e5SApple OSS Distributions break; 269855239e5SApple OSS Distributions 270855239e5SApple OSS Distributions case kPMSleepSystem: 271a5e72196SApple OSS Distributions if (1 == arguments->scalarOutputCount) { 272855239e5SApple OSS Distributions ret = this->secureSleepSystem( 273855239e5SApple OSS Distributions (uint32_t *)&arguments->scalarOutput[0]); 274855239e5SApple OSS Distributions } 275855239e5SApple OSS Distributions break; 276855239e5SApple OSS Distributions 277855239e5SApple OSS Distributions case kPMAllowPowerChange: 278a5e72196SApple OSS Distributions if (1 == arguments->scalarInputCount) { 279855239e5SApple OSS Distributions ret = fOwner->allowPowerChange( 280855239e5SApple OSS Distributions arguments->scalarInput[0]); 281855239e5SApple OSS Distributions } 282855239e5SApple OSS Distributions break; 283855239e5SApple OSS Distributions 284855239e5SApple OSS Distributions case kPMCancelPowerChange: 285a5e72196SApple OSS Distributions if (1 == arguments->scalarInputCount) { 286855239e5SApple OSS Distributions ret = fOwner->cancelPowerChange( 287855239e5SApple OSS Distributions arguments->scalarInput[0]); 288855239e5SApple OSS Distributions } 289855239e5SApple OSS Distributions break; 290855239e5SApple OSS Distributions 291855239e5SApple OSS Distributions case kPMShutdownSystem: 292855239e5SApple OSS Distributions // deperecated interface 293855239e5SApple OSS Distributions ret = kIOReturnUnsupported; 294855239e5SApple OSS Distributions break; 295855239e5SApple OSS Distributions 296855239e5SApple OSS Distributions case kPMRestartSystem: 297855239e5SApple OSS Distributions // deperecated interface 298855239e5SApple OSS Distributions ret = kIOReturnUnsupported; 299855239e5SApple OSS Distributions break; 300855239e5SApple OSS Distributions 301855239e5SApple OSS Distributions case kPMSleepSystemOptions: 302855239e5SApple OSS Distributions ret = this->secureSleepSystemOptions( 303855239e5SApple OSS Distributions arguments->structureInput, 304855239e5SApple OSS Distributions arguments->structureInputSize, 305855239e5SApple OSS Distributions (uint32_t *)&arguments->scalarOutput[0]); 306855239e5SApple OSS Distributions break; 307855239e5SApple OSS Distributions case kPMSetMaintenanceWakeCalendar: 30888cc0b97SApple OSS Distributions if ((arguments->structureInputSize >= sizeof(IOPMCalendarStruct)) && 30988cc0b97SApple OSS Distributions (arguments->structureOutputSize >= sizeof(uint32_t))) { 310855239e5SApple OSS Distributions ret = this->secureSetMaintenanceWakeCalendar( 311855239e5SApple OSS Distributions (IOPMCalendarStruct *)arguments->structureInput, 312855239e5SApple OSS Distributions (uint32_t *)&arguments->structureOutput); 313855239e5SApple OSS Distributions arguments->structureOutputSize = sizeof(uint32_t); 31488cc0b97SApple OSS Distributions } 315855239e5SApple OSS Distributions break; 316855239e5SApple OSS Distributions 317855239e5SApple OSS Distributions case kPMSetUserAssertionLevels: 318855239e5SApple OSS Distributions ret = this->secureSetUserAssertionLevels( 319855239e5SApple OSS Distributions (uint32_t)arguments->scalarInput[0]); 320855239e5SApple OSS Distributions break; 321855239e5SApple OSS Distributions 322d0c1fef6SApple OSS Distributions case kPMActivityTickle: 323a5e72196SApple OSS Distributions if (fOwner->checkSystemCanSustainFullWake()) { 324d0c1fef6SApple OSS Distributions fOwner->reportUserInput(); 325d0c1fef6SApple OSS Distributions fOwner->setProperty(kIOPMRootDomainWakeTypeKey, "UserActivity Assertion"); 326186b8fceSApple OSS Distributions } 327d0c1fef6SApple OSS Distributions ret = kIOReturnSuccess; 328d0c1fef6SApple OSS Distributions break; 329d0c1fef6SApple OSS Distributions 330186b8fceSApple OSS Distributions case kPMSetClamshellSleepState: 331*bb611c8fSApple OSS Distributions fOwner->setClamShellSleepDisable(arguments->scalarInput[0] ? true : false, 332*bb611c8fSApple OSS Distributions IOPMrootDomain::kClamshellSleepDisablePowerd); 333186b8fceSApple OSS Distributions ret = kIOReturnSuccess; 334186b8fceSApple OSS Distributions break; 335186b8fceSApple OSS Distributions 336186b8fceSApple OSS Distributions case kPMGetSystemSleepType: 337a5e72196SApple OSS Distributions if (2 == arguments->scalarOutputCount) { 338186b8fceSApple OSS Distributions ret = this->secureGetSystemSleepType( 33976e12aa3SApple OSS Distributions (uint32_t *) &arguments->scalarOutput[0], 34076e12aa3SApple OSS Distributions (uint32_t *) &arguments->scalarOutput[1]); 341186b8fceSApple OSS Distributions } 342186b8fceSApple OSS Distributions break; 343186b8fceSApple OSS Distributions 344a3bb9fccSApple OSS Distributions #if defined(__i386__) || defined(__x86_64__) 345186b8fceSApple OSS Distributions case kPMSleepWakeWatchdogEnable: 346186b8fceSApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 347a5e72196SApple OSS Distributions if (ret == kIOReturnSuccess) { 348186b8fceSApple OSS Distributions fOwner->sleepWakeDebugEnableWdog(); 349a5e72196SApple OSS Distributions } 350186b8fceSApple OSS Distributions break; 351186b8fceSApple OSS Distributions 352186b8fceSApple OSS Distributions 353186b8fceSApple OSS Distributions case kPMSleepWakeDebugTrig: 354186b8fceSApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 355a5e72196SApple OSS Distributions if (ret == kIOReturnSuccess) { 356186b8fceSApple OSS Distributions fOwner->sleepWakeDebugTrig(false); 357a5e72196SApple OSS Distributions } 358186b8fceSApple OSS Distributions break; 359a3bb9fccSApple OSS Distributions #endif 360186b8fceSApple OSS Distributions 361186b8fceSApple OSS Distributions case kPMSetDisplayPowerOn: 362a5e72196SApple OSS Distributions if (1 == arguments->scalarInputCount) { 363186b8fceSApple OSS Distributions ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator); 364a5e72196SApple OSS Distributions if (ret == kIOReturnSuccess) { 365186b8fceSApple OSS Distributions fOwner->setDisplayPowerOn((uint32_t)arguments->scalarInput[0]); 366186b8fceSApple OSS Distributions } 367a5e72196SApple OSS Distributions } 368186b8fceSApple OSS Distributions break; 369855239e5SApple OSS Distributions 370855239e5SApple OSS Distributions default: 371855239e5SApple OSS Distributions // bad selector 372855239e5SApple OSS Distributions return kIOReturnBadArgument; 373855239e5SApple OSS Distributions } 374855239e5SApple OSS Distributions 375855239e5SApple OSS Distributions return ret; 376855239e5SApple OSS Distributions } 377855239e5SApple OSS Distributions 378855239e5SApple OSS Distributions /* getTargetAndMethodForIndex 379855239e5SApple OSS Distributions * Not used. We prefer to use externalMethod() for user client invocations. 380855239e5SApple OSS Distributions * We maintain getTargetAndExternalMethod since it's an exported symbol, 381855239e5SApple OSS Distributions * and only for that reason. 382855239e5SApple OSS Distributions */ 383a5e72196SApple OSS Distributions IOExternalMethod * 384a5e72196SApple OSS Distributions RootDomainUserClient::getTargetAndMethodForIndex( 385855239e5SApple OSS Distributions IOService ** targetP, UInt32 index ) 386855239e5SApple OSS Distributions { 387855239e5SApple OSS Distributions // DO NOT EDIT 388855239e5SApple OSS Distributions return super::getTargetAndMethodForIndex(targetP, index); 389855239e5SApple OSS Distributions } 390855239e5SApple OSS Distributions 391855239e5SApple OSS Distributions /* setPreventative 392855239e5SApple OSS Distributions * Does nothing. Exists only for exported symbol compatibility. 393855239e5SApple OSS Distributions */ 394368ad365SApple OSS Distributions void 395368ad365SApple OSS Distributions RootDomainUserClient::setPreventative(UInt32 on_off, UInt32 types_of_sleep) 396a5e72196SApple OSS Distributions { 397a5e72196SApple OSS Distributions return; 398a5e72196SApple OSS Distributions } // DO NOT EDIT 399