+ IOReturn ret = kIOReturnBadArgument;
+
+ switch (selector)
+ {
+ case kPMSetAggressiveness:
+ if ((2 == arguments->scalarInputCount)
+ && (1 == arguments->scalarOutputCount))
+ {
+ ret = this->secureSetAggressiveness(
+ (unsigned long)arguments->scalarInput[0],
+ (unsigned long)arguments->scalarInput[1],
+ (int *)&arguments->scalarOutput[0]);
+ }
+ break;
+
+ case kPMGetAggressiveness:
+ if ((1 == arguments->scalarInputCount)
+ && (1 == arguments->scalarOutputCount))
+ {
+ ret = fOwner->getAggressiveness(
+ (unsigned long)arguments->scalarInput[0],
+ (unsigned long *)&arguments->scalarOutput[0]);
+ }
+ break;
+
+ case kPMSleepSystem:
+ if (1 == arguments->scalarOutputCount)
+ {
+ ret = this->secureSleepSystem(
+ (uint32_t *)&arguments->scalarOutput[0]);
+ }
+ break;
+
+ case kPMAllowPowerChange:
+ if (1 == arguments->scalarInputCount)
+ {
+ ret = fOwner->allowPowerChange(
+ arguments->scalarInput[0]);
+ }
+ break;
+
+ case kPMCancelPowerChange:
+ if (1 == arguments->scalarInputCount)
+ {
+ ret = fOwner->cancelPowerChange(
+ arguments->scalarInput[0]);
+ }
+ break;
+
+ case kPMShutdownSystem:
+ // deperecated interface
+ ret = kIOReturnUnsupported;
+ break;
+
+ case kPMRestartSystem:
+ // deperecated interface
+ ret = kIOReturnUnsupported;
+ break;
+
+ case kPMSleepSystemOptions:
+ ret = this->secureSleepSystemOptions(
+ arguments->structureInput,
+ arguments->structureInputSize,
+ (uint32_t *)&arguments->scalarOutput[0]);
+ break;
+ case kPMSetMaintenanceWakeCalendar:
+ if ((arguments->structureInputSize >= sizeof(IOPMCalendarStruct)) &&
+ (arguments->structureOutputSize >= sizeof(uint32_t) )) {
+ ret = this->secureSetMaintenanceWakeCalendar(
+ (IOPMCalendarStruct *)arguments->structureInput,
+ (uint32_t *)&arguments->structureOutput);
+ arguments->structureOutputSize = sizeof(uint32_t);
+ }
+ break;
+
+ case kPMSetUserAssertionLevels:
+ ret = this->secureSetUserAssertionLevels(
+ (uint32_t)arguments->scalarInput[0]);
+ break;
+
+ case kPMActivityTickle:
+ if ( fOwner->checkSystemCanSustainFullWake() )
+ {
+ fOwner->reportUserInput( );
+ fOwner->setProperty(kIOPMRootDomainWakeTypeKey, "UserActivity Assertion");
+ }
+ ret = kIOReturnSuccess;
+ break;
+
+ case kPMSetClamshellSleepState:
+ fOwner->setDisableClamShellSleep(arguments->scalarInput[0] ? true : false);
+ ret = kIOReturnSuccess;
+ break;
+
+ case kPMGetSystemSleepType:
+ if (2 == arguments->scalarOutputCount)
+ {
+ ret = this->secureGetSystemSleepType(
+ (uint32_t *) &arguments->scalarOutput[0],
+ (uint32_t *) &arguments->scalarOutput[1]);
+ }
+ break;
+
+#if defined(__i386__) || defined(__x86_64__)
+ case kPMSleepWakeWatchdogEnable:
+ ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+ if (ret == kIOReturnSuccess)
+ fOwner->sleepWakeDebugEnableWdog();
+ break;
+
+
+ case kPMSleepWakeDebugTrig:
+ ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+ if (ret == kIOReturnSuccess)
+ fOwner->sleepWakeDebugTrig(false);
+ break;
+#endif
+
+ case kPMSetDisplayPowerOn:
+ if (1 == arguments->scalarInputCount)
+ {
+ ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+ if (ret == kIOReturnSuccess)
+ fOwner->setDisplayPowerOn((uint32_t)arguments->scalarInput[0]);
+ }
+ break;
+
+ default:
+ // bad selector
+ return kIOReturnBadArgument;
+ }
+
+ return ret;
+}
+
+/* getTargetAndMethodForIndex
+ * Not used. We prefer to use externalMethod() for user client invocations.
+ * We maintain getTargetAndExternalMethod since it's an exported symbol,
+ * and only for that reason.
+ */
+IOExternalMethod * RootDomainUserClient::getTargetAndMethodForIndex(
+ IOService ** targetP, UInt32 index )
+{
+ // DO NOT EDIT
+ return super::getTargetAndMethodForIndex(targetP, index);