1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
/* $NetBSD: apmbios.h,v 1.5 2008/04/28 20:23:47 martin Exp $ */
/*-
* Copyright (c) 1995 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by John Kohl.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DEV_APM_APMBIOS_H_
#define _DEV_APM_APMBIOS_H_
/* Advanced Power Management (v1.0 and v1.1 specification)
* functions/defines/etc.
*/
#define APM_BIOS_FNCODE (0x53)
#define APM_SYSTEM_BIOS (0x15)
#define APM_BIOS_FN(x) ((APM_BIOS_FNCODE<<8)|(x))
/*
* APM info bits from BIOS
*/
#define APM_16BIT_SUPPORT 0x01
#define APM_32BIT_SUPPORT 0x02
#define APM_CPUIDLE_SLOW 0x04
#define APM_DISABLED 0x08
#define APM_DISENGAGED 0x10
#define APM_ERR_LIMIT 10
#define APM_ERR_CODE(regs) (((regs)->AX & 0xff00) >> 8)
#define APM_ERR_PM_DISABLED 0x01
#define APM_ERR_REALALREADY 0x02
#define APM_ERR_NOTCONN 0x03
#define APM_ERR_16ALREADY 0x05
#define APM_ERR_16NOTSUPP 0x06
#define APM_ERR_32ALREADY 0x07
#define APM_ERR_32NOTSUPP 0x08
#define APM_ERR_UNRECOG_DEV 0x09
#define APM_ERR_ERANGE 0x0A
#define APM_ERR_NOTENGAGED 0x0B
#define APM_ERR_EOPNOTSUPP 0x0C
#define APM_ERR_RTIMER_DISABLED 0x0D
#define APM_ERR_UNABLE 0x60
#define APM_ERR_NOEVENTS 0x80
#define APM_ERR_NOT_PRESENT 0x86
#define APM_DEV_APM_BIOS 0x0000
#define APM_DEV_ALLDEVS 0x0001
/* device classes are high byte; device IDs go in low byte */
#define APM_DEV_DISPLAY(x) (0x0100|((x)&0xff))
#define APM_DEV_DISK(x) (0x0200|((x)&0xff))
#define APM_DEV_PARALLEL(x) (0x0300|((x)&0xff))
#define APM_DEV_SERIAL(x) (0x0400|((x)&0xff))
#define APM_DEV_NETWORK(x) (0x0500|((x)&0xff))
#define APM_DEV_PCMCIA(x) (0x0600|((x)&0xff))
#define APM_DEV_BATTERY(x) (0x8000|((x)&0xff)) /* V1.2 */
#define APM_DEV_ALLUNITS 0xff
#define APM_INSTALLATION_CHECK 0x00 /* int15 only */
#define APM_INSTALL_SIGNATURE 0x504d /* %bh = 'P', %bl = 'M' */
#define APM_REALMODE_CONNECT 0x01 /* int15 only */
#define APM_16BIT_CONNECT 0x02 /* int15 only */
#define APM_32BIT_CONNECT 0x03 /* int15 only */
#define APM_DISCONNECT 0x04 /* %bx = APM_DEV_APM_BIOS */
#define APM_CPU_IDLE 0x05
#define APM_CPU_BUSY 0x06
#define APM_SET_PWR_STATE 0x07
#define APM_SYS_READY 0x0000 /* %cx */
#define APM_SYS_STANDBY 0x0001
#define APM_SYS_SUSPEND 0x0002
#define APM_SYS_OFF 0x0003
#define APM_LASTREQ_INPROG 0x0004
#define APM_LASTREQ_REJECTED 0x0005
/* system standby is device ID (%bx) 0x0001, APM_SYS_STANDBY */
/* system suspend is device ID (%bx) 0x0001, APM_SYS_SUSPEND */
#define APM_PWR_MGT_ENABLE 0x08
#define APM_MGT_ALL 0xffff /* %bx */
#define APM_MGT_DISABLE 0x0 /* %cx */
#define APM_MGT_ENABLE 0x1
#define APM_SYSTEM_DEFAULTS 0x09
#define APM_DEFAULTS_ALL 0xffff /* %bx */
#define APM_DEFAULTS_ALL_V12 0x0001 /* %bx */
#define APM_POWER_STATUS 0x0a
#define APM_AC_OFF 0x00
#define APM_AC_ON 0x01
#define APM_AC_BACKUP 0x02
#define APM_AC_UNKNOWN 0xff
/* the first set of battery constants is 1.0 style values;
the second set is 1.1 style bit definitions */
#define APM_BATT_HIGH 0x00
#define APM_BATT_LOW 0x01
#define APM_BATT_CRITICAL 0x02
#define APM_BATT_CHARGING 0x03
#define APM_BATT_ABSENT 0x04 /* Software only--not in spec! */
#define APM_BATT_UNKNOWN 0xff
#define APM_BATT_FLAG_HIGH 0x01
#define APM_BATT_FLAG_LOW 0x02
#define APM_BATT_FLAG_CRITICAL 0x04
#define APM_BATT_FLAG_CHARGING 0x08
#define APM_BATT_FLAG_NOBATTERY 0x10
#define APM_BATT_FLAG_NO_SYSTEM_BATTERY 0x80
#define APM_BATT_FLAG_UNKNOWN 0xff
#define APM_BATT_LIFE_UNKNOWN 0xff
#define APM_BATT_STATE(regp) ((regp)->BX & 0xff)
#define APM_BATT_FLAGS(regp) (((regp)->CX & 0xff00) >> 8)
#define APM_AC_STATE(regp) (((regp)->BX & 0xff00) >> 8)
#define APM_BATT_LIFE(regp) ((regp)->CX & 0xff) /* in % */
/* BATT_REMAINING returns minutes remaining */
#define APM_BATT_REMAINING(regp) (((regp)->DX & 0x8000) ? \
((regp)->DX & 0x7fff) : \
((regp)->DX & 0x7fff)/60)
#define APM_BATT_REM_VALID(regp) (((regp)->DX & 0xffff) != 0xffff)
#define APM_BATTERY_COUNT(regp) ((regp)->SI)
#define APM_GET_PM_EVENT 0x0b
#define APM_STANDBY_REQ 0x0001 /* %bx on return */
#define APM_SUSPEND_REQ 0x0002
#define APM_NORMAL_RESUME 0x0003
#define APM_CRIT_RESUME 0x0004 /* suspend/resume happened
without us */
/* If set, the pccard sockets were powered off in the
suspend/standby state (V1.2 only) */
#define APM_PCCARD_POWEREDOFF(regp) ((regp)->CX & 0x0001)
#define APM_BATTERY_LOW 0x0005
#define APM_POWER_CHANGE 0x0006
#define APM_UPDATE_TIME 0x0007
#define APM_CRIT_SUSPEND_REQ 0x0008
#define APM_USER_STANDBY_REQ 0x0009
#define APM_USER_SUSPEND_REQ 0x000A
#define APM_SYS_STANDBY_RESUME 0x000B
#define APM_CAP_CHANGE 0x000C /* V1.2 */
#define APM_GET_POWER_STATE 0x0c
/* device to query in %bx */
/* returns power states in %cx */
#define APM_DEVICE_MGMT_ENABLE 0x0d
/* device to enable/disable in %bx */
#define APM_DRIVER_VERSION 0x0e
/* %bx should be DEV value (APM_DEV_APM_BIOS)
%ch = driver major vno
%cl = driver minor vno
return: %ah = conn major; %al = conn minor
*/
#define APM_CONN_MINOR(regp) ((regp)->AX & 0xff)
#define APM_CONN_MAJOR(regp) (((regp)->AX & 0xff00) >> 8)
#define APM_PWR_MGT_ENGAGE 0x0F
/* device in %bx */
#define APM_MGT_DISENGAGE 0x0 /* %cx */
#define APM_MGT_ENGAGE 0x1
#define APM_GET_CAPABILITIES 0x10
/* device in %bx (APM_DEV_APM_BIOS) */
/* %bl: number of batteries */
#define APM_NBATTERIES(regp) ((regp)->BX & 0xff)
/* %cx capabilities */
#define APM_GLOBAL_STANDBY 0x0001
#define APM_GLOBAL_SUSPEND 0x0002
#define APM_RTIMER_STANDBY 0x0004 /* resume timer wakes standby */
#define APM_RTIMER_SUSPEND 0x0008 /* resume timer wakes suspend */
#define APM_IRRING_SUSPEND 0x0010 /* internal ring wakes suspend */
#define APM_IRRING_STANDBY 0x0020 /* internal ring wakes standby */
#define APM_PCRING_SUSPEND 0x0040 /* pccard ring wakes suspend */
#define APM_PCRING_STANDBY 0x0080 /* pccard ring wakes standby */
#define APM_RESUME_TIMER_CTL 0x11 /* get/set/disable resume timer */
/* device in %bx (APM_DEV_APM_BIOS) */
/* function code in %cl */
#define APM_RTIMER_DISABLE 0x00
#define APM_RTIMER_GET 0x01
#define APM_RTIMER_SET 0x02
/* if %cl = set, or %cl = get, then: */
/* %ch: seconds */
/* %dh: hours */
/* %dl: minutes */
/* %sih: month (bcd), %sil: day (bcd) */
/* %di: year (bcd, 4 digits) */
#define APM_RESUME_RING_CTL 0x12
/* device in %bx (APM_DEV_APM_BIOS) */
/* %cx: function code */
#define APM_RRING_DISABLE 0x0000
#define APM_RRING_ENABLE 0x0001
#define APM_RRING_GET 0x0002
/* returns state in %cx */
#define APM_RRING_DISABLED 0x0000
#define APM_RRING_ENABLED 0x0001
#define APM_TIMER_REQS_CTL 0x13
/* device in %bx (APM_DEV_APM_BIOS) */
/* %cx: function code */
#define APM_TIMER_REQS_DISABLE 0x0000
#define APM_TIMER_REQS_ENABLE 0x0001
#define APM_TIMER_REQS_GET 0x0002
/* returns state in %cx */
#define APM_TIMER_REQS_DISABLED 0x0000
#define APM_TIMER_REQS_ENABLED 0x0001
#define APM_OEM 0x80
/*
* APM info word from the real-mode handler is adjusted to put
* major/minor version in low half and support bits in upper half.
*/
#define APM_MAJOR_VERS(info) (((info)&0xff00)>>8)
#define APM_MINOR_VERS(info) ((info)&0xff)
#define APM_16BIT_SUPPORTED (APM_16BIT_SUPPORT << 16)
#define APM_32BIT_SUPPORTED (APM_32BIT_SUPPORT << 16)
#define APM_IDLE_SLOWS (APM_CPUIDLE_SLOW << 16)
#define APM_BIOS_PM_DISABLED (APM_DISABLED << 16)
#define APM_BIOS_PM_DISENGAGED (APM_DISENGAGED << 16)
#define APMDEBUG_INFO 0x01
#define APMDEBUG_APMCALLS 0x02
#define APMDEBUG_EVENTS 0x04
#define APMDEBUG_PROBE 0x10
#define APMDEBUG_ATTACH 0x40
#define APMDEBUG_DEVICE 0x20
#define APMDEBUG_ANOM 0x40
#endif /* _DEV_APM_APMBIOS_H_ */
|