1368ad365SApple OSS Distributions /*
2186b8fceSApple OSS Distributions  * Copyright (c) 1998-2012 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 
50e13b1fa5SApple OSS Distributions bool RootDomainUserClient::initWithTask(task_t owningTask, void *security_id,
51e13b1fa5SApple OSS Distributions                     UInt32 type, OSDictionary * properties)
5214e3d835SApple OSS Distributions {
53e13b1fa5SApple OSS Distributions     if (properties)
54e13b1fa5SApple OSS Distributions     properties->setObject(kIOUserClientCrossEndianCompatibleKey, kOSBooleanTrue);
55e13b1fa5SApple OSS Distributions 
56e13b1fa5SApple OSS Distributions     if (!super::initWithTask(owningTask, security_id, type, properties))
5714e3d835SApple OSS Distributions     return false;
5814e3d835SApple OSS Distributions 
5914e3d835SApple OSS Distributions     fOwningTask = owningTask;
6014e3d835SApple OSS Distributions     task_reference (fOwningTask);
6114e3d835SApple OSS Distributions     return true;
6214e3d835SApple OSS Distributions }
6314e3d835SApple OSS Distributions 
6414e3d835SApple OSS Distributions 
65368ad365SApple OSS Distributions bool RootDomainUserClient::start( IOService * provider )
66368ad365SApple OSS Distributions {
67368ad365SApple OSS Distributions     assert(OSDynamicCast(IOPMrootDomain, provider));
68368ad365SApple OSS Distributions     if(!super::start(provider))
69368ad365SApple OSS Distributions         return false;
70368ad365SApple OSS Distributions     fOwner = (IOPMrootDomain *)provider;
71368ad365SApple OSS Distributions 
72368ad365SApple OSS Distributions 
73368ad365SApple OSS Distributions     return true;
74368ad365SApple OSS Distributions }
75368ad365SApple OSS Distributions 
76e13b1fa5SApple OSS Distributions IOReturn RootDomainUserClient::secureSleepSystem( uint32_t *return_code )
7714e3d835SApple OSS Distributions {
78855239e5SApple OSS Distributions     return secureSleepSystemOptions(NULL, 0, return_code);
79e13b1fa5SApple OSS Distributions }
80e13b1fa5SApple OSS Distributions 
81e13b1fa5SApple OSS Distributions IOReturn RootDomainUserClient::secureSleepSystemOptions(
82855239e5SApple OSS Distributions     const void      *inOptions,
83186b8fceSApple OSS Distributions     IOByteCount     inOptionsSize,
84855239e5SApple OSS Distributions     uint32_t        *returnCode)
85e13b1fa5SApple OSS Distributions {
86e13b1fa5SApple OSS Distributions 
8714e3d835SApple OSS Distributions     int             local_priv = 0;
8814e3d835SApple OSS Distributions     int             admin_priv = 0;
8914e3d835SApple OSS Distributions     IOReturn        ret = kIOReturnNotPrivileged;
90e13b1fa5SApple OSS Distributions     OSDictionary    *unserializedOptions =  NULL;
91e13b1fa5SApple OSS Distributions     OSString        *unserializeErrorString = NULL;
9214e3d835SApple OSS Distributions 
9314e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser);
9414e3d835SApple OSS Distributions     local_priv = (kIOReturnSuccess == ret);
9514e3d835SApple OSS Distributions 
9614e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
9714e3d835SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
9814e3d835SApple OSS Distributions 
99e13b1fa5SApple OSS Distributions 
100e13b1fa5SApple OSS Distributions     if (inOptions)
101e13b1fa5SApple OSS Distributions     {
102e13b1fa5SApple OSS Distributions         unserializedOptions = OSDynamicCast( OSDictionary,
103186b8fceSApple OSS Distributions                                              OSUnserializeXML((const char *)inOptions, inOptionsSize, &unserializeErrorString));
104e13b1fa5SApple OSS Distributions 
105e13b1fa5SApple OSS Distributions         if (!unserializedOptions) {
106e13b1fa5SApple OSS Distributions             IOLog("IOPMRootDomain SleepSystem unserialization failure: %s\n",
107e13b1fa5SApple OSS Distributions                 unserializeErrorString ? unserializeErrorString->getCStringNoCopy() : "Unknown");
108e13b1fa5SApple OSS Distributions         }
10914e3d835SApple OSS Distributions     }
11014e3d835SApple OSS Distributions 
111186b8fceSApple OSS Distributions     if ( (local_priv || admin_priv) && fOwner )
112e13b1fa5SApple OSS Distributions     {
113186b8fceSApple OSS Distributions         proc_t p;
114186b8fceSApple OSS Distributions         p = (proc_t)get_bsdtask_info(fOwningTask);
115186b8fceSApple OSS Distributions         if (p) {
116186b8fceSApple OSS Distributions             fOwner->setProperty("SleepRequestedByPID", proc_pid(p), 32);
117186b8fceSApple OSS Distributions         }
118186b8fceSApple OSS Distributions 
119e13b1fa5SApple OSS Distributions         if (unserializedOptions)
120e13b1fa5SApple OSS Distributions         {
121e13b1fa5SApple OSS Distributions             // Publish Sleep Options in registry under root_domain
122e13b1fa5SApple OSS Distributions             fOwner->setProperty( kRootDomainSleepOptionsKey, unserializedOptions);
123e13b1fa5SApple OSS Distributions 
124e13b1fa5SApple OSS Distributions             *returnCode = fOwner->sleepSystemOptions( unserializedOptions );
125e13b1fa5SApple OSS Distributions 
126e13b1fa5SApple OSS Distributions             unserializedOptions->release();
127e13b1fa5SApple OSS Distributions         } else {
128e13b1fa5SApple OSS Distributions             // No options
129e13b1fa5SApple OSS Distributions             // Clear any pre-existing options
130e13b1fa5SApple OSS Distributions             fOwner->removeProperty( kRootDomainSleepOptionsKey );
131e13b1fa5SApple OSS Distributions 
132e13b1fa5SApple OSS Distributions             *returnCode = fOwner->sleepSystemOptions( NULL );
133e13b1fa5SApple OSS Distributions         }
134e13b1fa5SApple OSS Distributions 
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 
14214e3d835SApple OSS Distributions IOReturn RootDomainUserClient::secureSetAggressiveness(
14314e3d835SApple OSS Distributions     unsigned long   type,
14414e3d835SApple OSS Distributions     unsigned long   newLevel,
14514e3d835SApple OSS Distributions     int             *return_code )
14614e3d835SApple OSS Distributions {
14714e3d835SApple OSS Distributions     int             local_priv = 0;
14814e3d835SApple OSS Distributions     int             admin_priv = 0;
14914e3d835SApple OSS Distributions     IOReturn        ret = kIOReturnNotPrivileged;
15014e3d835SApple OSS Distributions 
15114e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser);
15214e3d835SApple OSS Distributions     local_priv = (kIOReturnSuccess == ret);
15314e3d835SApple OSS Distributions 
15414e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
15514e3d835SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
15614e3d835SApple OSS Distributions 
15714e3d835SApple OSS Distributions     if((local_priv || admin_priv) && fOwner) {
15814e3d835SApple OSS Distributions         *return_code = fOwner->setAggressiveness(type, newLevel);
15914e3d835SApple OSS Distributions     } else {
16014e3d835SApple OSS Distributions         *return_code = kIOReturnNotPrivileged;
16114e3d835SApple OSS Distributions     }
162855239e5SApple OSS Distributions     return kIOReturnSuccess;
16314e3d835SApple OSS Distributions }
16414e3d835SApple OSS Distributions 
1653ca3bd55SApple OSS Distributions IOReturn RootDomainUserClient::secureSetMaintenanceWakeCalendar(
166855239e5SApple OSS Distributions     IOPMCalendarStruct      *inCalendar,
167855239e5SApple OSS Distributions     uint32_t                *returnCode)
1683ca3bd55SApple OSS Distributions {
1693ca3bd55SApple OSS Distributions     int                     admin_priv = 0;
1703ca3bd55SApple OSS Distributions     IOReturn                ret = kIOReturnNotPrivileged;
1713ca3bd55SApple OSS Distributions 
1723ca3bd55SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
1733ca3bd55SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
1743ca3bd55SApple OSS Distributions 
1753ca3bd55SApple OSS Distributions     if (admin_priv && fOwner) {
1763ca3bd55SApple OSS Distributions         *returnCode = fOwner->setMaintenanceWakeCalendar(inCalendar);
1773ca3bd55SApple OSS Distributions     } else {
1783ca3bd55SApple OSS Distributions         *returnCode = kIOReturnNotPrivileged;
179855239e5SApple OSS Distributions     }
1803ca3bd55SApple OSS Distributions     return kIOReturnSuccess;
1813ca3bd55SApple OSS Distributions }
182855239e5SApple OSS Distributions 
183855239e5SApple OSS Distributions IOReturn RootDomainUserClient::secureSetUserAssertionLevels(
184855239e5SApple OSS Distributions     uint32_t    assertionBitfield)
185855239e5SApple OSS Distributions {
186855239e5SApple OSS Distributions     int                     admin_priv = 0;
187855239e5SApple OSS Distributions     IOReturn                ret = kIOReturnNotPrivileged;
188855239e5SApple OSS Distributions 
189855239e5SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
190855239e5SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
191855239e5SApple OSS Distributions 
192855239e5SApple OSS Distributions     if (admin_priv && fOwner) {
193855239e5SApple OSS Distributions         ret = fOwner->setPMAssertionUserLevels(assertionBitfield);
194855239e5SApple OSS Distributions     } else {
195855239e5SApple OSS Distributions         ret = kIOReturnNotPrivileged;
196855239e5SApple OSS Distributions     }
197855239e5SApple OSS Distributions     return kIOReturnSuccess;
1983ca3bd55SApple OSS Distributions }
199368ad365SApple OSS Distributions 
200186b8fceSApple OSS Distributions IOReturn RootDomainUserClient::secureGetSystemSleepType(
201186b8fceSApple OSS Distributions     uint32_t    *outSleepType)
202186b8fceSApple OSS Distributions {
203186b8fceSApple OSS Distributions     int                     admin_priv = 0;
204186b8fceSApple OSS Distributions     IOReturn                ret;
205186b8fceSApple OSS Distributions 
206186b8fceSApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
207186b8fceSApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
208186b8fceSApple OSS Distributions 
209186b8fceSApple OSS Distributions     if (admin_priv && fOwner) {
210186b8fceSApple OSS Distributions         ret = fOwner->getSystemSleepType(outSleepType);
211186b8fceSApple OSS Distributions     } else {
212186b8fceSApple OSS Distributions         ret = kIOReturnNotPrivileged;
213186b8fceSApple OSS Distributions     }
214186b8fceSApple OSS Distributions     return ret;
215186b8fceSApple OSS Distributions }
216186b8fceSApple OSS Distributions 
217368ad365SApple OSS Distributions IOReturn RootDomainUserClient::clientClose( void )
218368ad365SApple OSS Distributions {
219368ad365SApple OSS Distributions     detach(fOwner);
22014e3d835SApple OSS Distributions 
22114e3d835SApple OSS Distributions     if(fOwningTask) {
22214e3d835SApple OSS Distributions         task_deallocate(fOwningTask);
22314e3d835SApple OSS Distributions         fOwningTask = 0;
22414e3d835SApple OSS Distributions     }
22514e3d835SApple OSS Distributions 
226368ad365SApple OSS Distributions     return kIOReturnSuccess;
227368ad365SApple OSS Distributions }
228368ad365SApple OSS Distributions 
229855239e5SApple OSS Distributions IOReturn RootDomainUserClient::externalMethod(
230855239e5SApple OSS Distributions     uint32_t selector,
231855239e5SApple OSS Distributions     IOExternalMethodArguments * arguments,
232855239e5SApple OSS Distributions     IOExternalMethodDispatch * dispatch __unused,
233855239e5SApple OSS Distributions     OSObject * target __unused,
234855239e5SApple OSS Distributions     void * reference __unused )
235855239e5SApple OSS Distributions {
236855239e5SApple OSS Distributions     IOReturn    ret = kIOReturnBadArgument;
237855239e5SApple OSS Distributions 
238855239e5SApple OSS Distributions     switch (selector)
239855239e5SApple OSS Distributions     {
240855239e5SApple OSS Distributions         case kPMSetAggressiveness:
241855239e5SApple OSS Distributions             if ((2 == arguments->scalarInputCount)
242855239e5SApple OSS Distributions                 && (1 == arguments->scalarOutputCount))
243855239e5SApple OSS Distributions             {
244855239e5SApple OSS Distributions                 ret = this->secureSetAggressiveness(
245855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[0],
246855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[1],
247855239e5SApple OSS Distributions                                 (int *)&arguments->scalarOutput[0]);
248855239e5SApple OSS Distributions             }
249855239e5SApple OSS Distributions             break;
250855239e5SApple OSS Distributions 
251855239e5SApple OSS Distributions         case kPMGetAggressiveness:
252855239e5SApple OSS Distributions             if ((1 == arguments->scalarInputCount)
253855239e5SApple OSS Distributions                 && (1 == arguments->scalarOutputCount))
254855239e5SApple OSS Distributions             {
255855239e5SApple OSS Distributions                 ret = fOwner->getAggressiveness(
256855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[0],
257855239e5SApple OSS Distributions                                 (unsigned long *)&arguments->scalarOutput[0]);
258855239e5SApple OSS Distributions             }
259855239e5SApple OSS Distributions             break;
260855239e5SApple OSS Distributions 
261855239e5SApple OSS Distributions         case kPMSleepSystem:
262855239e5SApple OSS Distributions             if (1 == arguments->scalarOutputCount)
263855239e5SApple OSS Distributions             {
264855239e5SApple OSS Distributions                 ret = this->secureSleepSystem(
265855239e5SApple OSS Distributions                                 (uint32_t *)&arguments->scalarOutput[0]);
266855239e5SApple OSS Distributions             }
267855239e5SApple OSS Distributions             break;
268855239e5SApple OSS Distributions 
269855239e5SApple OSS Distributions         case kPMAllowPowerChange:
270855239e5SApple OSS Distributions             if (1 == arguments->scalarInputCount)
271855239e5SApple OSS Distributions             {
272855239e5SApple OSS Distributions                 ret = fOwner->allowPowerChange(
273855239e5SApple OSS Distributions                                 arguments->scalarInput[0]);
274855239e5SApple OSS Distributions             }
275855239e5SApple OSS Distributions             break;
276855239e5SApple OSS Distributions 
277855239e5SApple OSS Distributions         case kPMCancelPowerChange:
278855239e5SApple OSS Distributions             if (1 == arguments->scalarInputCount)
279855239e5SApple OSS Distributions             {
280855239e5SApple OSS Distributions                 ret = fOwner->cancelPowerChange(
281855239e5SApple OSS Distributions                                 arguments->scalarInput[0]);
282855239e5SApple OSS Distributions             }
283855239e5SApple OSS Distributions             break;
284855239e5SApple OSS Distributions 
285855239e5SApple OSS Distributions         case kPMShutdownSystem:
286855239e5SApple OSS Distributions             // deperecated interface
287855239e5SApple OSS Distributions             ret = kIOReturnUnsupported;
288855239e5SApple OSS Distributions             break;
289855239e5SApple OSS Distributions 
290855239e5SApple OSS Distributions         case kPMRestartSystem:
291855239e5SApple OSS Distributions             // deperecated interface
292855239e5SApple OSS Distributions             ret = kIOReturnUnsupported;
293855239e5SApple OSS Distributions             break;
294855239e5SApple OSS Distributions 
295855239e5SApple OSS Distributions         case kPMSleepSystemOptions:
296855239e5SApple OSS Distributions             ret = this->secureSleepSystemOptions(
297855239e5SApple OSS Distributions                     arguments->structureInput,
298855239e5SApple OSS Distributions                     arguments->structureInputSize,
299855239e5SApple OSS Distributions                     (uint32_t *)&arguments->scalarOutput[0]);
300855239e5SApple OSS Distributions             break;
301855239e5SApple OSS Distributions         case kPMSetMaintenanceWakeCalendar:
302855239e5SApple OSS Distributions             ret = this->secureSetMaintenanceWakeCalendar(
303855239e5SApple OSS Distributions                     (IOPMCalendarStruct *)arguments->structureInput,
304855239e5SApple OSS Distributions                     (uint32_t *)&arguments->structureOutput);
305855239e5SApple OSS Distributions             arguments->structureOutputSize = sizeof(uint32_t);
306855239e5SApple OSS Distributions             break;
307855239e5SApple OSS Distributions 
308855239e5SApple OSS Distributions         case kPMSetUserAssertionLevels:
309855239e5SApple OSS Distributions             ret = this->secureSetUserAssertionLevels(
310855239e5SApple OSS Distributions                         (uint32_t)arguments->scalarInput[0]);
311855239e5SApple OSS Distributions             break;
312855239e5SApple OSS Distributions 
313d0c1fef6SApple OSS Distributions         case kPMActivityTickle:
314186b8fceSApple OSS Distributions             if ( fOwner->checkSystemCanSustainFullWake() )
315186b8fceSApple OSS Distributions             {
316d0c1fef6SApple OSS Distributions                fOwner->reportUserInput( );
317d0c1fef6SApple OSS Distributions                fOwner->setProperty(kIOPMRootDomainWakeTypeKey, "UserActivity Assertion");
318186b8fceSApple OSS Distributions             }
319d0c1fef6SApple OSS Distributions             ret = kIOReturnSuccess;
320d0c1fef6SApple OSS Distributions             break;
321d0c1fef6SApple OSS Distributions 
322186b8fceSApple OSS Distributions         case kPMSetClamshellSleepState:
323186b8fceSApple OSS Distributions             fOwner->setDisableClamShellSleep(arguments->scalarInput[0] ? true : false);
324186b8fceSApple OSS Distributions             ret = kIOReturnSuccess;
325186b8fceSApple OSS Distributions             break;
326186b8fceSApple OSS Distributions 
327186b8fceSApple OSS Distributions         case kPMGetSystemSleepType:
328186b8fceSApple OSS Distributions             if (1 == arguments->scalarOutputCount)
329186b8fceSApple OSS Distributions             {
330186b8fceSApple OSS Distributions                 ret = this->secureGetSystemSleepType(
331186b8fceSApple OSS Distributions                         (uint32_t *) &arguments->scalarOutput[0]);
332186b8fceSApple OSS Distributions             }
333186b8fceSApple OSS Distributions             break;
334186b8fceSApple OSS Distributions 
335*a3bb9fccSApple OSS Distributions #if defined(__i386__) || defined(__x86_64__)
336186b8fceSApple OSS Distributions         case kPMSleepWakeWatchdogEnable:
337186b8fceSApple OSS Distributions             ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
338186b8fceSApple OSS Distributions             if (ret == kIOReturnSuccess)
339186b8fceSApple OSS Distributions                fOwner->sleepWakeDebugEnableWdog();
340186b8fceSApple OSS Distributions             break;
341186b8fceSApple OSS Distributions 
342186b8fceSApple OSS Distributions 
343186b8fceSApple OSS Distributions         case kPMSleepWakeDebugTrig:
344186b8fceSApple OSS Distributions             ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
345186b8fceSApple OSS Distributions             if (ret == kIOReturnSuccess)
346186b8fceSApple OSS Distributions                fOwner->sleepWakeDebugTrig(false);
347186b8fceSApple OSS Distributions             break;
348*a3bb9fccSApple OSS Distributions #endif
349186b8fceSApple OSS Distributions 
350186b8fceSApple OSS Distributions         case kPMSetDisplayPowerOn:
351186b8fceSApple OSS Distributions             if (1 == arguments->scalarInputCount)
352186b8fceSApple OSS Distributions             {
353186b8fceSApple OSS Distributions                 ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
354186b8fceSApple OSS Distributions                 if (ret == kIOReturnSuccess)
355186b8fceSApple OSS Distributions                     fOwner->setDisplayPowerOn((uint32_t)arguments->scalarInput[0]);
356186b8fceSApple OSS Distributions             }
357186b8fceSApple OSS Distributions             break;
358855239e5SApple OSS Distributions 
359855239e5SApple OSS Distributions         default:
360855239e5SApple OSS Distributions             // bad selector
361855239e5SApple OSS Distributions             return kIOReturnBadArgument;
362855239e5SApple OSS Distributions     }
363855239e5SApple OSS Distributions 
364855239e5SApple OSS Distributions     return ret;
365855239e5SApple OSS Distributions }
366855239e5SApple OSS Distributions 
367855239e5SApple OSS Distributions /* getTargetAndMethodForIndex
368855239e5SApple OSS Distributions  * Not used. We prefer to use externalMethod() for user client invocations.
369855239e5SApple OSS Distributions  * We maintain getTargetAndExternalMethod since it's an exported symbol,
370855239e5SApple OSS Distributions  * and only for that reason.
371855239e5SApple OSS Distributions  */
372855239e5SApple OSS Distributions IOExternalMethod * RootDomainUserClient::getTargetAndMethodForIndex(
373855239e5SApple OSS Distributions     IOService ** targetP, UInt32 index )
374855239e5SApple OSS Distributions {
375855239e5SApple OSS Distributions     // DO NOT EDIT
376855239e5SApple OSS Distributions     return super::getTargetAndMethodForIndex(targetP, index);
377855239e5SApple OSS Distributions }
378855239e5SApple OSS Distributions 
379855239e5SApple OSS Distributions /* setPreventative
380855239e5SApple OSS Distributions  * Does nothing. Exists only for exported symbol compatibility.
381855239e5SApple OSS Distributions  */
382368ad365SApple OSS Distributions void
383368ad365SApple OSS Distributions RootDomainUserClient::setPreventative(UInt32 on_off, UInt32 types_of_sleep)
384855239e5SApple OSS Distributions { return; } // DO NOT EDIT
385