]>
Commit | Line | Data |
---|---|---|
1c79356b | 1 | /* |
0c530ab8 | 2 | * Copyright (c) 1998-2005 Apple Computer, Inc. All rights reserved. |
1c79356b | 3 | * |
2d21ac55 | 4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
1c79356b | 5 | * |
2d21ac55 A |
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. | |
8f6c56a5 | 14 | * |
2d21ac55 A |
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 | |
8f6c56a5 A |
20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
2d21ac55 A |
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. | |
8f6c56a5 | 25 | * |
2d21ac55 | 26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
1c79356b A |
27 | */ |
28 | #ifndef _IOKIT_IOPM_H | |
29 | #define _IOKIT_IOPM_H | |
30 | ||
0c530ab8 A |
31 | #include <IOKit/IOTypes.h> |
32 | #include <IOKit/IOMessage.h> | |
33 | #include <IOKit/IOReturn.h> | |
34 | ||
35 | #ifdef __ppc__ | |
36 | #include <IOKit/pwr_mgt/IOPMDeprecated.h> | |
37 | #endif | |
38 | ||
2d21ac55 A |
39 | /*! @header IOPM.h |
40 | @abstract Defines power management constants and keys used by both in-kernel and user space power management. | |
41 | @discussion IOPM.h defines a range of power management constants used in several in-kernel and user space APIs. Most significantly, the IOPMPowerFlags used to specify the fields of an IOPMPowerState struct are defined here. | |
0c530ab8 | 42 | |
2d21ac55 A |
43 | Most of the constants defined in IOPM.h are deprecated or for Apple internal use only, and are not elaborated on in headerdoc. |
44 | */ | |
0c530ab8 A |
45 | |
46 | enum { | |
47 | kIOPMMaxPowerStates = 10, | |
48 | IOPMMaxPowerStates = kIOPMMaxPowerStates | |
49 | }; | |
1c79356b | 50 | |
2d21ac55 A |
51 | /*! @enum IOPMPowerFlags |
52 | @abstract Bits are used in defining capabilityFlags, inputPowerRequirements, and outputPowerCharacter in the IOPMPowerState structure. | |
53 | @discussion These bits may be bitwise-OR'd together in the IOPMPowerState capabilityFlags field, the outputPowerCharacter field, and/or the inputPowerRequirement field. | |
54 | ||
55 | The comments clearly mark whether each flag should be used in the capabilityFlags field, outputPowerCharacter field, and inputPowerRequirement field, or all three. | |
56 | ||
57 | The value of capabilityFlags, inputPowerRequirement or outputPowerCharacter may be 0. Most drivers implement their 'OFF' state, used when asleep, by defininf each of the 3 fields as 0. | |
58 | ||
59 | The bits listed below are only the most common bits used to define a device's power states. Your device's IO family may require that your device specify other input or output power flags to interact properly. Consult family-specific documentation to determine if your IOPower plane parents or children require other power flags; they probably don't. | |
60 | ||
61 | @constant kIOPMPowerOn Indicates the device is on, requires power, and provides power. Useful as a: Capability, InputPowerRequirement, OutputPowerCharacter | |
62 | ||
63 | @constant kIOPMDeviceUsable Indicates the device is usable in this state. Useful only as a Capability | |
64 | ||
65 | @constant kIOPMLowPower | |
66 | Indicates device is in a low power state. May be bitwis-OR'd together | |
67 | with kIOPMDeviceUsable flag, to indicate the device is still usable. | |
68 | ||
69 | A device with a capability of kIOPMLowPower may: | |
70 | Require either 0 or kIOPMPowerOn from its power parent | |
71 | Offer either kIOPMLowPower, kIOPMPowerOn, or 0 (no power at all) | |
72 | to its power plane children. | |
73 | ||
74 | Useful only as a Capability, although USB drivers should consult USB family documentation for other valid circumstances to use the kIOPMLowPower bit. | |
75 | ||
76 | @constant kIOPMPreventIdleSleep | |
77 | In the capability field of a power state, disallows idle system sleep while the device is in that state. | |
78 | ||
79 | For example, displays and disks set this capability for their ON power state; since the system may not idle sleep while the display (and thus keyboard or mouse) or the disk is active. | |
80 | ||
81 | Useful only as a Capability. | |
82 | ||
83 | @constant kIOPMSleepCapability | |
84 | Used only by certain IOKit Families (USB). Not defined or used by generic Power Management. Read your family documentation to see if you should define a powerstate using these capabilities. | |
85 | ||
86 | @constant kIOPMRestartCapability | |
87 | Used only by certain IOKit Families (USB). Not defined or used by generic Power Management. Read your family documentation to see if you should define a powerstate using these capabilities. | |
88 | ||
89 | @constant kIOPMSleep | |
90 | Used only by certain IOKit Families (USB). Not defined or used by generic Power Management. Read your family documentation to see if you should define a powerstate using these capabilities. | |
91 | ||
92 | @constant kIOPMRestart | |
93 | Used only by certain IOKit Families (USB). Not defined or used by generic Power Management. Read your family documentation to see if you should define a powerstate using these capabilities. | |
94 | */ | |
1c79356b | 95 | typedef unsigned long IOPMPowerFlags; |
0b4e3aa0 | 96 | enum { |
2d21ac55 A |
97 | kIOPMPowerOn = 0x00000002, |
98 | kIOPMDeviceUsable = 0x00008000, | |
99 | kIOPMLowPower = 0x00010000, | |
100 | kIOPMPreventIdleSleep = 0x00000040, | |
101 | kIOPMSleepCapability = 0x00000004, | |
102 | kIOPMRestartCapability = 0x00000080, | |
103 | kIOPMSleep = 0x00000001, | |
104 | kIOPMRestart = 0x00000080 | |
105 | }; | |
106 | ||
107 | /* | |
108 | * Private IOPMPowerFlags | |
109 | * | |
110 | * For Apple use only | |
111 | * Not for use with non-Apple drivers | |
112 | * Their behavior is undefined | |
113 | */ | |
114 | enum { | |
0c530ab8 A |
115 | kIOPMClockNormal = 0x0004, |
116 | kIOPMClockRunning = 0x0008, | |
0c530ab8 | 117 | kIOPMPreventSystemSleep = 0x0010, |
2d21ac55 | 118 | kIOPMDoze = 0x0400, |
0c530ab8 | 119 | kIOPMChildClamp = 0x0080, |
0c530ab8 | 120 | kIOPMChildClamp2 = 0x0200, |
2d21ac55 A |
121 | kIOPMNotPowerManaged = 0x0800 |
122 | }; | |
123 | ||
124 | ||
125 | /* | |
126 | * Deprecated IOPMPowerFlags | |
127 | * Their behavior is undefined when used in IOPMPowerState | |
128 | * Capability, InputPowerRequirement, or OutputPowerCharacter fields. | |
129 | */ | |
130 | enum { | |
0c530ab8 | 131 | kIOPMMaxPerformance = 0x4000, |
2d21ac55 A |
132 | kIOPMPassThrough = 0x0100, |
133 | kIOPMAuxPowerOn = 0x0020, | |
134 | kIOPMNotAttainable = 0x0001, | |
0c530ab8 A |
135 | kIOPMContextRetained = 0x2000, |
136 | kIOPMConfigRetained = 0x1000, | |
0c530ab8 | 137 | kIOPMStaticPowerValid = 0x0800, |
2d21ac55 | 138 | kIOPMSoftSleep = 0x0400, |
0c530ab8 A |
139 | kIOPMCapabilitiesMask = kIOPMPowerOn | kIOPMDeviceUsable | |
140 | kIOPMMaxPerformance | kIOPMContextRetained | | |
141 | kIOPMConfigRetained | kIOPMSleepCapability | | |
0b4e3aa0 A |
142 | kIOPMRestartCapability |
143 | }; | |
144 | ||
2d21ac55 A |
145 | /* |
146 | * Support for old names of IOPMPowerFlag constants | |
147 | */ | |
0b4e3aa0 | 148 | enum { |
0c530ab8 A |
149 | IOPMNotAttainable = kIOPMNotAttainable, |
150 | IOPMPowerOn = kIOPMPowerOn, | |
151 | IOPMClockNormal = kIOPMClockNormal, | |
152 | IOPMClockRunning = kIOPMClockRunning, | |
153 | IOPMAuxPowerOn = kIOPMAuxPowerOn, | |
154 | IOPMDeviceUsable = kIOPMDeviceUsable, | |
155 | IOPMMaxPerformance = kIOPMMaxPerformance, | |
156 | IOPMContextRetained = kIOPMContextRetained, | |
157 | IOPMConfigRetained = kIOPMConfigRetained, | |
158 | IOPMNotPowerManaged = kIOPMNotPowerManaged, | |
0c530ab8 | 159 | IOPMSoftSleep = kIOPMSoftSleep |
0b4e3aa0 A |
160 | }; |
161 | ||
162 | ||
163 | enum { | |
0c530ab8 A |
164 | kIOPMNextHigherState = 1, |
165 | kIOPMHighestState = 2, | |
166 | kIOPMNextLowerState = 3, | |
167 | kIOPMLowestState = 4 | |
0b4e3aa0 A |
168 | }; |
169 | ||
170 | enum { | |
0c530ab8 A |
171 | IOPMNextHigherState = kIOPMNextHigherState, |
172 | IOPMHighestState = kIOPMHighestState, | |
173 | IOPMNextLowerState = kIOPMNextLowerState, | |
174 | IOPMLowestState = kIOPMLowestState | |
0b4e3aa0 | 175 | }; |
1c79356b | 176 | |
0c530ab8 A |
177 | // Internal commands used by power managment command queue |
178 | enum { | |
0b4e3aa0 A |
179 | kIOPMBroadcastAggressiveness = 1, |
180 | kIOPMUnidleDevice | |
181 | }; | |
182 | ||
0c530ab8 A |
183 | // Power consumption unknown value |
184 | enum { | |
0b4e3aa0 | 185 | kIOPMUnknown = 0xFFFF |
1c79356b A |
186 | }; |
187 | ||
0c530ab8 A |
188 | /******************************************************************************* |
189 | * | |
190 | * Root Domain property keys of interest | |
191 | * | |
192 | ******************************************************************************/ | |
193 | ||
194 | /* AppleClamshellState | |
195 | * reflects the state of the clamshell (lid) on a portable. | |
196 | * It has a boolean value. | |
197 | * true == clamshell is closed | |
198 | * false == clamshell is open | |
199 | * not present == no clamshell on this hardware | |
200 | */ | |
201 | #define kAppleClamshellStateKey "AppleClamshellState" | |
202 | ||
203 | /* AppleClamshellCausesSleep | |
204 | * reflects the clamshell close behavior on a portable. | |
205 | * It has a boolean value. | |
206 | * true == system will sleep when clamshell is closed | |
207 | * false == system will not sleep on clamshell close | |
208 | * (typically external display mode) | |
209 | * not present == no clamshell on this hardware | |
210 | */ | |
211 | #define kAppleClamshellCausesSleepKey "AppleClamshellCausesSleep" | |
212 | ||
b0d623f7 A |
213 | /* kIOPMSleepWakeUUIDKey |
214 | * Key refers to a CFStringRef that will uniquely identify | |
215 | * a sleep/wake cycle for logging & tracking. | |
216 | * The key becomes valid at the beginning of a sleep cycle - before we | |
217 | * initiate any sleep/wake notifications. | |
218 | * The key becomes invalid at the completion of a system wakeup. The | |
219 | * property will not be present in the IOPMrootDomain's registry entry | |
220 | * when it is invalid. | |
221 | * | |
222 | * See IOPMrootDomain notification kIOPMMessageSleepWakeUUIDChange | |
223 | */ | |
224 | #define kIOPMSleepWakeUUIDKey "SleepWakeUUID" | |
225 | ||
0c530ab8 A |
226 | /******************************************************************************* |
227 | * | |
228 | * Root Domain general interest messages | |
229 | * | |
b0d623f7 A |
230 | * Available by registering for interest type 'gIOGeneralInterest' |
231 | * on IOPMrootDomain. | |
232 | * | |
0c530ab8 A |
233 | ******************************************************************************/ |
234 | ||
235 | /* kIOPMMessageClamshellStateChange | |
236 | * Delivered as a general interest notification on the IOPMrootDomain | |
237 | * IOPMrootDomain sends this message when state of either AppleClamshellState | |
238 | * or AppleClamshellCausesSleep changes. If this clamshell change results in | |
239 | * a sleep, the sleep will initiate soon AFTER delivery of this message. | |
240 | * The state of both variables is encoded in a bitfield argument sent with | |
241 | * the message. Check bits 0 and 1 using kClamshellStateBit & kClamshellSleepBit | |
242 | */ | |
243 | enum { | |
244 | kClamshellStateBit = (1 << 0), | |
245 | kClamshellSleepBit = (1 << 1) | |
246 | }; | |
247 | ||
248 | #define kIOPMMessageClamshellStateChange \ | |
249 | iokit_family_msg(sub_iokit_powermanagement, 0x100) | |
250 | ||
251 | /* kIOPMMessageFeatureChange | |
252 | * Delivered when the set of supported features ("Supported Features" dictionary | |
253 | * under IOPMrootDomain registry) changes in some way. Typically addition or | |
254 | * removal of a supported feature. | |
255 | * RootDomain passes no argument with this message. | |
256 | */ | |
257 | #define kIOPMMessageFeatureChange \ | |
258 | iokit_family_msg(sub_iokit_powermanagement, 0x110) | |
259 | ||
260 | /* kIOPMMessageInflowDisableCancelled | |
261 | * The battery has drained completely to its "Fully Discharged" state. | |
262 | * If a user process has disabled battery inflow for battery | |
263 | * calibration, we forcibly re-enable Inflow at this point. | |
264 | * If inflow HAS been forcibly re-enabled, bit 0 | |
265 | * (kInflowForciblyEnabledBit) will be set. | |
266 | */ | |
4452a7af | 267 | enum { |
0c530ab8 | 268 | kInflowForciblyEnabledBit = (1 << 0) |
4452a7af A |
269 | }; |
270 | ||
4a3eedf9 A |
271 | /* kIOPMMessageInternalBatteryFullyDischarged |
272 | * The battery has drained completely to its "Fully Discharged" state. | |
273 | */ | |
0c530ab8 A |
274 | #define kIOPMMessageInternalBatteryFullyDischarged \ |
275 | iokit_family_msg(sub_iokit_powermanagement, 0x120) | |
276 | ||
4a3eedf9 A |
277 | /* kIOPMMessageSystemPowerEventOccurred |
278 | * Some major system thermal property has changed, and interested clients may | |
279 | * modify their behavior. | |
280 | */ | |
281 | #define kIOPMMessageSystemPowerEventOccurred \ | |
282 | iokit_family_msg(sub_iokit_powermanagement, 0x130) | |
283 | ||
b0d623f7 A |
284 | /* kIOPMMessageSleepWakeUUIDChange |
285 | * Either a new SleepWakeUUID has been specified at the beginning of a sleep, | |
286 | * or we're removing the existing property upon completion of a wakeup. | |
287 | */ | |
288 | #define kIOPMMessageSleepWakeUUIDChange \ | |
289 | iokit_family_msg(sub_iokit_powermanagement, 0x140) | |
290 | ||
291 | /* kIOPMMessageSleepWakeUUIDSet | |
292 | * Argument accompanying the kIOPMMessageSleepWakeUUIDChange notification when | |
293 | * a new UUID has been specified. | |
294 | */ | |
295 | #define kIOPMMessageSleepWakeUUIDSet ((void *)1) | |
296 | ||
297 | /* kIOPMMessageSleepWakeUUIDCleared | |
298 | * Argument accompanying the kIOPMMessageSleepWakeUUIDChange notification when | |
299 | * the current UUID has been removed. | |
300 | */ | |
301 | #define kIOPMMessageSleepWakeUUIDCleared ((void *)0) | |
0c530ab8 A |
302 | |
303 | /******************************************************************************* | |
304 | * | |
305 | * Power commands issued to root domain | |
4a3eedf9 | 306 | * Use with IOPMrootDomain::receivePowerNotification() |
0c530ab8 A |
307 | * |
308 | * These commands are issued from system drivers only: | |
309 | * ApplePMU, AppleSMU, IOGraphics, AppleACPIFamily | |
310 | * | |
311 | ******************************************************************************/ | |
1c79356b | 312 | enum { |
0c530ab8 A |
313 | kIOPMSleepNow = (1<<0), // put machine to sleep now |
314 | kIOPMAllowSleep = (1<<1), // allow idle sleep | |
315 | kIOPMPreventSleep = (1<<2), // do not allow idle sleep | |
316 | kIOPMPowerButton = (1<<3), // power button was pressed | |
317 | kIOPMClamshellClosed = (1<<4), // clamshell was closed | |
318 | kIOPMPowerEmergency = (1<<5), // battery dangerously low | |
319 | kIOPMDisableClamshell = (1<<6), // do not sleep on clamshell closure | |
320 | kIOPMEnableClamshell = (1<<7), // sleep on clamshell closure | |
321 | kIOPMProcessorSpeedChange = (1<<8), // change the processor speed | |
322 | kIOPMOverTemp = (1<<9), // system dangerously hot | |
323 | kIOPMClamshellOpened = (1<<10) // clamshell was opened | |
1c79356b A |
324 | }; |
325 | ||
4a3eedf9 | 326 | |
0c530ab8 A |
327 | /******************************************************************************* |
328 | * | |
329 | * Power Management Return Codes | |
330 | * | |
331 | ******************************************************************************/ | |
1c79356b | 332 | enum { |
0c530ab8 | 333 | kIOPMNoErr = 0, |
b0d623f7 A |
334 | |
335 | // Returned by driver's setPowerState(), powerStateWillChangeTo(), | |
336 | // powerStateDidChangeTo(), or acknowledgeSetPowerState() to | |
337 | // implicitly acknowledge power change upon function return. | |
0c530ab8 | 338 | kIOPMAckImplied = 0, |
b0d623f7 A |
339 | |
340 | // Deprecated | |
0c530ab8 | 341 | kIOPMWillAckLater = 1, |
b0d623f7 A |
342 | |
343 | // Returned by requestPowerDomainState() to indicate | |
344 | // unrecognized specification parameter. | |
0c530ab8 | 345 | kIOPMBadSpecification = 4, |
b0d623f7 A |
346 | |
347 | // Returned by requestPowerDomainState() to indicate | |
348 | // no power state matches search specification. | |
0c530ab8 | 349 | kIOPMNoSuchState = 5, |
b0d623f7 A |
350 | |
351 | // Deprecated | |
0c530ab8 | 352 | kIOPMCannotRaisePower = 6, |
b0d623f7 A |
353 | |
354 | // Deprecated | |
0c530ab8 | 355 | kIOPMParameterError = 7, |
b0d623f7 A |
356 | |
357 | // Returned when power management state is accessed | |
358 | // before driver has called PMinit(). | |
0c530ab8 A |
359 | kIOPMNotYetInitialized = 8, |
360 | ||
361 | // And the old constants; deprecated | |
362 | IOPMNoErr = kIOPMNoErr, | |
363 | IOPMAckImplied = kIOPMAckImplied, | |
364 | IOPMWillAckLater = kIOPMWillAckLater, | |
365 | IOPMBadSpecification = kIOPMBadSpecification, | |
366 | IOPMNoSuchState = kIOPMNoSuchState, | |
367 | IOPMCannotRaisePower = kIOPMCannotRaisePower, | |
368 | IOPMParameterError = kIOPMParameterError, | |
369 | IOPMNotYetInitialized = kIOPMNotYetInitialized | |
370 | }; | |
371 | ||
372 | ||
373 | // IOPMPowerSource class descriptive strings | |
374 | // Power Source state is published as properties to the IORegistry under these | |
375 | // keys. | |
376 | #define kIOPMPSExternalConnectedKey "ExternalConnected" | |
377 | #define kIOPMPSExternalChargeCapableKey "ExternalChargeCapable" | |
378 | #define kIOPMPSBatteryInstalledKey "BatteryInstalled" | |
379 | #define kIOPMPSIsChargingKey "IsCharging" | |
380 | #define kIOPMFullyChargedKey "FullyCharged" | |
381 | #define kIOPMPSAtWarnLevelKey "AtWarnLevel" | |
382 | #define kIOPMPSAtCriticalLevelKey "AtCriticalLevel" | |
383 | #define kIOPMPSCurrentCapacityKey "CurrentCapacity" | |
384 | #define kIOPMPSMaxCapacityKey "MaxCapacity" | |
385 | #define kIOPMPSDesignCapacityKey "DesignCapacity" | |
386 | #define kIOPMPSTimeRemainingKey "TimeRemaining" | |
387 | #define kIOPMPSAmperageKey "Amperage" | |
388 | #define kIOPMPSVoltageKey "Voltage" | |
389 | #define kIOPMPSCycleCountKey "CycleCount" | |
390 | #define kIOPMPSMaxErrKey "MaxErr" | |
391 | #define kIOPMPSAdapterInfoKey "AdapterInfo" | |
392 | #define kIOPMPSLocationKey "Location" | |
393 | #define kIOPMPSErrorConditionKey "ErrorCondition" | |
394 | #define kIOPMPSManufacturerKey "Manufacturer" | |
395 | #define kIOPMPSManufactureDateKey "ManufactureDate" | |
396 | #define kIOPMPSModelKey "Model" | |
397 | #define kIOPMPSSerialKey "Serial" | |
398 | #define kIOPMDeviceNameKey "DeviceName" | |
399 | #define kIOPMPSLegacyBatteryInfoKey "LegacyBatteryInfo" | |
400 | #define kIOPMPSBatteryHealthKey "BatteryHealth" | |
401 | #define kIOPMPSHealthConfidenceKey "HealthConfidence" | |
cf7d32b8 A |
402 | #define kIOPMPSCapacityEstimatedKey "CapacityEstimated" |
403 | #define kIOPMPSBatteryChargeStatusKey "ChargeStatus" | |
593a1d5f | 404 | #define kIOPMPSBatteryTemperatureKey "Temperature" |
cf7d32b8 | 405 | |
b0d623f7 | 406 | // kIOPMPSBatteryChargeStatusKey may have one of the following values, or may have |
cf7d32b8 A |
407 | // no value. If kIOPMBatteryChargeStatusKey has a NULL value (or no value) associated with it |
408 | // then charge is proceeding normally. If one of these battery charge status reasons is listed, | |
409 | // then the charge may have been interrupted. | |
410 | #define kIOPMBatteryChargeStatusTooHot "HighTemperature" | |
411 | #define kIOPMBatteryChargeStatusTooCold "LowTemperature" | |
412 | #define kIOPMBatteryChargeStatusGradient "BatteryTemperatureGradient" | |
0c530ab8 A |
413 | |
414 | // Definitions for battery location, in case of multiple batteries. | |
415 | // A location of 0 is unspecified | |
416 | // Location is undefined for single battery systems | |
417 | enum { | |
418 | kIOPMPSLocationLeft = 1001, | |
419 | kIOPMPSLocationRight = 1002 | |
5d5c5d0d A |
420 | }; |
421 | ||
0c530ab8 A |
422 | // Battery quality health types, specified by BatteryHealth and HealthConfidence |
423 | // properties in an IOPMPowerSource battery kext. | |
5d5c5d0d | 424 | enum { |
0c530ab8 A |
425 | kIOPMUndefinedValue = 0, |
426 | kIOPMPoorValue = 1, | |
427 | kIOPMFairValue = 2, | |
428 | kIOPMGoodValue = 3 | |
4452a7af A |
429 | }; |
430 | ||
0c530ab8 A |
431 | // Battery's time remaining estimate is invalid this long (seconds) after a wake |
432 | #define kIOPMPSInvalidWakeSecondsKey "BatteryInvalidWakeSeconds" | |
433 | ||
434 | // Battery must wait this long (seconds) after being completely charged before | |
435 | // the battery is settled. | |
436 | #define kIOPMPSPostChargeWaitSecondsKey "PostChargeWaitSeconds" | |
437 | ||
438 | // Battery must wait this long (seconds) after being completely discharged | |
439 | // before the battery is settled. | |
440 | #define kIOPMPSPostDishargeWaitSecondsKey "PostDischargeWaitSeconds" | |
441 | ||
442 | ||
4a3eedf9 A |
443 | /* CPU Power Management status keys |
444 | * Pass as arguments to IOPMrootDomain::systemPowerEventOccurred | |
445 | * Or as arguments to IOPMSystemPowerEventOccurred() | |
446 | * Or to decode the dictionary obtained from IOPMCopyCPUPowerStatus() | |
447 | * These keys reflect restrictions placed on the CPU by the system | |
448 | * to bring the CPU's power consumption within allowable thermal and | |
449 | * power constraints. | |
450 | */ | |
451 | ||
452 | ||
453 | /* kIOPMGraphicsPowerLimitsKey | |
454 | * The key representing the dictionary of graphics power limits. | |
455 | * The dictionary contains the other kIOPMCPUPower keys & their associated | |
456 | * values (e.g. Speed limit, Processor Count, and Schedule limits). | |
457 | */ | |
458 | #define kIOPMGraphicsPowerLimitsKey "Graphics_Power_Limits" | |
459 | ||
460 | /* kIOPMGraphicsPowerLimitPerformanceKey | |
461 | * The key representing the percent of overall performance made available | |
462 | * by the graphics chip as a percentage (integer 0 - 100). | |
463 | */ | |
464 | #define kIOPMGraphicsPowerLimitPerformanceKey "Graphics_Power_Performance" | |
465 | ||
466 | ||
467 | ||
468 | /* kIOPMCPUPowerLimitsKey | |
469 | * The key representing the dictionary of CPU Power Limits. | |
470 | * The dictionary contains the other kIOPMCPUPower keys & their associated | |
471 | * values (e.g. Speed limit, Processor Count, and Schedule limits). | |
472 | */ | |
473 | #define kIOPMCPUPowerLimitsKey "CPU_Power_Limits" | |
474 | ||
475 | /* kIOPMCPUPowerLimitProcessorSpeedKey defines the speed & voltage limits placed | |
476 | * on the CPU. | |
477 | * Represented as a percentage (0-100) of maximum CPU speed. | |
478 | */ | |
479 | #define kIOPMCPUPowerLimitProcessorSpeedKey "CPU_Speed_Limit" | |
480 | ||
481 | /* kIOPMCPUPowerLimitProcessorCountKey reflects how many, if any, CPUs have been | |
482 | * taken offline. Represented as an integer number of CPUs (0 - Max CPUs). | |
483 | */ | |
484 | #define kIOPMCPUPowerLimitProcessorCountKey "CPU_Available_CPUs" | |
485 | ||
486 | /* kIOPMCPUPowerLimitSchedulerTimeKey represents the percentage (0-100) of CPU time | |
487 | * available. 100% at normal operation. The OS may limit this time for a percentage | |
488 | * less than 100%. | |
489 | */ | |
490 | #define kIOPMCPUPowerLimitSchedulerTimeKey "CPU_Scheduler_Limit" | |
491 | ||
492 | ||
493 | /* Thermal Level Warning Key | |
494 | * Indicates the thermal constraints placed on the system. This value may | |
495 | * cause clients to action to consume fewer system resources. | |
496 | * The value associated with this warning is defined by the platform. | |
497 | */ | |
498 | #define kIOPMThermalLevelWarningKey "Thermal_Level_Warning" | |
499 | ||
500 | /* Thermal Warning Level values | |
501 | * kIOPMThermalWarningLevelNormal - under normal operating conditions | |
502 | * kIOPMThermalWarningLevelDanger - thermal pressure may cause system slowdown | |
503 | * kIOPMThermalWarningLevelCrisis - thermal conditions may cause imminent shutdown | |
504 | * | |
505 | * The platform may define additional thermal levels if necessary. | |
506 | */ | |
507 | enum { | |
508 | kIOPMThermalWarningLevelNormal = 0, | |
509 | kIOPMThermalWarningLevelDanger = 5, | |
510 | kIOPMThermalWarningLevelCrisis = 10 | |
511 | }; | |
512 | ||
0c530ab8 A |
513 | |
514 | // PM Settings Controller setting types | |
515 | // Settings types used primarily with: | |
516 | // IOPMrootDomain::registerPMSettingController | |
517 | // The values are identical to the similarly named keys for use in user space | |
518 | // PM settings work. Those keys are defined in IOPMLibPrivate.h. | |
519 | #define kIOPMSettingWakeOnRingKey "Wake On Modem Ring" | |
520 | #define kIOPMSettingRestartOnPowerLossKey "Automatic Restart On Power Loss" | |
521 | #define kIOPMSettingWakeOnACChangeKey "Wake On AC Change" | |
522 | #define kIOPMSettingSleepOnPowerButtonKey "Sleep On Power Button" | |
523 | #define kIOPMSettingWakeOnClamshellKey "Wake On Clamshell Open" | |
524 | #define kIOPMSettingReduceBrightnessKey "ReduceBrightness" | |
525 | #define kIOPMSettingDisplaySleepUsesDimKey "Display Sleep Uses Dim" | |
526 | #define kIOPMSettingTimeZoneOffsetKey "TimeZoneOffsetSeconds" | |
527 | #define kIOPMSettingMobileMotionModuleKey "MobileMotionModule" | |
593a1d5f | 528 | #define kIOPMSettingGraphicsSwitchKey "GPUSwitch" |
0c530ab8 A |
529 | |
530 | // Setting controlling drivers can register to receive scheduled wake data | |
531 | // Either in "CF seconds" type, or structured calendar data in a formatted | |
532 | // IOPMCalendarStruct defined below. | |
533 | #define kIOPMSettingAutoWakeSecondsKey "wake" | |
534 | #define kIOPMSettingAutoWakeCalendarKey "WakeByCalendarDate" | |
535 | #define kIOPMSettingAutoPowerSecondsKey "poweron" | |
536 | #define kIOPMSettingAutoPowerCalendarKey "PowerByCalendarDate" | |
537 | ||
538 | // Debug seconds auto wake | |
539 | // Used by sleep cycling debug tools | |
540 | #define kIOPMSettingDebugWakeRelativeKey "WakeRelativeToSleep" | |
541 | #define kIOPMSettingDebugPowerRelativeKey "PowerRelativeToShutdown" | |
542 | ||
b0d623f7 A |
543 | // Maintenance wake calendar. |
544 | #define kIOPMSettingMaintenanceWakeCalendarKey "MaintenanceWakeCalendarDate" | |
545 | ||
0c530ab8 A |
546 | struct IOPMCalendarStruct { |
547 | UInt32 year; | |
548 | UInt8 month; | |
549 | UInt8 day; | |
550 | UInt8 hour; | |
551 | UInt8 minute; | |
552 | UInt8 second; | |
553 | }; | |
554 | typedef struct IOPMCalendarStruct IOPMCalendarStruct; | |
4452a7af | 555 | |
0c530ab8 | 556 | // SetAggressiveness types |
1c79356b A |
557 | enum { |
558 | kPMGeneralAggressiveness = 0, | |
559 | kPMMinutesToDim, | |
560 | kPMMinutesToSpinDown, | |
0b4e3aa0 A |
561 | kPMMinutesToSleep, |
562 | kPMEthernetWakeOnLANSettings, | |
9bccf70c | 563 | kPMSetProcessorSpeed, |
91447636 A |
564 | kPMPowerSource, |
565 | kPMMotionSensor, | |
566 | kPMLastAggressivenessType | |
1c79356b | 567 | }; |
91447636 | 568 | #define kMaxType (kPMLastAggressivenessType-1) |
1c79356b | 569 | |
9bccf70c A |
570 | // SetAggressiveness values for the kPMPowerSource aggressiveness type |
571 | enum { | |
572 | kIOPMInternalPower = 1, | |
573 | kIOPMExternalPower | |
574 | }; | |
575 | ||
0c530ab8 | 576 | #define kIOREMSleepEnabledKey "REMSleepEnabled" |
1c79356b | 577 | |
55e303ae | 578 | // Strings for deciphering the dictionary returned from IOPMCopyBatteryInfo |
0c530ab8 A |
579 | #define kIOBatteryInfoKey "IOBatteryInfo" |
580 | #define kIOBatteryCurrentChargeKey "Current" | |
581 | #define kIOBatteryCapacityKey "Capacity" | |
582 | #define kIOBatteryFlagsKey "Flags" | |
583 | #define kIOBatteryVoltageKey "Voltage" | |
584 | #define kIOBatteryAmperageKey "Amperage" | |
585 | #define kIOBatteryCycleCountKey "Cycle Count" | |
d52fe63f | 586 | |
1c79356b | 587 | enum { |
0c530ab8 A |
588 | kIOBatteryInstalled = (1 << 2), |
589 | kIOBatteryCharge = (1 << 1), | |
590 | kIOBatteryChargerConnect = (1 << 0) | |
1c79356b A |
591 | }; |
592 | ||
e5568f75 | 593 | |
55e303ae A |
594 | // Private power management message indicating battery data has changed |
595 | // Indicates new data resides in the IORegistry | |
596 | #define kIOPMMessageBatteryStatusHasChanged iokit_family_msg(sub_iokit_pmu, 0x100) | |
597 | ||
598 | // Apple private Legacy messages for re-routing AutoWake and AutoPower messages to the PMU | |
599 | // through newer user space IOPMSchedulePowerEvent API | |
600 | #define kIOPMUMessageLegacyAutoWake iokit_family_msg(sub_iokit_pmu, 0x200) | |
0c530ab8 | 601 | #define kIOPMUMessageLegacyAutoPower iokit_family_msg(sub_iokit_pmu, 0x210) |
d52fe63f A |
602 | |
603 | // For use with IOPMPowerSource bFlags | |
604 | #define IOPM_POWER_SOURCE_REV 2 | |
605 | enum { | |
606 | kIOPMACInstalled = kIOBatteryChargerConnect, | |
607 | kIOPMBatteryCharging = kIOBatteryCharge, | |
608 | kIOPMBatteryInstalled = kIOBatteryInstalled, | |
609 | kIOPMUPSInstalled = (1<<3), | |
610 | kIOPMBatteryAtWarn = (1<<4), | |
611 | kIOPMBatteryDepleted = (1<<5), | |
612 | kIOPMACnoChargeCapability = (1<<6), // AC adapter cannot charge battery | |
613 | kIOPMRawLowBattery = (1<<7), // used only by Platform Expert | |
614 | kIOPMForceLowSpeed = (1<<8), // set by Platfm Expert, chk'd by Pwr Plugin | |
615 | kIOPMClosedClamshell = (1<<9), // set by PMU - reflects state of the clamshell | |
616 | kIOPMClamshellStateOnWake = (1<<10) // used only by Platform Expert | |
617 | }; | |
618 | ||
619 | ||
55e303ae A |
620 | // ********************************************** |
621 | // Internal power management data structures | |
622 | // ********************************************** | |
1c79356b A |
623 | |
624 | #if KERNEL && __cplusplus | |
625 | class IOService; | |
626 | ||
627 | enum { | |
628 | kIOPowerEmergencyLevel = 1000 | |
629 | }; | |
630 | ||
631 | enum { | |
632 | kIOPMSubclassPolicy, | |
633 | kIOPMSuperclassPolicy1 | |
634 | }; | |
635 | ||
636 | struct stateChangeNote{ | |
0c530ab8 A |
637 | IOPMPowerFlags stateFlags; |
638 | unsigned long stateNum; | |
639 | void * powerRef; | |
1c79356b A |
640 | }; |
641 | typedef struct stateChangeNote stateChangeNote; | |
642 | ||
0b4e3aa0 | 643 | struct IOPowerStateChangeNotification { |
0c530ab8 A |
644 | void * powerRef; |
645 | unsigned long returnValue; | |
646 | unsigned long stateNumber; | |
647 | IOPMPowerFlags stateFlags; | |
1c79356b | 648 | }; |
0b4e3aa0 A |
649 | typedef struct IOPowerStateChangeNotification IOPowerStateChangeNotification; |
650 | typedef IOPowerStateChangeNotification sleepWakeNote; | |
1c79356b A |
651 | #endif /* KERNEL && __cplusplus */ |
652 | ||
653 | #endif /* ! _IOKIT_IOPM_H */ | |
654 |