1/* 2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29#ifndef _IOKIT_IOSERVICEPM_H 30#define _IOKIT_IOSERVICEPM_H 31 32#include <IOKit/pwr_mgt/IOPM.h> 33 34class IOService; 35class IOServicePM; 36class IOPowerConnection; 37class IOWorkLoop; 38class IOCommandGate; 39class IOTimerEventSource; 40class IOPlatformExpert; 41 42#ifdef XNU_KERNEL_PRIVATE 43class IOPMinformee; 44class IOPMinformeeList; 45class IOPMWorkQueue; 46class IOPMRequest; 47class IOPMRequestQueue; 48class IOPMCompletionQueue; 49 50// PM channels for IOReporting 51#ifndef kPMPowerStatesChID 52#define kPMPowerStatesChID IOREPORT_MAKEID('P','M','S','t','H','i','s','t') 53#endif 54 55#ifndef kPMCurrStateChID 56#define kPMCurrStateChID IOREPORT_MAKEID( 'P','M','C','u','r','S','t','\0' ) 57#endif 58 59// state_id details in PM channels 60#define kPMReportPowerOn 0x01 61#define kPMReportDeviceUsable 0x02 62#define kPMReportLowPower 0x04 63 64 65typedef unsigned long IOPMPowerStateIndex; 66typedef uint32_t IOPMPowerChangeFlags; 67typedef uint32_t IOPMRequestTag; 68 69struct IOPMDriverCallEntry { 70 queue_chain_t link; 71 thread_t thread; 72 IOService * target; 73}; 74 75// Power clients (desires) 76extern const OSSymbol * gIOPMPowerClientDevice; 77extern const OSSymbol * gIOPMPowerClientDriver; 78extern const OSSymbol * gIOPMPowerClientChildProxy; 79extern const OSSymbol * gIOPMPowerClientChildren; 80extern const OSSymbol * gIOPMPowerClientRootDomain; 81 82/* Binary compatibility with drivers that access pm_vars */ 83#ifdef __LP64__ 84#define PM_VARS_SUPPORT 0 85#else 86#define PM_VARS_SUPPORT 1 87#endif 88 89#if PM_VARS_SUPPORT 90/* Deprecated in version 10.5 */ 91class IOPMprot : public OSObject 92{ 93 friend class IOService; 94 95 OSDeclareDefaultStructors(IOPMprot) 96 97public: 98 const char * ourName; 99 IOPlatformExpert * thePlatform; 100 unsigned long theNumberOfPowerStates; 101 IOPMPowerState thePowerStates[IOPMMaxPowerStates]; 102 IOService * theControllingDriver; 103 unsigned long aggressiveness; 104 unsigned long current_aggressiveness_values[kMaxType+1]; 105 bool current_aggressiveness_valid[kMaxType+1]; 106 unsigned long myCurrentState; 107}; 108#endif /* PM_VARS_SUPPORT */ 109#endif /* XNU_KERNEL_PRIVATE */ 110#endif /* !_IOKIT_IOSERVICEPM_H */ 111