Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | #ifndef _LINUX_APM_H |
2 | #define _LINUX_APM_H |
||
3 | |||
4 | /* |
||
5 | * Include file for the interface to an APM BIOS |
||
6 | * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au) |
||
7 | * |
||
8 | * This program is free software; you can redistribute it and/or modify it |
||
9 | * under the terms of the GNU General Public License as published by the |
||
10 | * Free Software Foundation; either version 2, or (at your option) any |
||
11 | * later version. |
||
12 | * |
||
13 | * This program is distributed in the hope that it will be useful, but |
||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
16 | * General Public License for more details. |
||
17 | */ |
||
18 | |||
19 | typedef unsigned short apm_event_t; |
||
20 | typedef unsigned short apm_eventinfo_t; |
||
21 | |||
22 | #ifdef __KERNEL__ |
||
23 | |||
24 | #define APM_CS (GDT_ENTRY_APMBIOS_BASE * 8) |
||
25 | #define APM_CS_16 (APM_CS + 8) |
||
26 | #define APM_DS (APM_CS_16 + 8) |
||
27 | |||
28 | struct apm_bios_info { |
||
29 | unsigned short version; |
||
30 | unsigned short cseg; |
||
31 | unsigned long offset; |
||
32 | unsigned short cseg_16; |
||
33 | unsigned short dseg; |
||
34 | unsigned short flags; |
||
35 | unsigned short cseg_len; |
||
36 | unsigned short cseg_16_len; |
||
37 | unsigned short dseg_len; |
||
38 | }; |
||
39 | |||
40 | /* Results of APM Installation Check */ |
||
41 | #define APM_16_BIT_SUPPORT 0x0001 |
||
42 | #define APM_32_BIT_SUPPORT 0x0002 |
||
43 | #define APM_IDLE_SLOWS_CLOCK 0x0004 |
||
44 | #define APM_BIOS_DISABLED 0x0008 |
||
45 | #define APM_BIOS_DISENGAGED 0x0010 |
||
46 | |||
47 | /* |
||
48 | * Data for APM that is persistent across module unload/load |
||
49 | */ |
||
50 | struct apm_info { |
||
51 | struct apm_bios_info bios; |
||
52 | unsigned short connection_version; |
||
53 | int get_power_status_broken; |
||
54 | int get_power_status_swabinminutes; |
||
55 | int allow_ints; |
||
56 | int realmode_power_off; |
||
57 | int disabled; |
||
58 | }; |
||
59 | |||
60 | /* |
||
61 | * The APM function codes |
||
62 | */ |
||
63 | #define APM_FUNC_INST_CHECK 0x5300 |
||
64 | #define APM_FUNC_REAL_CONN 0x5301 |
||
65 | #define APM_FUNC_16BIT_CONN 0x5302 |
||
66 | #define APM_FUNC_32BIT_CONN 0x5303 |
||
67 | #define APM_FUNC_DISCONN 0x5304 |
||
68 | #define APM_FUNC_IDLE 0x5305 |
||
69 | #define APM_FUNC_BUSY 0x5306 |
||
70 | #define APM_FUNC_SET_STATE 0x5307 |
||
71 | #define APM_FUNC_ENABLE_PM 0x5308 |
||
72 | #define APM_FUNC_RESTORE_BIOS 0x5309 |
||
73 | #define APM_FUNC_GET_STATUS 0x530a |
||
74 | #define APM_FUNC_GET_EVENT 0x530b |
||
75 | #define APM_FUNC_GET_STATE 0x530c |
||
76 | #define APM_FUNC_ENABLE_DEV_PM 0x530d |
||
77 | #define APM_FUNC_VERSION 0x530e |
||
78 | #define APM_FUNC_ENGAGE_PM 0x530f |
||
79 | #define APM_FUNC_GET_CAP 0x5310 |
||
80 | #define APM_FUNC_RESUME_TIMER 0x5311 |
||
81 | #define APM_FUNC_RESUME_ON_RING 0x5312 |
||
82 | #define APM_FUNC_TIMER 0x5313 |
||
83 | |||
84 | /* |
||
85 | * Function code for APM_FUNC_RESUME_TIMER |
||
86 | */ |
||
87 | #define APM_FUNC_DISABLE_TIMER 0 |
||
88 | #define APM_FUNC_GET_TIMER 1 |
||
89 | #define APM_FUNC_SET_TIMER 2 |
||
90 | |||
91 | /* |
||
92 | * Function code for APM_FUNC_RESUME_ON_RING |
||
93 | */ |
||
94 | #define APM_FUNC_DISABLE_RING 0 |
||
95 | #define APM_FUNC_ENABLE_RING 1 |
||
96 | #define APM_FUNC_GET_RING 2 |
||
97 | |||
98 | /* |
||
99 | * Function code for APM_FUNC_TIMER_STATUS |
||
100 | */ |
||
101 | #define APM_FUNC_TIMER_DISABLE 0 |
||
102 | #define APM_FUNC_TIMER_ENABLE 1 |
||
103 | #define APM_FUNC_TIMER_GET 2 |
||
104 | |||
105 | /* |
||
106 | * in arch/i386/kernel/setup.c |
||
107 | */ |
||
108 | extern struct apm_info apm_info; |
||
109 | |||
110 | #endif /* __KERNEL__ */ |
||
111 | |||
112 | /* |
||
113 | * Power states |
||
114 | */ |
||
115 | #define APM_STATE_READY 0x0000 |
||
116 | #define APM_STATE_STANDBY 0x0001 |
||
117 | #define APM_STATE_SUSPEND 0x0002 |
||
118 | #define APM_STATE_OFF 0x0003 |
||
119 | #define APM_STATE_BUSY 0x0004 |
||
120 | #define APM_STATE_REJECT 0x0005 |
||
121 | #define APM_STATE_OEM_SYS 0x0020 |
||
122 | #define APM_STATE_OEM_DEV 0x0040 |
||
123 | |||
124 | #define APM_STATE_DISABLE 0x0000 |
||
125 | #define APM_STATE_ENABLE 0x0001 |
||
126 | |||
127 | #define APM_STATE_DISENGAGE 0x0000 |
||
128 | #define APM_STATE_ENGAGE 0x0001 |
||
129 | |||
130 | /* |
||
131 | * Events (results of Get PM Event) |
||
132 | */ |
||
133 | #define APM_SYS_STANDBY 0x0001 |
||
134 | #define APM_SYS_SUSPEND 0x0002 |
||
135 | #define APM_NORMAL_RESUME 0x0003 |
||
136 | #define APM_CRITICAL_RESUME 0x0004 |
||
137 | #define APM_LOW_BATTERY 0x0005 |
||
138 | #define APM_POWER_STATUS_CHANGE 0x0006 |
||
139 | #define APM_UPDATE_TIME 0x0007 |
||
140 | #define APM_CRITICAL_SUSPEND 0x0008 |
||
141 | #define APM_USER_STANDBY 0x0009 |
||
142 | #define APM_USER_SUSPEND 0x000a |
||
143 | #define APM_STANDBY_RESUME 0x000b |
||
144 | #define APM_CAPABILITY_CHANGE 0x000c |
||
145 | |||
146 | /* |
||
147 | * Error codes |
||
148 | */ |
||
149 | #define APM_SUCCESS 0x00 |
||
150 | #define APM_DISABLED 0x01 |
||
151 | #define APM_CONNECTED 0x02 |
||
152 | #define APM_NOT_CONNECTED 0x03 |
||
153 | #define APM_16_CONNECTED 0x05 |
||
154 | #define APM_16_UNSUPPORTED 0x06 |
||
155 | #define APM_32_CONNECTED 0x07 |
||
156 | #define APM_32_UNSUPPORTED 0x08 |
||
157 | #define APM_BAD_DEVICE 0x09 |
||
158 | #define APM_BAD_PARAM 0x0a |
||
159 | #define APM_NOT_ENGAGED 0x0b |
||
160 | #define APM_BAD_FUNCTION 0x0c |
||
161 | #define APM_RESUME_DISABLED 0x0d |
||
162 | #define APM_NO_ERROR 0x53 |
||
163 | #define APM_BAD_STATE 0x60 |
||
164 | #define APM_NO_EVENTS 0x80 |
||
165 | #define APM_NOT_PRESENT 0x86 |
||
166 | |||
167 | /* |
||
168 | * APM Device IDs |
||
169 | */ |
||
170 | #define APM_DEVICE_BIOS 0x0000 |
||
171 | #define APM_DEVICE_ALL 0x0001 |
||
172 | #define APM_DEVICE_DISPLAY 0x0100 |
||
173 | #define APM_DEVICE_STORAGE 0x0200 |
||
174 | #define APM_DEVICE_PARALLEL 0x0300 |
||
175 | #define APM_DEVICE_SERIAL 0x0400 |
||
176 | #define APM_DEVICE_NETWORK 0x0500 |
||
177 | #define APM_DEVICE_PCMCIA 0x0600 |
||
178 | #define APM_DEVICE_BATTERY 0x8000 |
||
179 | #define APM_DEVICE_OEM 0xe000 |
||
180 | #define APM_DEVICE_OLD_ALL 0xffff |
||
181 | #define APM_DEVICE_CLASS 0x00ff |
||
182 | #define APM_DEVICE_MASK 0xff00 |
||
183 | |||
184 | #ifdef __KERNEL__ |
||
185 | /* |
||
186 | * This is the "All Devices" ID communicated to the BIOS |
||
187 | */ |
||
188 | #define APM_DEVICE_BALL ((apm_info.connection_version > 0x0100) ? \ |
||
189 | APM_DEVICE_ALL : APM_DEVICE_OLD_ALL) |
||
190 | #endif |
||
191 | |||
192 | /* |
||
193 | * Battery status |
||
194 | */ |
||
195 | #define APM_MAX_BATTERIES 2 |
||
196 | |||
197 | /* |
||
198 | * APM defined capability bit flags |
||
199 | */ |
||
200 | #define APM_CAP_GLOBAL_STANDBY 0x0001 |
||
201 | #define APM_CAP_GLOBAL_SUSPEND 0x0002 |
||
202 | #define APM_CAP_RESUME_STANDBY_TIMER 0x0004 /* Timer resume from standby */ |
||
203 | #define APM_CAP_RESUME_SUSPEND_TIMER 0x0008 /* Timer resume from suspend */ |
||
204 | #define APM_CAP_RESUME_STANDBY_RING 0x0010 /* Resume on Ring fr standby */ |
||
205 | #define APM_CAP_RESUME_SUSPEND_RING 0x0020 /* Resume on Ring fr suspend */ |
||
206 | #define APM_CAP_RESUME_STANDBY_PCMCIA 0x0040 /* Resume on PCMCIA Ring */ |
||
207 | #define APM_CAP_RESUME_SUSPEND_PCMCIA 0x0080 /* Resume on PCMCIA Ring */ |
||
208 | |||
209 | /* |
||
210 | * ioctl operations |
||
211 | */ |
||
212 | #include <linux/ioctl.h> |
||
213 | |||
214 | #define APM_IOC_STANDBY _IO('A', 1) |
||
215 | #define APM_IOC_SUSPEND _IO('A', 2) |
||
216 | |||
217 | #endif /* LINUX_APM_H */ |