|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * Copyright 1994 NeXT Computer, Inc.
27: * All rights reserved.
28: */
29:
30: #import <mach/mach_types.h>
31: #import <mach/error.h>
32:
33: /*
34: * Power Management (PM) kernel interface.
35: */
36:
37: #define pm_err(errno) (err_kern|err_sub(4000)|errno)
38:
39: typedef enum {
40: PM_R_SUCCESS = 0x00,
41: PM_R_DISABLED = pm_err(0x01), // power management disabled
42: PM_R_CONNECTED = pm_err(0x02), // interface already connected
43: PM_R_NOT_CONNECTED = pm_err(0x03), // interface not connected
44: PM_R_BAD_ID = pm_err(0x09), // unrecognized device ID
45: PM_R_BAD_VALUE = pm_err(0x0a), // parameter value out of range
46: PM_R_BAD_STATE = pm_err(0x60), // can't enter requested state
47: PM_R_NO_EVENT = pm_err(0x80), // no power events pending
48: PM_R_NO_PM = pm_err(0x86), // PM not present
49: PM_R_UNSUPPORTED = pm_err(0x100), // unsupported function call
50: PM_R_UNKNOWN = pm_err(0x101) // unknown error from hardware
51: } PMReturn;
52:
53: typedef enum {
54: PM_CPU_IDLE,
55: PM_CPU_BUSY
56: } PMCpuState;
57:
58: typedef enum {
59: PM_READY = 0x00, // PM enabled, full power
60: PM_STANDBY = 0x01, // Standby mode
61: PM_SUSPENDED = 0x02, // Suspend mode
62: PM_OFF = 0x03 // Off completely
63: } PMPowerState;
64:
65: typedef enum {
66: PM_SYSTEM = 0x00,
67: PM_DISPLAY = 0x01,
68: PM_STORAGE = 0x02,
69: PM_PARALLEL = 0x03,
70: PM_SERIAL = 0x04,
71: PM_NETWORK = 0x05,
72: PM_PCMCIA = 0x06
73: } PMDeviceType;
74:
75: typedef struct {
76: unsigned int deviceNumber :16;
77: PMDeviceType deviceType :16;
78: } PMDeviceID;
79:
80: /*
81: * Note: the entire computer is referred to as device type PM_SYSTEM,
82: * device number 1.
83: */
84: #define PM_SYSTEM_DEVICE ((PMDeviceID){1, PM_SYSTEM})
85:
86: typedef enum {
87: PM_STANDBY_REQUEST = 0x01,
88: PM_SUSPEND_REQUEST = 0x02,
89: PM_NORMAL_RESUME = 0x03,
90: PM_CRITICAL_RESUME = 0x04,
91: PM_BATTERY_LOW = 0x05,
92: PM_POWER_STATUS_CHANGE = 0x06,
93: PM_UPDATE_TIME = 0x07,
94: PM_CRITICAL_SUSPEND = 0x08,
95: PM_USER_STANDBY_REQUEST = 0x09,
96: PM_USER_SUSPEND_REQUEST = 0x0a,
97: PM_STANDBY_RESUME = 0x0b
98: } PMPowerEvent;
99:
100: typedef enum {
101: PM_LINE_OFFLINE = 0x00,
102: PM_LINE_ONLINE = 0x01,
103: PM_LINE_BACKUP = 0x02,
104: PM_LINE_UNKNOWN = 0xFF
105: } PMLineStatus;
106:
107: typedef enum {
108: PM_BATT_HIGH = 0x00,
109: PM_BATT_LOW = 0x01,
110: PM_BATT_CRITICAL = 0x02,
111: PM_BATT_CHARGING = 0x03,
112: PM_BATT_UNKNOWN = 0xFF
113: } PMBatteryStatus;
114:
115: typedef struct {
116: PMLineStatus lineStatus;
117: PMBatteryStatus batteryStatus;
118: int batteryLife;
119: } PMPowerStatus;
120:
121: typedef enum {
122: PM_DISABLED,
123: PM_ENABLED
124: } PMPowerManagementState;
125:
126:
127: #ifdef KERNEL
128:
129: #define MARK_CPU_IDLE(mycpu) PMSetCpuState(PM_CPU_IDLE)
130: #define MARK_CPU_ACTIVE(mycpu) PMSetCpuState(PM_CPU_BUSY)
131:
132: /*
133: * Initialize PM support. Returns TRUE if PM is available.
134: */
135: PMReturn PMConnect(void);
136:
137: /*
138: * Return PM control to previous user (probably the BIOS).
139: * Normally this will never be called.
140: */
141: PMReturn PMDisconnect(void);
142:
143: /*
144: * Inform PM of the CPU state. If the CPU is idle, PM may
145: * put the CPU in a power-saving state until the next system event
146: * (typically an interrupt). Marking the CPU busy will ensure
147: * that the CPU is running at full speed.
148: */
149: PMReturn PMSetCpuState(PMCpuState state);
150:
151: /*
152: * Update current kernel clock from real-time clock.
153: */
154: void PMUpdateClock(void);
155:
156: /*
157: * Set the power state of a device or the entire computer.
158: */
159: PMReturn PMSetPowerState(PMDeviceID device, PMPowerState state);
160:
161: /*
162: * Get a power event from PM, if one has occurred.
163: */
164: PMReturn PMGetPowerEvent(PMPowerEvent *event);
165:
166: /*
167: * Get the power state of the computer.
168: */
169: PMReturn PMGetPowerStatus(PMPowerStatus *status);
170:
171: /*
172: * Enable or disable power management by the computer.
173: * If enable == PM_ENABLED, the computer can take power saving steps
174: * when the CPU state is idle. If enable == PM_DISABLED, no automatic
175: * power saving steps will be taken and power management functions
176: * will be disabled.
177: */
178: PMReturn PMSetPowerManagement(PMDeviceID device,
179: PMPowerManagementState state);
180:
181: /*
182: * Restores the default settings for all power management settings.
183: */
184: PMReturn PMRestoreDefaults(void);
185:
186: #else /* KERNEL */
187:
188: /*
189: * Set the power state of a device or the entire computer.
190: */
191: kern_return_t _PMSetPowerState(
192: host_t host,
193: PMDeviceID device,
194: PMPowerState state);
195:
196: /*
197: * Get a power event from PM, if one has occurred.
198: */
199: kern_return_t _PMGetPowerEvent(
200: host_t host,
201: PMPowerEvent *event);
202:
203: /*
204: * Get the power state of the computer.
205: */
206: kern_return_t _PMGetPowerStatus(
207: host_t host,
208: PMPowerStatus *status);
209:
210: /*
211: * Enable or disable power management by the computer.
212: * If enable == PM_ENABLED, the computer can take power saving steps
213: * when the CPU state is idle. If enable == PM_DISABLED, no automatic
214: * power saving steps will be taken and power management functions
215: * will be disabled.
216: */
217: kern_return_t _PMSetPowerManagement(
218: host_t host,
219: PMDeviceID device,
220: PMPowerManagementState state);
221:
222: /*
223: * Restores the default settings for all power management settings.
224: */
225: kern_return_t _PMRestoreDefaults(
226: host_t host);
227:
228:
229: #endif /* KERNEL */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.