1 | /* |
2 | * Copyright (c) 1998-2005 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 | #ifndef _IOKIT_IOPM_H |
29 | #define _IOKIT_IOPM_H |
30 | |
31 | #include <IOKit/IOTypes.h> |
32 | #include <IOKit/IOMessage.h> |
33 | #include <IOKit/IOReturn.h> |
34 | |
35 | /*! @header IOPM.h |
36 | * @abstract Defines power management constants and keys used by both in-kernel and user space power management. |
37 | * @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. |
38 | * |
39 | * Most of the constants defined in IOPM.h are deprecated or for Apple internal use only, and are not elaborated on in headerdoc. |
40 | */ |
41 | |
42 | enum { |
43 | kIOPMMaxPowerStates = 10, |
44 | IOPMMaxPowerStates = kIOPMMaxPowerStates |
45 | }; |
46 | |
47 | /*! @enum IOPMPowerFlags |
48 | * @abstract Bits are used in defining capabilityFlags, inputPowerRequirements, and outputPowerCharacter in the IOPMPowerState structure. |
49 | * @discussion These bits may be bitwise-OR'd together in the IOPMPowerState capabilityFlags field, the outputPowerCharacter field, and/or the inputPowerRequirement field. |
50 | * |
51 | * The comments clearly mark whether each flag should be used in the capabilityFlags field, outputPowerCharacter field, and inputPowerRequirement field, or all three. |
52 | * |
53 | * 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. |
54 | * |
55 | * 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. |
56 | * |
57 | * @constant kIOPMPowerOn Indicates the device is on, requires power, and provides power. Useful as a: Capability, InputPowerRequirement, OutputPowerCharacter |
58 | * |
59 | * @constant kIOPMDeviceUsable Indicates the device is usable in this state. Useful only as a Capability |
60 | * |
61 | * @constant kIOPMLowPower |
62 | * Indicates device is in a low power state. May be bitwis-OR'd together |
63 | * with kIOPMDeviceUsable flag, to indicate the device is still usable. |
64 | * |
65 | * A device with a capability of kIOPMLowPower may: |
66 | * Require either 0 or kIOPMPowerOn from its power parent |
67 | * Offer either kIOPMLowPower, kIOPMPowerOn, or 0 (no power at all) |
68 | * to its power plane children. |
69 | * |
70 | * Useful only as a Capability, although USB drivers should consult USB family documentation for other valid circumstances to use the kIOPMLowPower bit. |
71 | * |
72 | * @constant kIOPMPreventIdleSleep |
73 | * In the capability field of a power state, disallows idle system sleep while the device is in that state. |
74 | * |
75 | * 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. |
76 | * |
77 | * Useful only as a Capability. |
78 | * |
79 | * @constant kIOPMSleepCapability |
80 | * 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. |
81 | * |
82 | * @constant kIOPMRestartCapability |
83 | * 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. |
84 | * |
85 | * @constant kIOPMSleep |
86 | * 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. |
87 | * |
88 | * @constant kIOPMRestart |
89 | * 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. |
90 | * |
91 | * @constant kIOPMInitialDeviceState |
92 | * Indicates the initial power state for the device. If <code>initialPowerStateForDomainState()</code> returns a power state with this flag set in the capability field, then the initial power change is performed without calling the driver's <code>setPowerState()</code>. |
93 | * |
94 | * @constant kIOPMRootDomainState |
95 | * An indication that the power flags represent the state of the root power |
96 | * domain. This bit must not be set in the IOPMPowerState structure. |
97 | * Power Management may pass this bit to initialPowerStateForDomainState() |
98 | * to map from a global system state to the desired device state. |
99 | */ |
100 | typedef unsigned long IOPMPowerFlags; |
101 | enum { |
102 | kIOPMPowerOn = 0x00000002, |
103 | kIOPMDeviceUsable = 0x00008000, |
104 | kIOPMLowPower = 0x00010000, |
105 | #if PRIVATE |
106 | kIOPMAOTPower = 0x00020000, |
107 | kIOPMAOTCapability = kIOPMAOTPower, |
108 | #endif /* PRIVATE */ |
109 | kIOPMPreventIdleSleep = 0x00000040, |
110 | kIOPMSleepCapability = 0x00000004, |
111 | kIOPMRestartCapability = 0x00000080, |
112 | kIOPMSleep = 0x00000001, |
113 | kIOPMRestart = 0x00000080, |
114 | kIOPMInitialDeviceState = 0x00000100, |
115 | kIOPMRootDomainState = 0x00000200 |
116 | }; |
117 | |
118 | /* |
119 | * Private IOPMPowerFlags |
120 | * |
121 | * For Apple use only |
122 | * Not for use with non-Apple drivers |
123 | * Their behavior is undefined |
124 | */ |
125 | enum { |
126 | kIOPMClockNormal = 0x0004, |
127 | kIOPMClockRunning = 0x0008, |
128 | kIOPMPreventSystemSleep = 0x0010, |
129 | kIOPMDoze = 0x0400, |
130 | kIOPMChildClamp = 0x0080, |
131 | kIOPMChildClamp2 = 0x0200, |
132 | kIOPMNotPowerManaged = 0x0800 |
133 | }; |
134 | |
135 | /* |
136 | * Deprecated IOPMPowerFlags |
137 | * Their behavior is undefined when used in IOPMPowerState |
138 | * Capability, InputPowerRequirement, or OutputPowerCharacter fields. |
139 | */ |
140 | enum { |
141 | kIOPMMaxPerformance = 0x4000, |
142 | kIOPMPassThrough = 0x0100, |
143 | kIOPMAuxPowerOn = 0x0020, |
144 | kIOPMNotAttainable = 0x0001, |
145 | kIOPMContextRetained = 0x2000, |
146 | kIOPMConfigRetained = 0x1000, |
147 | kIOPMStaticPowerValid = 0x0800, |
148 | kIOPMSoftSleep = 0x0400, |
149 | kIOPMCapabilitiesMask = kIOPMPowerOn | kIOPMDeviceUsable | |
150 | kIOPMMaxPerformance | kIOPMContextRetained | |
151 | kIOPMConfigRetained | kIOPMSleepCapability | |
152 | kIOPMRestartCapability |
153 | }; |
154 | |
155 | /* |
156 | * Support for old names of IOPMPowerFlag constants |
157 | */ |
158 | enum { |
159 | IOPMNotAttainable = kIOPMNotAttainable, |
160 | IOPMPowerOn = kIOPMPowerOn, |
161 | IOPMClockNormal = kIOPMClockNormal, |
162 | IOPMClockRunning = kIOPMClockRunning, |
163 | IOPMAuxPowerOn = kIOPMAuxPowerOn, |
164 | IOPMDeviceUsable = kIOPMDeviceUsable, |
165 | IOPMMaxPerformance = kIOPMMaxPerformance, |
166 | IOPMContextRetained = kIOPMContextRetained, |
167 | IOPMConfigRetained = kIOPMConfigRetained, |
168 | IOPMNotPowerManaged = kIOPMNotPowerManaged, |
169 | IOPMSoftSleep = kIOPMSoftSleep |
170 | }; |
171 | |
172 | |
173 | enum { |
174 | kIOPMNextHigherState = 1, |
175 | kIOPMHighestState = 2, |
176 | kIOPMNextLowerState = 3, |
177 | kIOPMLowestState = 4 |
178 | }; |
179 | |
180 | enum { |
181 | IOPMNextHigherState = kIOPMNextHigherState, |
182 | IOPMHighestState = kIOPMHighestState, |
183 | IOPMNextLowerState = kIOPMNextLowerState, |
184 | IOPMLowestState = kIOPMLowestState |
185 | }; |
186 | |
187 | // Internal commands used by power managment command queue |
188 | enum { |
189 | kIOPMBroadcastAggressiveness = 1, |
190 | kIOPMUnidleDevice |
191 | }; |
192 | |
193 | // Power consumption unknown value |
194 | enum { |
195 | kIOPMUnknown = 0xFFFF |
196 | }; |
197 | |
198 | /******************************************************************************* |
199 | * |
200 | * Root Domain property keys of interest |
201 | * |
202 | ******************************************************************************/ |
203 | |
204 | /* AppleClamshellState |
205 | * reflects the state of the clamshell (lid) on a portable. |
206 | * It has a boolean value. |
207 | * true == clamshell is closed |
208 | * false == clamshell is open |
209 | * not present == no clamshell on this hardware |
210 | */ |
211 | #define kAppleClamshellStateKey "AppleClamshellState" |
212 | |
213 | /* AppleClamshellCausesSleep |
214 | * reflects the clamshell close behavior on a portable. |
215 | * It has a boolean value. |
216 | * true == system will sleep when clamshell is closed |
217 | * false == system will not sleep on clamshell close |
218 | * (typically external display mode) |
219 | * not present == no clamshell on this hardware |
220 | */ |
221 | #define kAppleClamshellCausesSleepKey "AppleClamshellCausesSleep" |
222 | |
223 | /* kIOPMSleepWakeUUIDKey |
224 | * Key refers to a CFStringRef that will uniquely identify |
225 | * a sleep/wake cycle for logging & tracking. |
226 | * The key becomes valid at the beginning of a sleep cycle - before we |
227 | * initiate any sleep/wake notifications. |
228 | * The key becomes invalid at the completion of a system wakeup. The |
229 | * property will not be present in the IOPMrootDomain's registry entry |
230 | * when it is invalid. |
231 | * |
232 | * See IOPMrootDomain notification kIOPMMessageSleepWakeUUIDChange |
233 | */ |
234 | #define kIOPMSleepWakeUUIDKey "SleepWakeUUID" |
235 | |
236 | /* kIOPMBootSessionUUIDKey |
237 | * Key refers to a CFStringRef that will uniquely identify |
238 | * a boot cycle. |
239 | * The key becomes valid at boot time and remains valid |
240 | * till shutdown. The property value will remain same across |
241 | * sleep/wake/hibernate cycle. |
242 | */ |
243 | #define kIOPMBootSessionUUIDKey "BootSessionUUID" |
244 | |
245 | /* kIOPMDeepSleepEnabledKey |
246 | * Indicates the Deep Sleep enable state. |
247 | * It has a boolean value. |
248 | * true == Deep Sleep is enabled |
249 | * false == Deep Sleep is disabled |
250 | * not present == Deep Sleep is not supported on this hardware |
251 | */ |
252 | #define kIOPMDeepSleepEnabledKey "Standby Enabled" |
253 | |
254 | /* kIOPMDeepSleepDelayKey |
255 | * Key refers to a CFNumberRef that represents the delay in seconds before |
256 | * entering Deep Sleep state when on battery power and when remaining |
257 | * battery capacity is below a particular threshold (e.g., 50%.) The |
258 | * property is not present if Deep Sleep is unsupported. |
259 | */ |
260 | #define kIOPMDeepSleepDelayKey "Standby Delay" |
261 | |
262 | /* kIOPMDeepSleepDelayHighKey |
263 | * Key refers to a CFNumberRef that represents the delay in seconds before |
264 | * entering Deep Sleep state. This is used instead of the value specified by |
265 | * kIOPMDeepSleepDelayKey if the remaining battery capacity is above a |
266 | * particular threshold (e.g. 50%) or on AC power. The property is not |
267 | * present if Deep Sleep is unsupported. |
268 | */ |
269 | #define kIOPMDeepSleepDelayHighKey "High Standby Delay" |
270 | |
271 | /* kIOPMLowBatteryThresholdKey |
272 | * Key refers to a CFNumberRef that represents the threshold used to choose |
273 | * between the normal deep sleep delay and the high deep sleep delay (as a |
274 | * percentage of total battery capacity remaining.) The property is not |
275 | * present if Deep Sleep is unsupported. |
276 | */ |
277 | #define kIOPMStandbyBatteryThresholdKey "Standby Battery Threshold" |
278 | |
279 | /* kIOPMDestroyFVKeyOnStandbyKey |
280 | * Specifies if FileVault key can be stored when going to standby mode |
281 | * It has a boolean value, |
282 | * true == Destroy FV key when going to standby mode |
283 | * false == Retain FV key when going to standby mode |
284 | * not present == Retain FV key when going to standby mode |
285 | */ |
286 | #define kIOPMDestroyFVKeyOnStandbyKey "DestroyFVKeyOnStandby" |
287 | |
288 | /******************************************************************************* |
289 | * |
290 | * Properties that can control power management behavior |
291 | * |
292 | ******************************************************************************/ |
293 | |
294 | /* kIOPMResetPowerStateOnWakeKey |
295 | * If an IOService publishes this key with the value of kOSBooleanTrue, |
296 | * then PM will disregard the influence from changePowerStateToPriv() or |
297 | * any activity tickles that occurred before system sleep when resolving |
298 | * the initial device power state on wake. Influences from power children |
299 | * and changePowerStateTo() are not eliminated. At the earliest opportunity |
300 | * upon system wake, PM will query the driver for a new power state to be |
301 | * installed as the initial changePowerStateToPriv() influence, by calling |
302 | * initialPowerStateForDomainState() with both kIOPMRootDomainState and |
303 | * kIOPMPowerOn flags set. The default implementation will always return |
304 | * the lowest power state. Drivers can override this default behavior to |
305 | * immediately raise the power state when there are work blocked on the |
306 | * power change, and cannot afford to wait until the next activity tickle. |
307 | * This property should be statically added to a driver's plist or set at |
308 | * runtime before calling PMinit(). |
309 | */ |
310 | #define kIOPMResetPowerStateOnWakeKey "IOPMResetPowerStateOnWake" |
311 | |
312 | /******************************************************************************* |
313 | * |
314 | * Driver PM Assertions |
315 | * |
316 | ******************************************************************************/ |
317 | |
318 | /* Driver Assertion bitfield description |
319 | * Driver PM assertions are defined by these bits. |
320 | */ |
321 | enum { |
322 | /*! kIOPMDriverAssertionCPUBit |
323 | * When set, PM kernel will prefer to leave the CPU and core hardware |
324 | * running in "Dark Wake" state, instead of sleeping. |
325 | */ |
326 | kIOPMDriverAssertionCPUBit = 0x01, |
327 | |
328 | /*! kIOPMDriverAssertionPreventSystemIdleSleepBit |
329 | * When set, the system should not idle sleep. This does not prevent |
330 | * demand sleep. |
331 | */ |
332 | kIOPMDriverAssertionPreventSystemIdleSleepBit = 0x02, |
333 | |
334 | /*! kIOPMDriverAssertionUSBExternalDeviceBit |
335 | * When set, driver is informing PM that an external USB device is attached. |
336 | */ |
337 | kIOPMDriverAssertionUSBExternalDeviceBit = 0x04, |
338 | |
339 | /*! kIOPMDriverAssertionBluetoothHIDDevicePairedBit |
340 | * When set, driver is informing PM that a Bluetooth HID device is paired. |
341 | */ |
342 | kIOPMDriverAssertionBluetoothHIDDevicePairedBit = 0x08, |
343 | |
344 | /*! kIOPMDriverAssertionExternalMediaMountedBit |
345 | * When set, driver is informing PM that an external media is mounted. |
346 | */ |
347 | kIOPMDriverAssertionExternalMediaMountedBit = 0x10, |
348 | |
349 | /*! kIOPMDriverAssertionReservedBit5 |
350 | * Reserved for Thunderbolt. |
351 | */ |
352 | kIOPMDriverAssertionReservedBit5 = 0x20, |
353 | |
354 | /*! kIOPMDriverAssertionPreventDisplaySleepBit |
355 | * When set, the display should remain powered on while the system's awake. |
356 | */ |
357 | kIOPMDriverAssertionPreventDisplaySleepBit = 0x40, |
358 | |
359 | /*! kIOPMDriverAssertionReservedBit7 |
360 | * Reserved for storage family. |
361 | */ |
362 | kIOPMDriverAssertionReservedBit7 = 0x80, |
363 | |
364 | /*! kIOPMDriverAssertionMagicPacketWakeEnabledBit |
365 | * When set, driver is informing PM that magic packet wake is enabled. |
366 | */ |
367 | kIOPMDriverAssertionMagicPacketWakeEnabledBit = 0x100, |
368 | |
369 | /*! kIOPMDriverAssertionNetworkKeepAliveActiveBit |
370 | * When set, driver is informing PM that it is holding the network |
371 | * interface up to do TCPKeepAlive |
372 | */ |
373 | kIOPMDriverAssertionNetworkKeepAliveActiveBit = 0x200 |
374 | }; |
375 | |
376 | /* kIOPMAssertionsDriverKey |
377 | * This kIOPMrootDomain key refers to a CFNumberRef property, containing |
378 | * a bitfield describing the aggregate PM assertion levels. |
379 | * Example: A value of 0 indicates that no driver has asserted anything. |
380 | * Or, a value of <link>kIOPMDriverAssertionCPUBit</link> |
381 | * indicates that a driver (or drivers) have asserted a need for CPU and video. |
382 | */ |
383 | #define kIOPMAssertionsDriverKey "DriverPMAssertions" |
384 | |
385 | /* kIOPMAssertionsDriverKey |
386 | * This kIOPMrootDomain key refers to a CFNumberRef property, containing |
387 | * a bitfield describing the aggregate PM assertion levels. |
388 | * Example: A value of 0 indicates that no driver has asserted anything. |
389 | * Or, a value of <link>kIOPMDriverAssertionCPUBit</link> |
390 | * indicates that a driver (or drivers) have asserted a need for CPU and video. |
391 | */ |
392 | #define kIOPMAssertionsDriverDetailedKey "DriverPMAssertionsDetailed" |
393 | |
394 | /******************************************************************************* |
395 | * |
396 | * Kernel Driver assertion detailed dictionary keys |
397 | * |
398 | * Keys decode the Array & dictionary data structure under IOPMrootDomain property |
399 | * kIOPMAssertionsDriverKey. |
400 | * |
401 | */ |
402 | #define kIOPMDriverAssertionIDKey "ID" |
403 | #define kIOPMDriverAssertionCreatedTimeKey "CreatedTime" |
404 | #define kIOPMDriverAssertionModifiedTimeKey "ModifiedTime" |
405 | #define kIOPMDriverAssertionOwnerStringKey "Owner" |
406 | #define kIOPMDriverAssertionOwnerServiceKey "ServicePtr" |
407 | #define kIOPMDriverAssertionRegistryEntryIDKey "RegistryEntryID" |
408 | #define kIOPMDriverAssertionLevelKey "Level" |
409 | #define kIOPMDriverAssertionAssertedKey "Assertions" |
410 | |
411 | /******************************************************************************* |
412 | * |
413 | * Root Domain general interest messages |
414 | * |
415 | * Available by registering for interest type 'gIOGeneralInterest' |
416 | * on IOPMrootDomain. |
417 | * |
418 | ******************************************************************************/ |
419 | |
420 | /* kIOPMMessageClamshellStateChange |
421 | * Delivered as a general interest notification on the IOPMrootDomain |
422 | * IOPMrootDomain sends this message when state of either AppleClamshellState |
423 | * or AppleClamshellCausesSleep changes. If this clamshell change results in |
424 | * a sleep, the sleep will initiate soon AFTER delivery of this message. |
425 | * The state of both variables is encoded in a bitfield argument sent with |
426 | * the message. Check bits 0 and 1 using kClamshellStateBit & kClamshellSleepBit |
427 | */ |
428 | enum { |
429 | kClamshellStateBit = (1 << 0), |
430 | kClamshellSleepBit = (1 << 1) |
431 | }; |
432 | |
433 | #define kIOPMMessageClamshellStateChange \ |
434 | iokit_family_msg(sub_iokit_powermanagement, 0x100) |
435 | |
436 | /* kIOPMMessageFeatureChange |
437 | * Delivered when the set of supported features ("Supported Features" dictionary |
438 | * under IOPMrootDomain registry) changes in some way. Typically addition or |
439 | * removal of a supported feature. |
440 | * RootDomain passes no argument with this message. |
441 | */ |
442 | #define kIOPMMessageFeatureChange \ |
443 | iokit_family_msg(sub_iokit_powermanagement, 0x110) |
444 | |
445 | /* kIOPMMessageInflowDisableCancelled |
446 | * The battery has drained completely to its "Fully Discharged" state. |
447 | * If a user process has disabled battery inflow for battery |
448 | * calibration, we forcibly re-enable Inflow at this point. |
449 | * If inflow HAS been forcibly re-enabled, bit 0 |
450 | * (kInflowForciblyEnabledBit) will be set. |
451 | */ |
452 | enum { |
453 | kInflowForciblyEnabledBit = (1 << 0) |
454 | }; |
455 | |
456 | /* kIOPMMessageInternalBatteryFullyDischarged |
457 | * The battery has drained completely to its "Fully Discharged" state. |
458 | */ |
459 | #define kIOPMMessageInternalBatteryFullyDischarged \ |
460 | iokit_family_msg(sub_iokit_powermanagement, 0x120) |
461 | |
462 | /* kIOPMMessageSystemPowerEventOccurred |
463 | * Some major system thermal property has changed, and interested clients may |
464 | * modify their behavior. |
465 | */ |
466 | #define kIOPMMessageSystemPowerEventOccurred \ |
467 | iokit_family_msg(sub_iokit_powermanagement, 0x130) |
468 | |
469 | /* kIOPMMessageSleepWakeUUIDChange |
470 | * Either a new SleepWakeUUID has been specified at the beginning of a sleep, |
471 | * or we're removing the existing property upon completion of a wakeup. |
472 | */ |
473 | #define kIOPMMessageSleepWakeUUIDChange \ |
474 | iokit_family_msg(sub_iokit_powermanagement, 0x140) |
475 | |
476 | /* kIOPMMessageSleepWakeUUIDSet |
477 | * Argument accompanying the kIOPMMessageSleepWakeUUIDChange notification when |
478 | * a new UUID has been specified. |
479 | */ |
480 | #define kIOPMMessageSleepWakeUUIDSet ((void *)1) |
481 | |
482 | /* kIOPMMessageSleepWakeUUIDCleared |
483 | * Argument accompanying the kIOPMMessageSleepWakeUUIDChange notification when |
484 | * the current UUID has been removed. |
485 | */ |
486 | #define kIOPMMessageSleepWakeUUIDCleared ((void *)NULL) |
487 | |
488 | /*! kIOPMMessageDriverAssertionsChanged |
489 | * Sent when kernel PM driver assertions have changed. |
490 | */ |
491 | #define kIOPMMessageDriverAssertionsChanged \ |
492 | iokit_family_msg(sub_iokit_powermanagement, 0x150) |
493 | |
494 | /*! kIOPMMessageDarkWakeThermalEmergency |
495 | * Sent when machine becomes unsustainably warm in DarkWake. |
496 | * Kernel PM might choose to put the machine back to sleep right after. |
497 | */ |
498 | #define kIOPMMessageDarkWakeThermalEmergency \ |
499 | iokit_family_msg(sub_iokit_powermanagement, 0x160) |
500 | |
501 | /******************************************************************************* |
502 | * |
503 | * Power commands issued to root domain |
504 | * Use with IOPMrootDomain::receivePowerNotification() |
505 | * |
506 | * These commands are issued from system drivers only: |
507 | * ApplePMU, AppleSMU, IOGraphics, AppleACPIFamily |
508 | * |
509 | * TODO: deprecate kIOPMAllowSleep and kIOPMPreventSleep |
510 | ******************************************************************************/ |
511 | enum { |
512 | kIOPMSleepNow = (1 << 0),// put machine to sleep now |
513 | kIOPMAllowSleep = (1 << 1),// allow idle sleep |
514 | kIOPMPreventSleep = (1 << 2),// do not allow idle sleep |
515 | kIOPMPowerButton = (1 << 3),// power button was pressed |
516 | kIOPMClamshellClosed = (1 << 4),// clamshell was closed |
517 | kIOPMPowerEmergency = (1 << 5),// battery dangerously low |
518 | kIOPMDisableClamshell = (1 << 6),// do not sleep on clamshell closure |
519 | kIOPMEnableClamshell = (1 << 7),// sleep on clamshell closure |
520 | kIOPMProcessorSpeedChange = (1 << 8),// change the processor speed |
521 | kIOPMOverTemp = (1 << 9),// system dangerously hot |
522 | kIOPMClamshellOpened = (1 << 10),// clamshell was opened |
523 | kIOPMDWOverTemp = (1 << 11),// DarkWake thermal limits exceeded. |
524 | kIOPMPowerButtonUp = (1 << 12),// Power button up |
525 | kIOPMProModeEngaged = (1 << 13),// Fans entered 'ProMode' |
526 | kIOPMProModeDisengaged = (1 << 14) // Fans exited 'ProMode' |
527 | }; |
528 | |
529 | |
530 | /******************************************************************************* |
531 | * |
532 | * Power Management Return Codes |
533 | * |
534 | ******************************************************************************/ |
535 | enum { |
536 | kIOPMNoErr = 0, |
537 | |
538 | // Returned by driver's setPowerState(), powerStateWillChangeTo(), |
539 | // powerStateDidChangeTo(), or acknowledgeSetPowerState() to |
540 | // implicitly acknowledge power change upon function return. |
541 | kIOPMAckImplied = 0, |
542 | |
543 | // Deprecated |
544 | kIOPMWillAckLater = 1, |
545 | |
546 | // Returned by requestPowerDomainState() to indicate |
547 | // unrecognized specification parameter. |
548 | kIOPMBadSpecification = 4, |
549 | |
550 | // Returned by requestPowerDomainState() to indicate |
551 | // no power state matches search specification. |
552 | kIOPMNoSuchState = 5, |
553 | |
554 | // Deprecated |
555 | kIOPMCannotRaisePower = 6, |
556 | |
557 | // Deprecated |
558 | kIOPMParameterError = 7, |
559 | |
560 | // Returned when power management state is accessed |
561 | // before driver has called PMinit(). |
562 | kIOPMNotYetInitialized = 8, |
563 | |
564 | // And the old constants; deprecated |
565 | IOPMNoErr = kIOPMNoErr, |
566 | IOPMAckImplied = kIOPMAckImplied, |
567 | IOPMWillAckLater = kIOPMWillAckLater, |
568 | IOPMBadSpecification = kIOPMBadSpecification, |
569 | IOPMNoSuchState = kIOPMNoSuchState, |
570 | IOPMCannotRaisePower = kIOPMCannotRaisePower, |
571 | IOPMParameterError = kIOPMParameterError, |
572 | IOPMNotYetInitialized = kIOPMNotYetInitialized |
573 | }; |
574 | |
575 | |
576 | // IOPMPowerSource class descriptive strings |
577 | // Power Source state is published as properties to the IORegistry under these |
578 | // keys. |
579 | #define kIOPMPSExternalConnectedKey "ExternalConnected" |
580 | #define kIOPMPSExternalChargeCapableKey "ExternalChargeCapable" |
581 | #define kIOPMPSBatteryInstalledKey "BatteryInstalled" |
582 | #define kIOPMPSIsChargingKey "IsCharging" |
583 | #define kIOPMFullyChargedKey "FullyCharged" |
584 | #define kIOPMPSAtWarnLevelKey "AtWarnLevel" |
585 | #define kIOPMPSAtCriticalLevelKey "AtCriticalLevel" |
586 | #define kIOPMPSCurrentCapacityKey "CurrentCapacity" |
587 | #define kIOPMPSMaxCapacityKey "MaxCapacity" |
588 | #define kIOPMPSDesignCapacityKey "DesignCapacity" |
589 | #define kIOPMPSTimeRemainingKey "TimeRemaining" |
590 | #define kIOPMPSAmperageKey "Amperage" |
591 | #define kIOPMPSVoltageKey "Voltage" |
592 | #define kIOPMPSCycleCountKey "CycleCount" |
593 | #define kIOPMPSMaxErrKey "MaxErr" |
594 | #define kIOPMPSAdapterInfoKey "AdapterInfo" |
595 | #define kIOPMPSLocationKey "Location" |
596 | #define kIOPMPSErrorConditionKey "ErrorCondition" |
597 | #define kIOPMPSManufacturerKey "Manufacturer" |
598 | #define kIOPMPSManufactureDateKey "ManufactureDate" |
599 | #define kIOPMPSModelKey "Model" |
600 | #define kIOPMPSSerialKey "Serial" |
601 | #define kIOPMDeviceNameKey "DeviceName" |
602 | #define kIOPMPSLegacyBatteryInfoKey "LegacyBatteryInfo" |
603 | #define kIOPMPSBatteryHealthKey "BatteryHealth" |
604 | #define kIOPMPSHealthConfidenceKey "HealthConfidence" |
605 | #define kIOPMPSCapacityEstimatedKey "CapacityEstimated" |
606 | #define kIOPMPSBatteryChargeStatusKey "ChargeStatus" |
607 | #define kIOPMPSBatteryTemperatureKey "Temperature" |
608 | #define kIOPMPSAdapterDetailsKey "AdapterDetails" |
609 | #define kIOPMPSChargerConfigurationKey "ChargerConfiguration" |
610 | |
611 | // kIOPMPSBatteryChargeStatusKey may have one of the following values, or may have |
612 | // no value. If kIOPMBatteryChargeStatusKey has a NULL value (or no value) associated with it |
613 | // then charge is proceeding normally. If one of these battery charge status reasons is listed, |
614 | // then the charge may have been interrupted. |
615 | #define kIOPMBatteryChargeStatusTooHot "HighTemperature" |
616 | #define kIOPMBatteryChargeStatusTooCold "LowTemperature" |
617 | #define kIOPMBatteryChargeStatusTooHotOrCold "HighOrLowTemperature" |
618 | #define kIOPMBatteryChargeStatusGradient "BatteryTemperatureGradient" |
619 | |
620 | // Definitions for battery location, in case of multiple batteries. |
621 | // A location of 0 is unspecified |
622 | // Location is undefined for single battery systems |
623 | enum { |
624 | kIOPMPSLocationLeft = 1001, |
625 | kIOPMPSLocationRight = 1002 |
626 | }; |
627 | |
628 | // Battery quality health types, specified by BatteryHealth and HealthConfidence |
629 | // properties in an IOPMPowerSource battery kext. |
630 | enum { |
631 | kIOPMUndefinedValue = 0, |
632 | kIOPMPoorValue = 1, |
633 | kIOPMFairValue = 2, |
634 | kIOPMGoodValue = 3 |
635 | }; |
636 | |
637 | // Keys for kIOPMPSAdapterDetailsKey dictionary |
638 | #define kIOPMPSAdapterDetailsIDKey "AdapterID" |
639 | #define kIOPMPSAdapterDetailsWattsKey "Watts" |
640 | #define kIOPMPSAdapterDetailsRevisionKey "AdapterRevision" |
641 | #define kIOPMPSAdapterDetailsSerialNumberKey "SerialNumber" |
642 | #define kIOPMPSAdapterDetailsFamilyKey "FamilyCode" |
643 | #define kIOPMPSAdapterDetailsAmperageKey "Current" |
644 | #define kIOPMPSAdapterDetailsDescriptionKey "Description" |
645 | #define kIOPMPSAdapterDetailsPMUConfigurationKey "PMUConfiguration" |
646 | #define kIOPMPSAdapterDetailsVoltage "AdapterVoltage" |
647 | #define kIOPMPSAdapterDetailsSourceIDKey "Source" |
648 | #define kIOPMPSAdapterDetailsErrorFlagsKey "ErrorFlags" |
649 | #define kIOPMPSAdapterDetailsSharedSourceKey "SharedSource" |
650 | #define kIOPMPSAdapterDetailsCloakedKey "CloakedSource" |
651 | |
652 | // values for kIOPSPowerAdapterFamilyKey |
653 | enum { |
654 | kIOPSFamilyCodeDisconnected = 0, |
655 | kIOPSFamilyCodeUnsupported = kIOReturnUnsupported, |
656 | kIOPSFamilyCodeFirewire = iokit_family_err(sub_iokit_firewire, 0), |
657 | kIOPSFamilyCodeUSBHost = iokit_family_err(sub_iokit_usb, 0), |
658 | kIOPSFamilyCodeUSBHostSuspended = iokit_family_err(sub_iokit_usb, 1), |
659 | kIOPSFamilyCodeUSBDevice = iokit_family_err(sub_iokit_usb, 2), |
660 | kIOPSFamilyCodeUSBAdapter = iokit_family_err(sub_iokit_usb, 3), |
661 | kIOPSFamilyCodeUSBChargingPortDedicated = iokit_family_err(sub_iokit_usb, 4), |
662 | kIOPSFamilyCodeUSBChargingPortDownstream = iokit_family_err(sub_iokit_usb, 5), |
663 | kIOPSFamilyCodeUSBChargingPort = iokit_family_err(sub_iokit_usb, 6), |
664 | kIOPSFamilyCodeUSBUnknown = iokit_family_err(sub_iokit_usb, 7), |
665 | kIOPSFamilyCodeUSBCBrick = iokit_family_err(sub_iokit_usb, 8), |
666 | kIOPSFamilyCodeUSBCTypeC = iokit_family_err(sub_iokit_usb, 9), |
667 | kIOPSFamilyCodeUSBCPD = iokit_family_err(sub_iokit_usb, 10), |
668 | kIOPSFamilyCodeAC = iokit_family_err(sub_iokit_pmu, 0), |
669 | kIOPSFamilyCodeExternal = iokit_family_err(sub_iokit_pmu, 1), |
670 | kIOPSFamilyCodeExternal2 = iokit_family_err(sub_iokit_pmu, 2), |
671 | kIOPSFamilyCodeExternal3 = iokit_family_err(sub_iokit_pmu, 3), |
672 | kIOPSFamilyCodeExternal4 = iokit_family_err(sub_iokit_pmu, 4), |
673 | kIOPSFamilyCodeExternal5 = iokit_family_err(sub_iokit_pmu, 5), |
674 | kIOPSFamilyCodeExternal6 = iokit_family_err(sub_iokit_pmu, 6), |
675 | kIOPSFamilyCodeExternal7 = iokit_family_err(sub_iokit_pmu, 7), |
676 | kIOPSFamilyCodeExternal8 = iokit_family_err(sub_iokit_pmu, 8), |
677 | kIOPSFamilyCodeUnsupportedRegion = iokit_family_err(sub_iokit_pmu, 9), |
678 | }; |
679 | |
680 | // values for kIOPMPSAdapterDetailsErrorFlagsKey |
681 | enum { |
682 | kIOPSAdapterErrorFlagNoErrors = 0, |
683 | kIOPSAdapterErrorFlagInsufficientAvailablePower = (1 << 1), |
684 | kIOPSAdapterErrorFlagForeignObjectDetected = (1 << 2), |
685 | kIOPSAdapterErrorFlagDeviceNeedsToBeRepositioned = (1 << 3), |
686 | }; |
687 | |
688 | // Battery's time remaining estimate is invalid this long (seconds) after a wake |
689 | #define kIOPMPSInvalidWakeSecondsKey "BatteryInvalidWakeSeconds" |
690 | |
691 | // Battery must wait this long (seconds) after being completely charged before |
692 | // the battery is settled. |
693 | #define kIOPMPSPostChargeWaitSecondsKey "PostChargeWaitSeconds" |
694 | |
695 | // Battery must wait this long (seconds) after being completely discharged |
696 | // before the battery is settled. |
697 | #define kIOPMPSPostDishargeWaitSecondsKey "PostDischargeWaitSeconds" |
698 | |
699 | |
700 | /* CPU Power Management status keys |
701 | * Pass as arguments to IOPMrootDomain::systemPowerEventOccurred |
702 | * Or as arguments to IOPMSystemPowerEventOccurred() |
703 | * Or to decode the dictionary obtained from IOPMCopyCPUPowerStatus() |
704 | * These keys reflect restrictions placed on the CPU by the system |
705 | * to bring the CPU's power consumption within allowable thermal and |
706 | * power constraints. |
707 | */ |
708 | |
709 | |
710 | /* kIOPMGraphicsPowerLimitsKey |
711 | * The key representing the dictionary of graphics power limits. |
712 | * The dictionary contains the other kIOPMCPUPower keys & their associated |
713 | * values (e.g. Speed limit, Processor Count, and Schedule limits). |
714 | */ |
715 | #define kIOPMGraphicsPowerLimitsKey "Graphics_Power_Limits" |
716 | |
717 | /* kIOPMGraphicsPowerLimitPerformanceKey |
718 | * The key representing the percent of overall performance made available |
719 | * by the graphics chip as a percentage (integer 0 - 100). |
720 | */ |
721 | #define kIOPMGraphicsPowerLimitPerformanceKey "Graphics_Power_Performance" |
722 | |
723 | |
724 | |
725 | /* kIOPMCPUPowerLimitsKey |
726 | * The key representing the dictionary of CPU Power Limits. |
727 | * The dictionary contains the other kIOPMCPUPower keys & their associated |
728 | * values (e.g. Speed limit, Processor Count, and Schedule limits). |
729 | */ |
730 | #define kIOPMCPUPowerLimitsKey "CPU_Power_Limits" |
731 | |
732 | /* kIOPMCPUPowerLimitProcessorSpeedKey defines the speed & voltage limits placed |
733 | * on the CPU. |
734 | * Represented as a percentage (0-100) of maximum CPU speed. |
735 | */ |
736 | #define kIOPMCPUPowerLimitProcessorSpeedKey "CPU_Speed_Limit" |
737 | |
738 | /* kIOPMCPUPowerLimitProcessorCountKey reflects how many, if any, CPUs have been |
739 | * taken offline. Represented as an integer number of CPUs (0 - Max CPUs). |
740 | */ |
741 | #define kIOPMCPUPowerLimitProcessorCountKey "CPU_Available_CPUs" |
742 | |
743 | /* kIOPMCPUPowerLimitSchedulerTimeKey represents the percentage (0-100) of CPU time |
744 | * available. 100% at normal operation. The OS may limit this time for a percentage |
745 | * less than 100%. |
746 | */ |
747 | #define kIOPMCPUPowerLimitSchedulerTimeKey "CPU_Scheduler_Limit" |
748 | |
749 | |
750 | /* Thermal Level Warning Key |
751 | * Indicates the thermal constraints placed on the system. This value may |
752 | * cause clients to action to consume fewer system resources. |
753 | * The value associated with this warning is defined by the platform. |
754 | */ |
755 | #define kIOPMThermalLevelWarningKey "Thermal_Level_Warning" |
756 | |
757 | /* Thermal Warning Level values |
758 | * kIOPMThermalLevelNormal - under normal operating conditions |
759 | * kIOPMThermalLevelDanger - thermal pressure may cause system slowdown |
760 | * kIOPMThermalLevelCritical - thermal conditions may cause imminent shutdown |
761 | * |
762 | * The platform may define additional thermal levels if necessary. |
763 | * Platform specific values are defined from 100 and above |
764 | */ |
765 | enum { |
766 | kIOPMThermalLevelNormal = 0, |
767 | kIOPMThermalLevelDanger = 5, |
768 | kIOPMThermalLevelCritical = 10, |
769 | |
770 | kIOPMThermalLevelWarning = 100, |
771 | kIOPMThermalLevelTrap = 110, |
772 | |
773 | kIOPMThermalLevelUnknown = 255, |
774 | }; |
775 | |
776 | #define kIOPMThermalWarningLevelNormal kIOPMThermalLevelNormal |
777 | #define kIOPMThermalWarningLevelDanger kIOPMThermalLevelWarning |
778 | #define kIOPMThermalWarningLevelCrisis kIOPMThermalLevelCritical |
779 | |
780 | // PM Settings Controller setting types |
781 | // Settings types used primarily with: |
782 | // IOPMrootDomain::registerPMSettingController |
783 | // The values are identical to the similarly named keys for use in user space |
784 | // PM settings work. Those keys are defined in IOPMLibPrivate.h. |
785 | #define kIOPMSettingWakeOnRingKey "Wake On Modem Ring" |
786 | #define kIOPMSettingRestartOnPowerLossKey "Automatic Restart On Power Loss" |
787 | #define kIOPMSettingWakeOnACChangeKey "Wake On AC Change" |
788 | #define kIOPMSettingSleepOnPowerButtonKey "Sleep On Power Button" |
789 | #define kIOPMSettingWakeOnClamshellKey "Wake On Clamshell Open" |
790 | #define kIOPMSettingReduceBrightnessKey "ReduceBrightness" |
791 | #define kIOPMSettingDisplaySleepUsesDimKey "Display Sleep Uses Dim" |
792 | #define kIOPMSettingTimeZoneOffsetKey "TimeZoneOffsetSeconds" |
793 | #define kIOPMSettingMobileMotionModuleKey "MobileMotionModule" |
794 | #define kIOPMSettingGraphicsSwitchKey "GPUSwitch" |
795 | #define kIOPMSettingProModeControl "ProModeControl" |
796 | #define kIOPMSettingProModeDefer "ProModeDefer" |
797 | |
798 | // Setting controlling drivers can register to receive scheduled wake data |
799 | // Either in "CF seconds" type, or structured calendar data in a formatted |
800 | // IOPMCalendarStruct defined below. |
801 | #define kIOPMSettingAutoWakeSecondsKey "wake" |
802 | #define kIOPMSettingAutoWakeCalendarKey "WakeByCalendarDate" |
803 | #define kIOPMSettingAutoPowerSecondsKey "poweron" |
804 | #define kIOPMSettingAutoPowerCalendarKey "PowerByCalendarDate" |
805 | |
806 | // Debug seconds auto wake |
807 | // Used by sleep cycling debug tools |
808 | #define kIOPMSettingDebugWakeRelativeKey "WakeRelativeToSleep" |
809 | #define kIOPMSettingDebugPowerRelativeKey "PowerRelativeToShutdown" |
810 | |
811 | // Maintenance wake calendar. |
812 | #define kIOPMSettingMaintenanceWakeCalendarKey "MaintenanceWakeCalendarDate" |
813 | |
814 | |
815 | struct IOPMCalendarStruct { |
816 | UInt32 year; |
817 | UInt8 month; |
818 | UInt8 day; |
819 | UInt8 hour; |
820 | UInt8 minute; |
821 | UInt8 second; |
822 | UInt8 selector; |
823 | }; |
824 | typedef struct IOPMCalendarStruct IOPMCalendarStruct; |
825 | |
826 | // SetAggressiveness types |
827 | enum { |
828 | kPMGeneralAggressiveness = 0, |
829 | kPMMinutesToDim, |
830 | kPMMinutesToSpinDown, |
831 | kPMMinutesToSleep, |
832 | kPMEthernetWakeOnLANSettings, |
833 | kPMSetProcessorSpeed, |
834 | kPMPowerSource, |
835 | kPMMotionSensor, |
836 | kPMLastAggressivenessType |
837 | }; |
838 | #define kMaxType (kPMLastAggressivenessType-1) |
839 | |
840 | // SetAggressiveness values for the kPMPowerSource aggressiveness type |
841 | enum { |
842 | kIOPMInternalPower = 1, |
843 | kIOPMExternalPower |
844 | }; |
845 | |
846 | #define kIOREMSleepEnabledKey "REMSleepEnabled" |
847 | |
848 | // Strings for deciphering the dictionary returned from IOPMCopyBatteryInfo |
849 | #define kIOBatteryInfoKey "IOBatteryInfo" |
850 | #define kIOBatteryCurrentChargeKey "Current" |
851 | #define kIOBatteryCapacityKey "Capacity" |
852 | #define kIOBatteryFlagsKey "Flags" |
853 | #define kIOBatteryVoltageKey "Voltage" |
854 | #define kIOBatteryAmperageKey "Amperage" |
855 | #define kIOBatteryCycleCountKey "Cycle Count" |
856 | |
857 | enum { |
858 | kIOBatteryInstalled = (1 << 2), |
859 | kIOBatteryCharge = (1 << 1), |
860 | kIOBatteryChargerConnect = (1 << 0) |
861 | }; |
862 | |
863 | // Private power management message indicating battery data has changed |
864 | // Indicates new data resides in the IORegistry |
865 | #define kIOPMMessageBatteryStatusHasChanged iokit_family_msg(sub_iokit_pmu, 0x100) |
866 | |
867 | // Apple private Legacy messages for re-routing AutoWake and AutoPower messages to the PMU |
868 | // through newer user space IOPMSchedulePowerEvent API |
869 | #define kIOPMUMessageLegacyAutoWake iokit_family_msg(sub_iokit_pmu, 0x200) |
870 | #define kIOPMUMessageLegacyAutoPower iokit_family_msg(sub_iokit_pmu, 0x210) |
871 | |
872 | // For use with IOPMPowerSource bFlags |
873 | #define IOPM_POWER_SOURCE_REV 2 |
874 | enum { |
875 | kIOPMACInstalled = kIOBatteryChargerConnect, |
876 | kIOPMBatteryCharging = kIOBatteryCharge, |
877 | kIOPMBatteryInstalled = kIOBatteryInstalled, |
878 | kIOPMUPSInstalled = (1 << 3), |
879 | kIOPMBatteryAtWarn = (1 << 4), |
880 | kIOPMBatteryDepleted = (1 << 5), |
881 | kIOPMACnoChargeCapability = (1 << 6), // AC adapter cannot charge battery |
882 | kIOPMRawLowBattery = (1 << 7), // used only by Platform Expert |
883 | kIOPMForceLowSpeed = (1 << 8), // set by Platfm Expert, chk'd by Pwr Plugin |
884 | kIOPMClosedClamshell = (1 << 9), // set by PMU - reflects state of the clamshell |
885 | kIOPMClamshellStateOnWake = (1 << 10) // used only by Platform Expert |
886 | }; |
887 | |
888 | // ********************************************** |
889 | // Internal power management data structures |
890 | // ********************************************** |
891 | |
892 | #if KERNEL && __cplusplus |
893 | class IOService; |
894 | |
895 | enum { |
896 | kIOPowerEmergencyLevel = 1000 |
897 | }; |
898 | |
899 | enum { |
900 | kIOPMSubclassPolicy, |
901 | kIOPMSuperclassPolicy1 |
902 | #ifdef KERNEL_PRIVATE |
903 | , kIOPMActivityTickleTypeAdvisory = 128 |
904 | #endif |
905 | }; |
906 | |
907 | struct stateChangeNote { |
908 | IOPMPowerFlags stateFlags; |
909 | unsigned long stateNum; |
910 | void * powerRef; |
911 | }; |
912 | typedef struct stateChangeNote stateChangeNote; |
913 | |
914 | #endif /* KERNEL && __cplusplus */ |
915 | struct IOPowerStateChangeNotification { |
916 | void * powerRef; |
917 | unsigned long returnValue; |
918 | unsigned long stateNumber; |
919 | IOPMPowerFlags stateFlags; |
920 | }; |
921 | typedef struct IOPowerStateChangeNotification IOPowerStateChangeNotification; |
922 | typedef IOPowerStateChangeNotification sleepWakeNote; |
923 | |
924 | /*! @struct IOPMSystemCapabilityChangeParameters |
925 | * @abstract A structure describing a system capability change. |
926 | * @discussion A system capability change is a system level transition from a set |
927 | * of system capabilities to a new set of system capabilities. Power management |
928 | * sends a <code>kIOMessageSystemCapabilityChange</code> message and provides |
929 | * this structure as the message data (by reference) to |
930 | * <code>gIOPriorityPowerStateInterest</code> clients when system capability |
931 | * changes. |
932 | * @field notifyRef An identifier for this message notification. Clients with pending |
933 | * I/O can signal completion by calling <code>allowPowerChange()</code> with this |
934 | * value as the argument. Clients that are able to process the notification |
935 | * synchronously should ignore this field. |
936 | * @field maxWaitForReply A return value to the caller indicating the maximum time in |
937 | * microseconds to wait for the <code>allowPowerChange()</code> call. The default |
938 | * value is zero, which indicates the client processing has finished, and power |
939 | * management should not wait for an <code>allowPowerChange()</code> call. |
940 | * @field changeFlags Flags will be set to indicate whether the notification precedes |
941 | * the capability change (<code>kIOPMSystemCapabilityWillChange</code>), or after |
942 | * the capability change has occurred (<code>kIOPMSystemCapabilityDidChange</code>). |
943 | * @field __reserved1 Set to zero. |
944 | * @field fromCapabilities The system capabilities at the start of the transition. |
945 | * @field toCapabilities The system capabilities at the end of the transition. |
946 | * @field __reserved2 Set to zero. |
947 | */ |
948 | struct IOPMSystemCapabilityChangeParameters { |
949 | uint32_t notifyRef; |
950 | uint32_t maxWaitForReply; |
951 | uint32_t changeFlags; |
952 | uint32_t __reserved1; |
953 | uint32_t fromCapabilities; |
954 | uint32_t toCapabilities; |
955 | uint32_t __reserved2[4]; |
956 | }; |
957 | |
958 | /*! @enum IOPMSystemCapabilityChangeFlags |
959 | * @constant kIOPMSystemCapabilityWillChange Indicates the system capability will change. |
960 | * @constant kIOPMSystemCapabilityDidChange Indicates the system capability has changed. |
961 | */ |
962 | enum { |
963 | kIOPMSystemCapabilityWillChange = 0x01, |
964 | kIOPMSystemCapabilityDidChange = 0x02 |
965 | }; |
966 | |
967 | enum { |
968 | kIOPMSystemCapabilityCPU = 0x01, |
969 | kIOPMSystemCapabilityGraphics = 0x02, |
970 | kIOPMSystemCapabilityAudio = 0x04, |
971 | kIOPMSystemCapabilityNetwork = 0x08 |
972 | }; |
973 | |
974 | #endif /* ! _IOKIT_IOPM_H */ |
975 | |