1 | /* $NetBSD: power.h,v 1.20 2015/01/06 15:39:54 bouyer Exp $ */ |
2 | |
3 | /* |
4 | * Copyright (c) 2003 Wasabi Systems, Inc. |
5 | * All rights reserved. |
6 | * |
7 | * Written by Jason R. Thorpe for Wasabi Systems, Inc. |
8 | * |
9 | * Redistribution and use in source and binary forms, with or without |
10 | * modification, are permitted provided that the following conditions |
11 | * are met: |
12 | * 1. Redistributions of source code must retain the above copyright |
13 | * notice, this list of conditions and the following disclaimer. |
14 | * 2. Redistributions in binary form must reproduce the above copyright |
15 | * notice, this list of conditions and the following disclaimer in the |
16 | * documentation and/or other materials provided with the distribution. |
17 | * 3. All advertising materials mentioning features or use of this software |
18 | * must display the following acknowledgement: |
19 | * This product includes software developed for the NetBSD Project by |
20 | * Wasabi Systems, Inc. |
21 | * 4. The name of Wasabi Systems, Inc. may not be used to endorse |
22 | * or promote products derived from this software without specific prior |
23 | * written permission. |
24 | * |
25 | * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND |
26 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
27 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
28 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC |
29 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
30 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
31 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
32 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
33 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
34 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
35 | * POSSIBILITY OF SUCH DAMAGE. |
36 | */ |
37 | |
38 | /* |
39 | * Definitions for power management. |
40 | */ |
41 | |
42 | #ifndef _SYS_POWER_H_ |
43 | #define _SYS_POWER_H_ |
44 | |
45 | #include <sys/ioccom.h> |
46 | |
47 | #ifndef _KERNEL |
48 | #include <stdint.h> |
49 | #endif |
50 | |
51 | /* |
52 | * Power Switches: |
53 | * |
54 | * Power switches are devices on the system that are used by the system |
55 | * operator to cause certain types of power management events to happen. |
56 | * This may be the closing of a laptop lid, the pressing of a power button, |
57 | * or some other type of user-initiated hardware event. |
58 | * |
59 | * We define the following types of power switches: |
60 | * |
61 | * Power button This is the "on/off" button on a system, |
62 | * or another button which provides a similar |
63 | * function. If there is no power management |
64 | * daemon present, an event on this button will |
65 | * cause a semi-graceful shutdown of the system |
66 | * to occur. This kind of button doesn't keep |
67 | * state; we only know (care) if an event occurs. |
68 | * |
69 | * Reset button This is the "reset" button on a system, or |
70 | * another button which provides a similar |
71 | * function. If there is no power management |
72 | * daemon present, an event on this button will |
73 | * cause a semi-graceful reboot of the system |
74 | * to occur. This kind of button doesn't keep |
75 | * state; we only know (care) if an event occurs. |
76 | * |
77 | * Sleep button This is a button which is dedicated to a |
78 | * "sleep" function. This kind of button doesn't |
79 | * keep state; we only know (care) if an event |
80 | * occurs. |
81 | * |
82 | * Lid switch This is e.g. the lid of a laptop. This kind |
83 | * of switch has state. We know if it is open |
84 | * or closed. |
85 | * |
86 | * Radio switch This is e.g. the switch of the transmitter |
87 | * of a wifi interface. We know if it is |
88 | * on or off. |
89 | * |
90 | */ |
91 | |
92 | #define PSWITCH_TYPE_POWER 0 /* power button */ |
93 | #define PSWITCH_TYPE_SLEEP 1 /* sleep button */ |
94 | #define PSWITCH_TYPE_LID 2 /* lid switch */ |
95 | #define PSWITCH_TYPE_RESET 3 /* reset button */ |
96 | #define PSWITCH_TYPE_ACADAPTER 4 /* AC adapter presence */ |
97 | #define PSWITCH_TYPE_HOTKEY 5 /* hotkey button */ |
98 | #define PSWITCH_HK_DISPLAY_CYCLE "display-cycle" |
99 | #define PSWITCH_HK_LOCK_SCREEN "lock-screen" |
100 | #define PSWITCH_HK_BATTERY_INFO "battery-info" |
101 | #define PSWITCH_HK_EJECT_BUTTON "eject-button" |
102 | #define PSWITCH_HK_ZOOM_BUTTON "zoom-button" |
103 | #define PSWITCH_HK_VENDOR_BUTTON "vendor-button" |
104 | #ifndef THINKPAD_NORMAL_HOTKEYS |
105 | #define PSWITCH_HK_FNF1_BUTTON "fnf1-button" |
106 | #define PSWITCH_HK_WIRELESS_BUTTON "wireless-button" |
107 | #define PSWITCH_HK_WWAN_BUTTON "wWAN-button" |
108 | #define PSWITCH_HK_POINTER_BUTTON "pointer-button" |
109 | #define PSWITCH_HK_FNF10_BUTTON "fnf10-button" |
110 | #define PSWITCH_HK_FNF11_BUTTON "fnf11-button" |
111 | #define PSWITCH_HK_BRIGHTNESS_UP "brightness-up" |
112 | #define PSWITCH_HK_BRIGHTNESS_DOWN "brightness-down" |
113 | #define PSWITCH_HK_THINKLIGHT "thinklight" |
114 | #define PSWITCH_HK_VOLUME_UP "volume-up" |
115 | #define PSWITCH_HK_VOLUME_DOWN "volume-down" |
116 | #define PSWITCH_HK_VOLUME_MUTE "volume-mute" |
117 | #endif /* THINKPAD_NORMAL_HOTKEYS */ |
118 | #define PSWITCH_TYPE_RADIO 6 /* radio switch */ |
119 | |
120 | #define PSWITCH_EVENT_PRESSED 0 /* button pressed, lid closed, AC off */ |
121 | #define PSWITCH_EVENT_RELEASED 1 /* button released, lid open, AC on */ |
122 | |
123 | /* |
124 | * This structure describes the state of a power switch. |
125 | */ |
126 | struct pswitch_state { |
127 | char psws_name[16]; /* power switch name */ |
128 | int32_t psws_type; /* type of switch (qualifier) */ |
129 | int32_t psws_state; /* state of the switch/event */ |
130 | }; |
131 | |
132 | /* |
133 | * envsys(4) events: |
134 | * |
135 | * envsys events are sent by the sysmon envsys framework when |
136 | * a warning or critical condition happens in a sensor. |
137 | * |
138 | * We define the folowing types of envsys events: |
139 | * |
140 | * sensor temperature To handle temperature sensors. |
141 | * |
142 | * sensor voltage To handle voltage sensors (AC/DC). |
143 | * |
144 | * sensor power To handle power sensors (W/Ampere). |
145 | * |
146 | * sensor resistance To handle resistance sensors (Ohms). |
147 | * |
148 | * sensor battery To handle battery sensors (Ah/Wh). |
149 | * |
150 | * sensor fan To handle fan sensors. |
151 | * |
152 | * sensor drive To handle drive sensors. |
153 | * |
154 | * sensor indicator To handle indicator/integer sensors. |
155 | */ |
156 | |
157 | #define PENVSYS_TYPE_TEMP 10 |
158 | #define PENVSYS_TYPE_VOLTAGE 11 |
159 | #define PENVSYS_TYPE_POWER 12 |
160 | #define PENVSYS_TYPE_RESISTANCE 13 |
161 | #define PENVSYS_TYPE_BATTERY 14 |
162 | #define PENVSYS_TYPE_FAN 15 |
163 | #define PENVSYS_TYPE_DRIVE 16 |
164 | #define PENVSYS_TYPE_INDICATOR 17 |
165 | |
166 | /* |
167 | * The following events apply for temperatures, power, resistance, |
168 | * voltages, battery and fan sensors: |
169 | * |
170 | * PENVSYS_EVENT_CRITICAL A critical limit. |
171 | * |
172 | * PENVSYS_EVENT_CRITOVER A critical over limit. |
173 | * |
174 | * PENVSYS_EVENT_CRITUNDER A critical under limit. |
175 | * |
176 | * PENVSYS_EVENT_WARNOVER A warning under limit. |
177 | * |
178 | * PENVSYS_EVENT_WARNUNDER A warning over limit. |
179 | * |
180 | * The folowing event applies to all sensors, when the state is |
181 | * valid or the warning or critical limit is not valid anymore: |
182 | * |
183 | * PENVSYS_EVENT_NORMAL Normal state in the sensor. |
184 | */ |
185 | |
186 | #define PENVSYS_EVENT_NORMAL 90 |
187 | #define PENVSYS_EVENT_CRITICAL 100 |
188 | #define PENVSYS_EVENT_CRITOVER 110 |
189 | #define PENVSYS_EVENT_CRITUNDER 120 |
190 | #define PENVSYS_EVENT_WARNOVER 130 |
191 | #define PENVSYS_EVENT_WARNUNDER 140 |
192 | |
193 | /* |
194 | * The following events apply for battery sensors: |
195 | * |
196 | * PENVSYS_EVENT_BATT_CRIT User critical capacity. |
197 | * |
198 | * PENVSYS_EVENT_BATT_WARN User warning capacity. |
199 | * |
200 | * PENVSYS_EVENT_BATT_HIGH User high capacity. |
201 | * |
202 | * PENVSYS_EVENT_BATT_MAX User maximum capacity. |
203 | * |
204 | * PENVSYS_EVENT_LOW_POWER AC Adapter is OFF and all batteries |
205 | * are discharged. |
206 | */ |
207 | |
208 | #define PENVSYS_EVENT_BATT_CRIT 170 |
209 | #define PENVSYS_EVENT_BATT_WARN 175 |
210 | #define PENVSYS_EVENT_BATT_HIGH 177 |
211 | #define PENVSYS_EVENT_BATT_MAX 178 |
212 | #define PENVSYS_EVENT_LOW_POWER 180 |
213 | |
214 | /* |
215 | * The following event apply for battery state and drive sensors: |
216 | * |
217 | * PENVSYS_EVENT_STATE_CHANGED State has changed. |
218 | * |
219 | */ |
220 | #define PENVSYS_EVENT_STATE_CHANGED 190 |
221 | |
222 | /* |
223 | * The following events are used internally to associate multiple |
224 | * external states with a single event monitor |
225 | */ |
226 | #define PENVSYS_EVENT_LIMITS 200 |
227 | #define PENVSYS_EVENT_CAPACITY 210 |
228 | |
229 | /* |
230 | * The following pseudo-event is used to force refreshing of a |
231 | * sensor that provides rnd(4) entropy, even if the sensor is not |
232 | * otherwise being monitored. |
233 | */ |
234 | #define PENVSYS_EVENT_NULL 220 |
235 | |
236 | /* |
237 | * This structure defines the properties of an envsys event. |
238 | */ |
239 | struct penvsys_state { |
240 | char pes_dvname[16]; /* device name */ |
241 | char pes_sensname[32]; /* sensor name */ |
242 | char pes_statedesc[64]; /* sensor state description */ |
243 | int32_t pes_type; /* envsys power type */ |
244 | }; |
245 | |
246 | /* |
247 | * Power management event messages: |
248 | * |
249 | * We ensure that a message is always exactly 32 bytes long, so that |
250 | * userland doesn't need to issue multiple reads to get a single event. |
251 | */ |
252 | #define POWER_EVENT_MSG_SIZE 32 |
253 | |
254 | #define POWER_EVENT_SWITCH_STATE_CHANGE 0 |
255 | #define POWER_EVENT_ENVSYS_STATE_CHANGE 1 |
256 | |
257 | typedef struct power_event { |
258 | int32_t pev_type; /* power event type */ |
259 | union { |
260 | int32_t _pev_d_space[(POWER_EVENT_MSG_SIZE / |
261 | sizeof(int32_t)) - 1]; |
262 | |
263 | /* |
264 | * This field is used for: |
265 | * |
266 | * POWER_EVENT_SWITCH_STATE_CHANGE |
267 | */ |
268 | struct pswitch_state _pev_d_switch; |
269 | } _pev_data; |
270 | } power_event_t; |
271 | |
272 | #define pev_switch _pev_data._pev_d_switch |
273 | |
274 | #define POWER_EVENT_RECVDICT _IOWR('P', 1, struct plistref) |
275 | |
276 | /* |
277 | * POWER_IOC_GET_TYPE: |
278 | * |
279 | * Get the power management back-end type. |
280 | */ |
281 | struct power_type { |
282 | char power_type[32]; |
283 | }; |
284 | #define POWER_IOC_GET_TYPE _IOR('P', 0, struct power_type) |
285 | #define POWER_IOC_GET_TYPE_WITH_LOSSAGE _IOR('P', 0, sizeof(struct power_type)) |
286 | |
287 | #endif /* _SYS_POWER_H_ */ |
288 | |