Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / power.h @ 14

History | View | Annotate | Download (9.1 KB)

1 13 up20180614
/*        $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_ */