1368ad365SApple OSS Distributions /*
2368ad365SApple OSS Distributions  * Copyright (c) 1998-2000 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>
39368ad365SApple OSS Distributions 
40368ad365SApple OSS Distributions #define super IOUserClient
41368ad365SApple OSS Distributions 
42368ad365SApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
43368ad365SApple OSS Distributions 
44368ad365SApple OSS Distributions OSDefineMetaClassAndStructors(RootDomainUserClient, IOUserClient)
45368ad365SApple OSS Distributions 
46368ad365SApple OSS Distributions /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
47368ad365SApple OSS Distributions 
48e13b1fa5SApple OSS Distributions bool RootDomainUserClient::initWithTask(task_t owningTask, void *security_id,
49e13b1fa5SApple OSS Distributions 					UInt32 type, OSDictionary * properties)
5014e3d835SApple OSS Distributions {
51e13b1fa5SApple OSS Distributions     if (properties)
52e13b1fa5SApple OSS Distributions 	properties->setObject(kIOUserClientCrossEndianCompatibleKey, kOSBooleanTrue);
53e13b1fa5SApple OSS Distributions 
54e13b1fa5SApple OSS Distributions     if (!super::initWithTask(owningTask, security_id, type, properties))
5514e3d835SApple OSS Distributions 	return false;
5614e3d835SApple OSS Distributions 
5714e3d835SApple OSS Distributions     fOwningTask = owningTask;
5814e3d835SApple OSS Distributions     task_reference (fOwningTask);
5914e3d835SApple OSS Distributions     return true;
6014e3d835SApple OSS Distributions }
6114e3d835SApple OSS Distributions 
6214e3d835SApple OSS Distributions 
63368ad365SApple OSS Distributions bool RootDomainUserClient::start( IOService * provider )
64368ad365SApple OSS Distributions {
65368ad365SApple OSS Distributions     assert(OSDynamicCast(IOPMrootDomain, provider));
66368ad365SApple OSS Distributions     if(!super::start(provider))
67368ad365SApple OSS Distributions         return false;
68368ad365SApple OSS Distributions     fOwner = (IOPMrootDomain *)provider;
69368ad365SApple OSS Distributions 
70368ad365SApple OSS Distributions 
71368ad365SApple OSS Distributions     return true;
72368ad365SApple OSS Distributions }
73368ad365SApple OSS Distributions 
74e13b1fa5SApple OSS Distributions IOReturn RootDomainUserClient::secureSleepSystem( uint32_t *return_code )
7514e3d835SApple OSS Distributions {
76*855239e5SApple OSS Distributions     return secureSleepSystemOptions(NULL, 0, return_code);
77e13b1fa5SApple OSS Distributions }
78e13b1fa5SApple OSS Distributions 
79e13b1fa5SApple OSS Distributions IOReturn RootDomainUserClient::secureSleepSystemOptions(
80*855239e5SApple OSS Distributions     const void      *inOptions,
81*855239e5SApple OSS Distributions     IOByteCount     inOptionsSize __unused,
82*855239e5SApple OSS Distributions     uint32_t        *returnCode)
83e13b1fa5SApple OSS Distributions {
84e13b1fa5SApple OSS Distributions 
8514e3d835SApple OSS Distributions     int             local_priv = 0;
8614e3d835SApple OSS Distributions     int             admin_priv = 0;
8714e3d835SApple OSS Distributions     IOReturn        ret = kIOReturnNotPrivileged;
88e13b1fa5SApple OSS Distributions     OSDictionary    *unserializedOptions =  NULL;
89e13b1fa5SApple OSS Distributions     OSString        *unserializeErrorString = NULL;
9014e3d835SApple OSS Distributions 
9114e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser);
9214e3d835SApple OSS Distributions     local_priv = (kIOReturnSuccess == ret);
9314e3d835SApple OSS Distributions 
9414e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
9514e3d835SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
9614e3d835SApple OSS Distributions 
97e13b1fa5SApple OSS Distributions 
98e13b1fa5SApple OSS Distributions     if (inOptions)
99e13b1fa5SApple OSS Distributions     {
100e13b1fa5SApple OSS Distributions         unserializedOptions = OSDynamicCast( OSDictionary,
101e13b1fa5SApple OSS Distributions                                              OSUnserializeXML((const char *)inOptions, &unserializeErrorString));
102e13b1fa5SApple OSS Distributions 
103e13b1fa5SApple OSS Distributions         if (!unserializedOptions) {
104e13b1fa5SApple OSS Distributions             IOLog("IOPMRootDomain SleepSystem unserialization failure: %s\n",
105e13b1fa5SApple OSS Distributions                 unserializeErrorString ? unserializeErrorString->getCStringNoCopy() : "Unknown");
106e13b1fa5SApple OSS Distributions         }
10714e3d835SApple OSS Distributions     }
10814e3d835SApple OSS Distributions 
109e13b1fa5SApple OSS Distributions     if ( (local_priv || admin_priv)
110e13b1fa5SApple OSS Distributions           && fOwner )
111e13b1fa5SApple OSS Distributions     {
112e13b1fa5SApple OSS Distributions         if (unserializedOptions)
113e13b1fa5SApple OSS Distributions         {
114e13b1fa5SApple OSS Distributions             // Publish Sleep Options in registry under root_domain
115e13b1fa5SApple OSS Distributions             fOwner->setProperty( kRootDomainSleepOptionsKey, unserializedOptions);
116e13b1fa5SApple OSS Distributions 
117e13b1fa5SApple OSS Distributions             *returnCode = fOwner->sleepSystemOptions( unserializedOptions );
118e13b1fa5SApple OSS Distributions 
119e13b1fa5SApple OSS Distributions             unserializedOptions->release();
120e13b1fa5SApple OSS Distributions         } else {
121e13b1fa5SApple OSS Distributions             // No options
122e13b1fa5SApple OSS Distributions             // Clear any pre-existing options
123e13b1fa5SApple OSS Distributions             fOwner->removeProperty( kRootDomainSleepOptionsKey );
124e13b1fa5SApple OSS Distributions 
125e13b1fa5SApple OSS Distributions             *returnCode = fOwner->sleepSystemOptions( NULL );
126e13b1fa5SApple OSS Distributions         }
127e13b1fa5SApple OSS Distributions 
128e13b1fa5SApple OSS Distributions     } else {
129e13b1fa5SApple OSS Distributions         *returnCode = kIOReturnNotPrivileged;
130e13b1fa5SApple OSS Distributions     }
131e13b1fa5SApple OSS Distributions 
132e13b1fa5SApple OSS Distributions     return kIOReturnSuccess;
13314e3d835SApple OSS Distributions }
13414e3d835SApple OSS Distributions 
13514e3d835SApple OSS Distributions IOReturn RootDomainUserClient::secureSetAggressiveness(
13614e3d835SApple OSS Distributions     unsigned long   type,
13714e3d835SApple OSS Distributions     unsigned long   newLevel,
13814e3d835SApple OSS Distributions     int             *return_code )
13914e3d835SApple OSS Distributions {
14014e3d835SApple OSS Distributions     int             local_priv = 0;
14114e3d835SApple OSS Distributions     int             admin_priv = 0;
14214e3d835SApple OSS Distributions     IOReturn        ret = kIOReturnNotPrivileged;
14314e3d835SApple OSS Distributions 
14414e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeLocalUser);
14514e3d835SApple OSS Distributions     local_priv = (kIOReturnSuccess == ret);
14614e3d835SApple OSS Distributions 
14714e3d835SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
14814e3d835SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
14914e3d835SApple OSS Distributions 
15014e3d835SApple OSS Distributions     if((local_priv || admin_priv) && fOwner) {
15114e3d835SApple OSS Distributions         *return_code = fOwner->setAggressiveness(type, newLevel);
15214e3d835SApple OSS Distributions     } else {
15314e3d835SApple OSS Distributions         *return_code = kIOReturnNotPrivileged;
15414e3d835SApple OSS Distributions     }
155*855239e5SApple OSS Distributions     return kIOReturnSuccess;
15614e3d835SApple OSS Distributions }
15714e3d835SApple OSS Distributions 
1583ca3bd55SApple OSS Distributions IOReturn RootDomainUserClient::secureSetMaintenanceWakeCalendar(
159*855239e5SApple OSS Distributions     IOPMCalendarStruct      *inCalendar,
160*855239e5SApple OSS Distributions     uint32_t                *returnCode)
1613ca3bd55SApple OSS Distributions {
1623ca3bd55SApple OSS Distributions     int                     admin_priv = 0;
1633ca3bd55SApple OSS Distributions     IOReturn                ret = kIOReturnNotPrivileged;
1643ca3bd55SApple OSS Distributions 
1653ca3bd55SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
1663ca3bd55SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
1673ca3bd55SApple OSS Distributions 
1683ca3bd55SApple OSS Distributions     if (admin_priv && fOwner) {
1693ca3bd55SApple OSS Distributions         *returnCode = fOwner->setMaintenanceWakeCalendar(inCalendar);
1703ca3bd55SApple OSS Distributions     } else {
1713ca3bd55SApple OSS Distributions         *returnCode = kIOReturnNotPrivileged;
172*855239e5SApple OSS Distributions     }
1733ca3bd55SApple OSS Distributions     return kIOReturnSuccess;
1743ca3bd55SApple OSS Distributions }
175*855239e5SApple OSS Distributions 
176*855239e5SApple OSS Distributions IOReturn RootDomainUserClient::secureSetUserAssertionLevels(
177*855239e5SApple OSS Distributions     uint32_t    assertionBitfield)
178*855239e5SApple OSS Distributions {
179*855239e5SApple OSS Distributions     int                     admin_priv = 0;
180*855239e5SApple OSS Distributions     IOReturn                ret = kIOReturnNotPrivileged;
181*855239e5SApple OSS Distributions 
182*855239e5SApple OSS Distributions     ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
183*855239e5SApple OSS Distributions     admin_priv = (kIOReturnSuccess == ret);
184*855239e5SApple OSS Distributions 
185*855239e5SApple OSS Distributions     if (admin_priv && fOwner) {
186*855239e5SApple OSS Distributions         ret = fOwner->setPMAssertionUserLevels(assertionBitfield);
187*855239e5SApple OSS Distributions     } else {
188*855239e5SApple OSS Distributions         ret = kIOReturnNotPrivileged;
189*855239e5SApple OSS Distributions     }
190*855239e5SApple OSS Distributions     return kIOReturnSuccess;
1913ca3bd55SApple OSS Distributions }
192368ad365SApple OSS Distributions 
193368ad365SApple OSS Distributions IOReturn RootDomainUserClient::clientClose( void )
194368ad365SApple OSS Distributions {
195368ad365SApple OSS Distributions     detach(fOwner);
19614e3d835SApple OSS Distributions 
19714e3d835SApple OSS Distributions     if(fOwningTask) {
19814e3d835SApple OSS Distributions         task_deallocate(fOwningTask);
19914e3d835SApple OSS Distributions         fOwningTask = 0;
20014e3d835SApple OSS Distributions     }
20114e3d835SApple OSS Distributions 
202368ad365SApple OSS Distributions     return kIOReturnSuccess;
203368ad365SApple OSS Distributions }
204368ad365SApple OSS Distributions 
205*855239e5SApple OSS Distributions IOReturn RootDomainUserClient::clientMemoryForType(
206*855239e5SApple OSS Distributions     UInt32 type,
207*855239e5SApple OSS Distributions     IOOptionBits *options,
208*855239e5SApple OSS Distributions     IOMemoryDescriptor ** memory)
209368ad365SApple OSS Distributions {
210*855239e5SApple OSS Distributions     if (!fOwner)
211*855239e5SApple OSS Distributions         return kIOReturnNotReady;
212e13b1fa5SApple OSS Distributions 
213*855239e5SApple OSS Distributions     if (kPMRootDomainMapTraceBuffer == type)
214e13b1fa5SApple OSS Distributions     {
215*855239e5SApple OSS Distributions         *memory = fOwner->getPMTraceMemoryDescriptor();
216*855239e5SApple OSS Distributions         if (*memory) {
217*855239e5SApple OSS Distributions             (*memory)->retain();
218*855239e5SApple OSS Distributions             *options = 0;
219*855239e5SApple OSS Distributions             return kIOReturnSuccess;
220*855239e5SApple OSS Distributions         } else {
221*855239e5SApple OSS Distributions             return kIOReturnNotFound;
222368ad365SApple OSS Distributions         }
223368ad365SApple OSS Distributions 
224*855239e5SApple OSS Distributions     }
225*855239e5SApple OSS Distributions     return kIOReturnUnsupported;
226*855239e5SApple OSS Distributions }
227*855239e5SApple OSS Distributions 
228*855239e5SApple OSS Distributions IOReturn RootDomainUserClient::externalMethod(
229*855239e5SApple OSS Distributions     uint32_t selector,
230*855239e5SApple OSS Distributions     IOExternalMethodArguments * arguments,
231*855239e5SApple OSS Distributions     IOExternalMethodDispatch * dispatch __unused,
232*855239e5SApple OSS Distributions     OSObject * target __unused,
233*855239e5SApple OSS Distributions     void * reference __unused )
234*855239e5SApple OSS Distributions {
235*855239e5SApple OSS Distributions     IOReturn    ret = kIOReturnBadArgument;
236*855239e5SApple OSS Distributions 
237*855239e5SApple OSS Distributions     switch (selector)
238*855239e5SApple OSS Distributions     {
239*855239e5SApple OSS Distributions         case kPMSetAggressiveness:
240*855239e5SApple OSS Distributions             if ((2 == arguments->scalarInputCount)
241*855239e5SApple OSS Distributions                 && (1 == arguments->scalarOutputCount))
242*855239e5SApple OSS Distributions             {
243*855239e5SApple OSS Distributions                 ret = this->secureSetAggressiveness(
244*855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[0],
245*855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[1],
246*855239e5SApple OSS Distributions                                 (int *)&arguments->scalarOutput[0]);
247*855239e5SApple OSS Distributions             }
248*855239e5SApple OSS Distributions             break;
249*855239e5SApple OSS Distributions 
250*855239e5SApple OSS Distributions         case kPMGetAggressiveness:
251*855239e5SApple OSS Distributions             if ((1 == arguments->scalarInputCount)
252*855239e5SApple OSS Distributions                 && (1 == arguments->scalarOutputCount))
253*855239e5SApple OSS Distributions             {
254*855239e5SApple OSS Distributions                 ret = fOwner->getAggressiveness(
255*855239e5SApple OSS Distributions                                 (unsigned long)arguments->scalarInput[0],
256*855239e5SApple OSS Distributions                                 (unsigned long *)&arguments->scalarOutput[0]);
257*855239e5SApple OSS Distributions             }
258*855239e5SApple OSS Distributions             break;
259*855239e5SApple OSS Distributions 
260*855239e5SApple OSS Distributions         case kPMSleepSystem:
261*855239e5SApple OSS Distributions             if (1 == arguments->scalarOutputCount)
262*855239e5SApple OSS Distributions             {
263*855239e5SApple OSS Distributions                 ret = this->secureSleepSystem(
264*855239e5SApple OSS Distributions                                 (uint32_t *)&arguments->scalarOutput[0]);
265*855239e5SApple OSS Distributions             }
266*855239e5SApple OSS Distributions             break;
267*855239e5SApple OSS Distributions 
268*855239e5SApple OSS Distributions         case kPMAllowPowerChange:
269*855239e5SApple OSS Distributions             if (1 == arguments->scalarInputCount)
270*855239e5SApple OSS Distributions             {
271*855239e5SApple OSS Distributions                 ret = fOwner->allowPowerChange(
272*855239e5SApple OSS Distributions                                 arguments->scalarInput[0]);
273*855239e5SApple OSS Distributions             }
274*855239e5SApple OSS Distributions             break;
275*855239e5SApple OSS Distributions 
276*855239e5SApple OSS Distributions         case kPMCancelPowerChange:
277*855239e5SApple OSS Distributions             if (1 == arguments->scalarInputCount)
278*855239e5SApple OSS Distributions             {
279*855239e5SApple OSS Distributions                 ret = fOwner->cancelPowerChange(
280*855239e5SApple OSS Distributions                                 arguments->scalarInput[0]);
281*855239e5SApple OSS Distributions             }
282*855239e5SApple OSS Distributions             break;
283*855239e5SApple OSS Distributions 
284*855239e5SApple OSS Distributions         case kPMShutdownSystem:
285*855239e5SApple OSS Distributions             // deperecated interface
286*855239e5SApple OSS Distributions             ret = kIOReturnUnsupported;
287*855239e5SApple OSS Distributions             break;
288*855239e5SApple OSS Distributions 
289*855239e5SApple OSS Distributions         case kPMRestartSystem:
290*855239e5SApple OSS Distributions             // deperecated interface
291*855239e5SApple OSS Distributions             ret = kIOReturnUnsupported;
292*855239e5SApple OSS Distributions             break;
293*855239e5SApple OSS Distributions 
294*855239e5SApple OSS Distributions         case kPMSleepSystemOptions:
295*855239e5SApple OSS Distributions             ret = this->secureSleepSystemOptions(
296*855239e5SApple OSS Distributions                     arguments->structureInput,
297*855239e5SApple OSS Distributions                     arguments->structureInputSize,
298*855239e5SApple OSS Distributions                     (uint32_t *)&arguments->scalarOutput[0]);
299*855239e5SApple OSS Distributions             break;
300*855239e5SApple OSS Distributions         case kPMSetMaintenanceWakeCalendar:
301*855239e5SApple OSS Distributions             ret = this->secureSetMaintenanceWakeCalendar(
302*855239e5SApple OSS Distributions                     (IOPMCalendarStruct *)arguments->structureInput,
303*855239e5SApple OSS Distributions                     (uint32_t *)&arguments->structureOutput);
304*855239e5SApple OSS Distributions             arguments->structureOutputSize = sizeof(uint32_t);
305*855239e5SApple OSS Distributions             break;
306*855239e5SApple OSS Distributions 
307*855239e5SApple OSS Distributions         case kPMSetUserAssertionLevels:
308*855239e5SApple OSS Distributions             ret = this->secureSetUserAssertionLevels(
309*855239e5SApple OSS Distributions                         (uint32_t)arguments->scalarInput[0]);
310*855239e5SApple OSS Distributions             break;
311*855239e5SApple OSS Distributions 
312*855239e5SApple OSS Distributions /*
313*855239e5SApple OSS Distributions         case kPMMethodCopySystemTimeline:
314*855239e5SApple OSS Distributions             // intentional fallthrough
315*855239e5SApple OSS Distributions         case kPMMethodCopyDetailedTimeline:
316*855239e5SApple OSS Distributions 
317*855239e5SApple OSS Distributions             if (!arguments->structureOutputDescriptor)
318*855239e5SApple OSS Distributions             {
319*855239e5SApple OSS Distributions                 // TODO: Force IOKit.framework to always send this data out
320*855239e5SApple OSS Distributions                 // of line; so I don't have to create a MemoryDescriptor here.
321*855239e5SApple OSS Distributions                 mem_size = arguments->structureOutputSize;
322*855239e5SApple OSS Distributions                 mem = IOMemoryDescriptor::withAddressRange(
323*855239e5SApple OSS Distributions                                     (mach_vm_address_t)arguments->structureOutput,
324*855239e5SApple OSS Distributions                                     (mach_vm_size_t)mem_size,
325*855239e5SApple OSS Distributions                                     kIODirectionIn, current_task());
326*855239e5SApple OSS Distributions             } else {
327*855239e5SApple OSS Distributions                 mem_size = arguments->structureOutputDescriptorSize;
328*855239e5SApple OSS Distributions                 if (( mem = arguments->structureOutputDescriptor ))
329*855239e5SApple OSS Distributions                     mem->retain();
330*855239e5SApple OSS Distributions             }
331*855239e5SApple OSS Distributions 
332*855239e5SApple OSS Distributions             if (mem)
333*855239e5SApple OSS Distributions             {
334*855239e5SApple OSS Distributions                 mem->prepare(kIODirectionNone);
335*855239e5SApple OSS Distributions 
336*855239e5SApple OSS Distributions                 if (kPMMethodCopySystemTimeline == selector) {
337*855239e5SApple OSS Distributions                     arguments->scalarOutput[0] = fOwner->copySystemTimeline(
338*855239e5SApple OSS Distributions                                     mem, &mem_size);
339*855239e5SApple OSS Distributions                 }
340*855239e5SApple OSS Distributions                 else
341*855239e5SApple OSS Distributions                 if (kPMMethodCopyDetailedTimeline == selector) {
342*855239e5SApple OSS Distributions                     arguments->scalarOutput[0] = fOwner->copyDetailedTimeline(
343*855239e5SApple OSS Distributions                                     mem, &mem_size);
344*855239e5SApple OSS Distributions                 }
345*855239e5SApple OSS Distributions 
346*855239e5SApple OSS Distributions                 if (arguments->structureOutputDescriptor) {
347*855239e5SApple OSS Distributions                     arguments->structureOutputDescriptorSize = mem_size;
348*855239e5SApple OSS Distributions                 } else {
349*855239e5SApple OSS Distributions                     arguments->structureOutputSize = mem_size;
350*855239e5SApple OSS Distributions                 }
351*855239e5SApple OSS Distributions 
352*855239e5SApple OSS Distributions                 mem->release();
353*855239e5SApple OSS Distributions 
354*855239e5SApple OSS Distributions                 ret = kIOReturnSuccess;
355*855239e5SApple OSS Distributions             } else {
356*855239e5SApple OSS Distributions                 ret = kIOReturnCannotWire;
357*855239e5SApple OSS Distributions             }
358*855239e5SApple OSS Distributions 
359*855239e5SApple OSS Distributions             break;
360*855239e5SApple OSS Distributions */
361*855239e5SApple OSS Distributions         default:
362*855239e5SApple OSS Distributions             // bad selector
363*855239e5SApple OSS Distributions             return kIOReturnBadArgument;
364*855239e5SApple OSS Distributions     }
365*855239e5SApple OSS Distributions 
366*855239e5SApple OSS Distributions     return ret;
367*855239e5SApple OSS Distributions }
368*855239e5SApple OSS Distributions 
369*855239e5SApple OSS Distributions /* getTargetAndMethodForIndex
370*855239e5SApple OSS Distributions  * Not used. We prefer to use externalMethod() for user client invocations.
371*855239e5SApple OSS Distributions  * We maintain getTargetAndExternalMethod since it's an exported symbol,
372*855239e5SApple OSS Distributions  * and only for that reason.
373*855239e5SApple OSS Distributions  */
374*855239e5SApple OSS Distributions IOExternalMethod * RootDomainUserClient::getTargetAndMethodForIndex(
375*855239e5SApple OSS Distributions     IOService ** targetP, UInt32 index )
376*855239e5SApple OSS Distributions {
377*855239e5SApple OSS Distributions     // DO NOT EDIT
378*855239e5SApple OSS Distributions     return super::getTargetAndMethodForIndex(targetP, index);
379*855239e5SApple OSS Distributions }
380*855239e5SApple OSS Distributions 
381*855239e5SApple OSS Distributions /* setPreventative
382*855239e5SApple OSS Distributions  * Does nothing. Exists only for exported symbol compatibility.
383*855239e5SApple OSS Distributions  */
384368ad365SApple OSS Distributions void
385368ad365SApple OSS Distributions RootDomainUserClient::setPreventative(UInt32 on_off, UInt32 types_of_sleep)
386*855239e5SApple OSS Distributions { return; } // DO NOT EDIT
387