]>
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 | ||
213 | /******************************************************************************* | |
214 | * | |
215 | * Root Domain general interest messages | |
216 | * | |
217 | ******************************************************************************/ | |
218 | ||
219 | /* kIOPMMessageClamshellStateChange | |
220 | * Delivered as a general interest notification on the IOPMrootDomain | |
221 | * IOPMrootDomain sends this message when state of either AppleClamshellState | |
222 | * or AppleClamshellCausesSleep changes. If this clamshell change results in | |
223 | * a sleep, the sleep will initiate soon AFTER delivery of this message. | |
224 | * The state of both variables is encoded in a bitfield argument sent with | |
225 | * the message. Check bits 0 and 1 using kClamshellStateBit & kClamshellSleepBit | |
226 | */ | |
227 | enum { | |
228 | kClamshellStateBit = (1 << 0), | |
229 | kClamshellSleepBit = (1 << 1) | |
230 | }; | |
231 | ||
232 | #define kIOPMMessageClamshellStateChange \ | |
233 | iokit_family_msg(sub_iokit_powermanagement, 0x100) | |
234 | ||
235 | /* kIOPMMessageFeatureChange | |
236 | * Delivered when the set of supported features ("Supported Features" dictionary | |
237 | * under IOPMrootDomain registry) changes in some way. Typically addition or | |
238 | * removal of a supported feature. | |
239 | * RootDomain passes no argument with this message. | |
240 | */ | |
241 | #define kIOPMMessageFeatureChange \ | |
242 | iokit_family_msg(sub_iokit_powermanagement, 0x110) | |
243 | ||
244 | /* kIOPMMessageInflowDisableCancelled | |
245 | * The battery has drained completely to its "Fully Discharged" state. | |
246 | * If a user process has disabled battery inflow for battery | |
247 | * calibration, we forcibly re-enable Inflow at this point. | |
248 | * If inflow HAS been forcibly re-enabled, bit 0 | |
249 | * (kInflowForciblyEnabledBit) will be set. | |
250 | */ | |
4452a7af | 251 | enum { |
0c530ab8 | 252 | kInflowForciblyEnabledBit = (1 << 0) |
4452a7af A |
253 | }; |
254 | ||
4a3eedf9 A |
255 | /* kIOPMMessageInternalBatteryFullyDischarged |
256 | * The battery has drained completely to its "Fully Discharged" state. | |
257 | */ | |
0c530ab8 A |
258 | #define kIOPMMessageInternalBatteryFullyDischarged \ |
259 | iokit_family_msg(sub_iokit_powermanagement, 0x120) | |
260 | ||
4a3eedf9 A |
261 | /* kIOPMMessageSystemPowerEventOccurred |
262 | * Some major system thermal property has changed, and interested clients may | |
263 | * modify their behavior. | |
264 | */ | |
265 | #define kIOPMMessageSystemPowerEventOccurred \ | |
266 | iokit_family_msg(sub_iokit_powermanagement, 0x130) | |
267 | ||
0c530ab8 A |
268 | |
269 | /******************************************************************************* | |
270 | * | |
271 | * Power commands issued to root domain | |
4a3eedf9 | 272 | * Use with IOPMrootDomain::receivePowerNotification() |
0c530ab8 A |
273 | * |
274 | * These commands are issued from system drivers only: | |
275 | * ApplePMU, AppleSMU, IOGraphics, AppleACPIFamily | |
276 | * | |
277 | ******************************************************************************/ | |
1c79356b | 278 | enum { |
0c530ab8 A |
279 | kIOPMSleepNow = (1<<0), // put machine to sleep now |
280 | kIOPMAllowSleep = (1<<1), // allow idle sleep | |
281 | kIOPMPreventSleep = (1<<2), // do not allow idle sleep | |
282 | kIOPMPowerButton = (1<<3), // power button was pressed | |
283 | kIOPMClamshellClosed = (1<<4), // clamshell was closed | |
284 | kIOPMPowerEmergency = (1<<5), // battery dangerously low | |
285 | kIOPMDisableClamshell = (1<<6), // do not sleep on clamshell closure | |
286 | kIOPMEnableClamshell = (1<<7), // sleep on clamshell closure | |
287 | kIOPMProcessorSpeedChange = (1<<8), // change the processor speed | |
288 | kIOPMOverTemp = (1<<9), // system dangerously hot | |
289 | kIOPMClamshellOpened = (1<<10) // clamshell was opened | |
1c79356b A |
290 | }; |
291 | ||
4a3eedf9 | 292 | |
0c530ab8 A |
293 | /******************************************************************************* |
294 | * | |
295 | * Power Management Return Codes | |
296 | * | |
297 | ******************************************************************************/ | |
1c79356b | 298 | enum { |
0c530ab8 A |
299 | kIOPMNoErr = 0, |
300 | // Returned by powerStateWillChange and powerStateDidChange: | |
301 | // Immediate acknowledgement of power state change | |
302 | kIOPMAckImplied = 0, | |
303 | // Acknowledgement of power state change will come later | |
304 | kIOPMWillAckLater = 1, | |
305 | ||
306 | // Returned by requestDomainState: | |
307 | // Unrecognized specification parameter | |
308 | kIOPMBadSpecification = 4, | |
309 | // No power state matches search specification | |
310 | kIOPMNoSuchState = 5, | |
311 | ||
312 | // Device cannot change its power for some reason | |
313 | kIOPMCannotRaisePower = 6, | |
314 | ||
315 | // Returned by changeStateTo: | |
316 | // Requested state doesn't exist | |
317 | kIOPMParameterError = 7, | |
318 | // Device not yet fully hooked into power management | |
319 | kIOPMNotYetInitialized = 8, | |
320 | ||
321 | // And the old constants; deprecated | |
322 | IOPMNoErr = kIOPMNoErr, | |
323 | IOPMAckImplied = kIOPMAckImplied, | |
324 | IOPMWillAckLater = kIOPMWillAckLater, | |
325 | IOPMBadSpecification = kIOPMBadSpecification, | |
326 | IOPMNoSuchState = kIOPMNoSuchState, | |
327 | IOPMCannotRaisePower = kIOPMCannotRaisePower, | |
328 | IOPMParameterError = kIOPMParameterError, | |
329 | IOPMNotYetInitialized = kIOPMNotYetInitialized | |
330 | }; | |
331 | ||
332 | ||
333 | // IOPMPowerSource class descriptive strings | |
334 | // Power Source state is published as properties to the IORegistry under these | |
335 | // keys. | |
336 | #define kIOPMPSExternalConnectedKey "ExternalConnected" | |
337 | #define kIOPMPSExternalChargeCapableKey "ExternalChargeCapable" | |
338 | #define kIOPMPSBatteryInstalledKey "BatteryInstalled" | |
339 | #define kIOPMPSIsChargingKey "IsCharging" | |
340 | #define kIOPMFullyChargedKey "FullyCharged" | |
341 | #define kIOPMPSAtWarnLevelKey "AtWarnLevel" | |
342 | #define kIOPMPSAtCriticalLevelKey "AtCriticalLevel" | |
343 | #define kIOPMPSCurrentCapacityKey "CurrentCapacity" | |
344 | #define kIOPMPSMaxCapacityKey "MaxCapacity" | |
345 | #define kIOPMPSDesignCapacityKey "DesignCapacity" | |
346 | #define kIOPMPSTimeRemainingKey "TimeRemaining" | |
347 | #define kIOPMPSAmperageKey "Amperage" | |
348 | #define kIOPMPSVoltageKey "Voltage" | |
349 | #define kIOPMPSCycleCountKey "CycleCount" | |
350 | #define kIOPMPSMaxErrKey "MaxErr" | |
351 | #define kIOPMPSAdapterInfoKey "AdapterInfo" | |
352 | #define kIOPMPSLocationKey "Location" | |
353 | #define kIOPMPSErrorConditionKey "ErrorCondition" | |
354 | #define kIOPMPSManufacturerKey "Manufacturer" | |
355 | #define kIOPMPSManufactureDateKey "ManufactureDate" | |
356 | #define kIOPMPSModelKey "Model" | |
357 | #define kIOPMPSSerialKey "Serial" | |
358 | #define kIOPMDeviceNameKey "DeviceName" | |
359 | #define kIOPMPSLegacyBatteryInfoKey "LegacyBatteryInfo" | |
360 | #define kIOPMPSBatteryHealthKey "BatteryHealth" | |
361 | #define kIOPMPSHealthConfidenceKey "HealthConfidence" | |
cf7d32b8 A |
362 | #define kIOPMPSCapacityEstimatedKey "CapacityEstimated" |
363 | #define kIOPMPSBatteryChargeStatusKey "ChargeStatus" | |
364 | ||
365 | // kIOPMBatteryChargeStatusKey may have one of the following values, or may have | |
366 | // no value. If kIOPMBatteryChargeStatusKey has a NULL value (or no value) associated with it | |
367 | // then charge is proceeding normally. If one of these battery charge status reasons is listed, | |
368 | // then the charge may have been interrupted. | |
369 | #define kIOPMBatteryChargeStatusTooHot "HighTemperature" | |
370 | #define kIOPMBatteryChargeStatusTooCold "LowTemperature" | |
371 | #define kIOPMBatteryChargeStatusGradient "BatteryTemperatureGradient" | |
0c530ab8 A |
372 | |
373 | // Definitions for battery location, in case of multiple batteries. | |
374 | // A location of 0 is unspecified | |
375 | // Location is undefined for single battery systems | |
376 | enum { | |
377 | kIOPMPSLocationLeft = 1001, | |
378 | kIOPMPSLocationRight = 1002 | |
5d5c5d0d A |
379 | }; |
380 | ||
0c530ab8 A |
381 | // Battery quality health types, specified by BatteryHealth and HealthConfidence |
382 | // properties in an IOPMPowerSource battery kext. | |
5d5c5d0d | 383 | enum { |
0c530ab8 A |
384 | kIOPMUndefinedValue = 0, |
385 | kIOPMPoorValue = 1, | |
386 | kIOPMFairValue = 2, | |
387 | kIOPMGoodValue = 3 | |
4452a7af A |
388 | }; |
389 | ||
0c530ab8 A |
390 | // Battery's time remaining estimate is invalid this long (seconds) after a wake |
391 | #define kIOPMPSInvalidWakeSecondsKey "BatteryInvalidWakeSeconds" | |
392 | ||
393 | // Battery must wait this long (seconds) after being completely charged before | |
394 | // the battery is settled. | |
395 | #define kIOPMPSPostChargeWaitSecondsKey "PostChargeWaitSeconds" | |
396 | ||
397 | // Battery must wait this long (seconds) after being completely discharged | |
398 | // before the battery is settled. | |
399 | #define kIOPMPSPostDishargeWaitSecondsKey "PostDischargeWaitSeconds" | |
400 | ||
401 | ||
4a3eedf9 A |
402 | /* CPU Power Management status keys |
403 | * Pass as arguments to IOPMrootDomain::systemPowerEventOccurred | |
404 | * Or as arguments to IOPMSystemPowerEventOccurred() | |
405 | * Or to decode the dictionary obtained from IOPMCopyCPUPowerStatus() | |
406 | * These keys reflect restrictions placed on the CPU by the system | |
407 | * to bring the CPU's power consumption within allowable thermal and | |
408 | * power constraints. | |
409 | */ | |
410 | ||
411 | ||
412 | /* kIOPMGraphicsPowerLimitsKey | |
413 | * The key representing the dictionary of graphics power limits. | |
414 | * The dictionary contains the other kIOPMCPUPower keys & their associated | |
415 | * values (e.g. Speed limit, Processor Count, and Schedule limits). | |
416 | */ | |
417 | #define kIOPMGraphicsPowerLimitsKey "Graphics_Power_Limits" | |
418 | ||
419 | /* kIOPMGraphicsPowerLimitPerformanceKey | |
420 | * The key representing the percent of overall performance made available | |
421 | * by the graphics chip as a percentage (integer 0 - 100). | |
422 | */ | |
423 | #define kIOPMGraphicsPowerLimitPerformanceKey "Graphics_Power_Performance" | |
424 | ||
425 | ||
426 | ||
427 | /* kIOPMCPUPowerLimitsKey | |
428 | * The key representing the dictionary of CPU Power Limits. | |
429 | * The dictionary contains the other kIOPMCPUPower keys & their associated | |
430 | * values (e.g. Speed limit, Processor Count, and Schedule limits). | |
431 | */ | |
432 | #define kIOPMCPUPowerLimitsKey "CPU_Power_Limits" | |
433 | ||
434 | /* kIOPMCPUPowerLimitProcessorSpeedKey defines the speed & voltage limits placed | |
435 | * on the CPU. | |
436 | * Represented as a percentage (0-100) of maximum CPU speed. | |
437 | */ | |
438 | #define kIOPMCPUPowerLimitProcessorSpeedKey "CPU_Speed_Limit" | |
439 | ||
440 | /* kIOPMCPUPowerLimitProcessorCountKey reflects how many, if any, CPUs have been | |
441 | * taken offline. Represented as an integer number of CPUs (0 - Max CPUs). | |
442 | */ | |
443 | #define kIOPMCPUPowerLimitProcessorCountKey "CPU_Available_CPUs" | |
444 | ||
445 | /* kIOPMCPUPowerLimitSchedulerTimeKey represents the percentage (0-100) of CPU time | |
446 | * available. 100% at normal operation. The OS may limit this time for a percentage | |
447 | * less than 100%. | |
448 | */ | |
449 | #define kIOPMCPUPowerLimitSchedulerTimeKey "CPU_Scheduler_Limit" | |
450 | ||
451 | ||
452 | /* Thermal Level Warning Key | |
453 | * Indicates the thermal constraints placed on the system. This value may | |
454 | * cause clients to action to consume fewer system resources. | |
455 | * The value associated with this warning is defined by the platform. | |
456 | */ | |
457 | #define kIOPMThermalLevelWarningKey "Thermal_Level_Warning" | |
458 | ||
459 | /* Thermal Warning Level values | |
460 | * kIOPMThermalWarningLevelNormal - under normal operating conditions | |
461 | * kIOPMThermalWarningLevelDanger - thermal pressure may cause system slowdown | |
462 | * kIOPMThermalWarningLevelCrisis - thermal conditions may cause imminent shutdown | |
463 | * | |
464 | * The platform may define additional thermal levels if necessary. | |
465 | */ | |
466 | enum { | |
467 | kIOPMThermalWarningLevelNormal = 0, | |
468 | kIOPMThermalWarningLevelDanger = 5, | |
469 | kIOPMThermalWarningLevelCrisis = 10 | |
470 | }; | |
471 | ||
0c530ab8 A |
472 | |
473 | // PM Settings Controller setting types | |
474 | // Settings types used primarily with: | |
475 | // IOPMrootDomain::registerPMSettingController | |
476 | // The values are identical to the similarly named keys for use in user space | |
477 | // PM settings work. Those keys are defined in IOPMLibPrivate.h. | |
478 | #define kIOPMSettingWakeOnRingKey "Wake On Modem Ring" | |
479 | #define kIOPMSettingRestartOnPowerLossKey "Automatic Restart On Power Loss" | |
480 | #define kIOPMSettingWakeOnACChangeKey "Wake On AC Change" | |
481 | #define kIOPMSettingSleepOnPowerButtonKey "Sleep On Power Button" | |
482 | #define kIOPMSettingWakeOnClamshellKey "Wake On Clamshell Open" | |
483 | #define kIOPMSettingReduceBrightnessKey "ReduceBrightness" | |
484 | #define kIOPMSettingDisplaySleepUsesDimKey "Display Sleep Uses Dim" | |
485 | #define kIOPMSettingTimeZoneOffsetKey "TimeZoneOffsetSeconds" | |
486 | #define kIOPMSettingMobileMotionModuleKey "MobileMotionModule" | |
487 | ||
488 | // Setting controlling drivers can register to receive scheduled wake data | |
489 | // Either in "CF seconds" type, or structured calendar data in a formatted | |
490 | // IOPMCalendarStruct defined below. | |
491 | #define kIOPMSettingAutoWakeSecondsKey "wake" | |
492 | #define kIOPMSettingAutoWakeCalendarKey "WakeByCalendarDate" | |
493 | #define kIOPMSettingAutoPowerSecondsKey "poweron" | |
494 | #define kIOPMSettingAutoPowerCalendarKey "PowerByCalendarDate" | |
495 | ||
496 | // Debug seconds auto wake | |
497 | // Used by sleep cycling debug tools | |
498 | #define kIOPMSettingDebugWakeRelativeKey "WakeRelativeToSleep" | |
499 | #define kIOPMSettingDebugPowerRelativeKey "PowerRelativeToShutdown" | |
500 | ||
501 | struct IOPMCalendarStruct { | |
502 | UInt32 year; | |
503 | UInt8 month; | |
504 | UInt8 day; | |
505 | UInt8 hour; | |
506 | UInt8 minute; | |
507 | UInt8 second; | |
508 | }; | |
509 | typedef struct IOPMCalendarStruct IOPMCalendarStruct; | |
4452a7af | 510 | |
0c530ab8 | 511 | // SetAggressiveness types |
1c79356b A |
512 | enum { |
513 | kPMGeneralAggressiveness = 0, | |
514 | kPMMinutesToDim, | |
515 | kPMMinutesToSpinDown, | |
0b4e3aa0 A |
516 | kPMMinutesToSleep, |
517 | kPMEthernetWakeOnLANSettings, | |
9bccf70c | 518 | kPMSetProcessorSpeed, |
91447636 A |
519 | kPMPowerSource, |
520 | kPMMotionSensor, | |
521 | kPMLastAggressivenessType | |
1c79356b | 522 | }; |
91447636 | 523 | #define kMaxType (kPMLastAggressivenessType-1) |
1c79356b | 524 | |
9bccf70c A |
525 | // SetAggressiveness values for the kPMPowerSource aggressiveness type |
526 | enum { | |
527 | kIOPMInternalPower = 1, | |
528 | kIOPMExternalPower | |
529 | }; | |
530 | ||
0c530ab8 | 531 | #define kIOREMSleepEnabledKey "REMSleepEnabled" |
1c79356b | 532 | |
55e303ae | 533 | // Strings for deciphering the dictionary returned from IOPMCopyBatteryInfo |
0c530ab8 A |
534 | #define kIOBatteryInfoKey "IOBatteryInfo" |
535 | #define kIOBatteryCurrentChargeKey "Current" | |
536 | #define kIOBatteryCapacityKey "Capacity" | |
537 | #define kIOBatteryFlagsKey "Flags" | |
538 | #define kIOBatteryVoltageKey "Voltage" | |
539 | #define kIOBatteryAmperageKey "Amperage" | |
540 | #define kIOBatteryCycleCountKey "Cycle Count" | |
d52fe63f | 541 | |
1c79356b | 542 | enum { |
0c530ab8 A |
543 | kIOBatteryInstalled = (1 << 2), |
544 | kIOBatteryCharge = (1 << 1), | |
545 | kIOBatteryChargerConnect = (1 << 0) | |
1c79356b A |
546 | }; |
547 | ||
e5568f75 | 548 | |
55e303ae A |
549 | // Private power management message indicating battery data has changed |
550 | // Indicates new data resides in the IORegistry | |
551 | #define kIOPMMessageBatteryStatusHasChanged iokit_family_msg(sub_iokit_pmu, 0x100) | |
552 | ||
553 | // Apple private Legacy messages for re-routing AutoWake and AutoPower messages to the PMU | |
554 | // through newer user space IOPMSchedulePowerEvent API | |
555 | #define kIOPMUMessageLegacyAutoWake iokit_family_msg(sub_iokit_pmu, 0x200) | |
0c530ab8 | 556 | #define kIOPMUMessageLegacyAutoPower iokit_family_msg(sub_iokit_pmu, 0x210) |
d52fe63f A |
557 | |
558 | // For use with IOPMPowerSource bFlags | |
559 | #define IOPM_POWER_SOURCE_REV 2 | |
560 | enum { | |
561 | kIOPMACInstalled = kIOBatteryChargerConnect, | |
562 | kIOPMBatteryCharging = kIOBatteryCharge, | |
563 | kIOPMBatteryInstalled = kIOBatteryInstalled, | |
564 | kIOPMUPSInstalled = (1<<3), | |
565 | kIOPMBatteryAtWarn = (1<<4), | |
566 | kIOPMBatteryDepleted = (1<<5), | |
567 | kIOPMACnoChargeCapability = (1<<6), // AC adapter cannot charge battery | |
568 | kIOPMRawLowBattery = (1<<7), // used only by Platform Expert | |
569 | kIOPMForceLowSpeed = (1<<8), // set by Platfm Expert, chk'd by Pwr Plugin | |
570 | kIOPMClosedClamshell = (1<<9), // set by PMU - reflects state of the clamshell | |
571 | kIOPMClamshellStateOnWake = (1<<10) // used only by Platform Expert | |
572 | }; | |
573 | ||
574 | ||
55e303ae A |
575 | // ********************************************** |
576 | // Internal power management data structures | |
577 | // ********************************************** | |
1c79356b A |
578 | |
579 | #if KERNEL && __cplusplus | |
580 | class IOService; | |
581 | ||
582 | enum { | |
583 | kIOPowerEmergencyLevel = 1000 | |
584 | }; | |
585 | ||
586 | enum { | |
587 | kIOPMSubclassPolicy, | |
588 | kIOPMSuperclassPolicy1 | |
589 | }; | |
590 | ||
591 | struct stateChangeNote{ | |
0c530ab8 A |
592 | IOPMPowerFlags stateFlags; |
593 | unsigned long stateNum; | |
594 | void * powerRef; | |
1c79356b A |
595 | }; |
596 | typedef struct stateChangeNote stateChangeNote; | |
597 | ||
0b4e3aa0 | 598 | struct IOPowerStateChangeNotification { |
0c530ab8 A |
599 | void * powerRef; |
600 | unsigned long returnValue; | |
601 | unsigned long stateNumber; | |
602 | IOPMPowerFlags stateFlags; | |
1c79356b | 603 | }; |
0b4e3aa0 A |
604 | typedef struct IOPowerStateChangeNotification IOPowerStateChangeNotification; |
605 | typedef IOPowerStateChangeNotification sleepWakeNote; | |
1c79356b A |
606 | |
607 | extern void IOPMRegisterDevice(const char *, IOService *); | |
608 | #endif /* KERNEL && __cplusplus */ | |
609 | ||
610 | #endif /* ! _IOKIT_IOPM_H */ | |
611 |