2 * acpi_bus.h - ACPI Bus Driver ($Revision: 22 $)
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or (at
12 * your option) any later version.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 #ifndef __ACPI_BUS_H__
27 #define __ACPI_BUS_H__
29 #include <linux/version.h>
31 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,4))
32 #include <linux/device.h>
36 #include <acpi/acpi.h>
38 /* TBD: Make dynamic */
39 #define ACPI_MAX_HANDLES 10
40 struct acpi_handle_list {
42 acpi_handle handles[ACPI_MAX_HANDLES];
48 acpi_extract_package (
49 union acpi_object *package,
50 struct acpi_buffer *format,
51 struct acpi_buffer *buffer);
53 acpi_evaluate_integer (
56 struct acpi_object_list *arguments,
59 acpi_evaluate_reference (
62 struct acpi_object_list *arguments,
63 struct acpi_handle_list *list);
66 #ifdef CONFIG_ACPI_BUS
68 #include <linux/proc_fs.h>
70 #define ACPI_BUS_FILE_ROOT "acpi"
71 extern struct proc_dir_entry *acpi_root_dir;
72 extern FADT_DESCRIPTOR acpi_fadt;
74 enum acpi_bus_removal_type {
75 ACPI_BUS_REMOVAL_NORMAL = 0,
76 ACPI_BUS_REMOVAL_EJECT,
77 ACPI_BUS_REMOVAL_SUPRISE,
78 ACPI_BUS_REMOVAL_TYPE_COUNT
81 enum acpi_bus_device_type {
82 ACPI_BUS_TYPE_DEVICE = 0,
84 ACPI_BUS_TYPE_PROCESSOR,
85 ACPI_BUS_TYPE_THERMAL,
87 ACPI_BUS_TYPE_POWER_BUTTON,
88 ACPI_BUS_TYPE_SLEEP_BUTTON,
89 ACPI_BUS_DEVICE_TYPE_COUNT
101 typedef int (*acpi_op_add) (struct acpi_device *device);
102 typedef int (*acpi_op_remove) (struct acpi_device *device, int type);
103 typedef int (*acpi_op_lock) (struct acpi_device *device, int type);
104 typedef int (*acpi_op_start) (struct acpi_device *device);
105 typedef int (*acpi_op_stop) (struct acpi_device *device, int type);
106 typedef int (*acpi_op_suspend) (struct acpi_device *device, int state);
107 typedef int (*acpi_op_resume) (struct acpi_device *device, int state);
108 typedef int (*acpi_op_scan) (struct acpi_device *device);
109 typedef int (*acpi_op_bind) (struct acpi_device *device);
111 struct acpi_device_ops {
113 acpi_op_remove remove;
117 acpi_op_suspend suspend;
118 acpi_op_resume resume;
124 struct list_head node;
128 char *ids; /* Supported Hardware IDs */
129 struct acpi_device_ops ops;
139 struct acpi_device_status {
144 u32 battery_present:1;
151 struct acpi_device_flags {
152 u32 dynamic_status:1;
154 u32 compatible_ids:1;
160 u32 suprise_removal_ok:1;
161 u32 power_manageable:1;
162 u32 performance_manageable:1;
169 struct acpi_device_dir {
170 struct proc_dir_entry *entry;
173 #define acpi_device_dir(d) ((d)->dir.entry)
178 typedef char acpi_bus_id[5];
179 typedef unsigned long acpi_bus_address;
180 typedef char acpi_hardware_id[9];
181 typedef char acpi_unique_id[9];
182 typedef char acpi_device_name[40];
183 typedef char acpi_device_class[20];
185 struct acpi_device_pnp {
186 acpi_bus_id bus_id; /* Object name */
187 acpi_bus_address bus_address; /* _ADR */
188 acpi_hardware_id hardware_id; /* _HID */
189 struct acpi_compatible_id_list *cid_list; /* _CIDs */
190 acpi_unique_id unique_id; /* _UID */
191 acpi_device_name device_name; /* Driver-determined */
192 acpi_device_class device_class; /* " */
195 #define acpi_device_bid(d) ((d)->pnp.bus_id)
196 #define acpi_device_adr(d) ((d)->pnp.bus_address)
197 #define acpi_device_hid(d) ((d)->pnp.hardware_id)
198 #define acpi_device_uid(d) ((d)->pnp.unique_id)
199 #define acpi_device_name(d) ((d)->pnp.device_name)
200 #define acpi_device_class(d) ((d)->pnp.device_class)
203 /* Power Management */
205 struct acpi_device_power_flags {
206 u32 explicit_get:1; /* _PSC present? */
207 u32 power_resources:1; /* Power resources */
208 u32 inrush_current:1; /* Serialize Dx->D0 */
209 u32 wake_capable:1; /* Wakeup supported? */
210 u32 wake_enabled:1; /* Enabled for wakeup */
211 u32 power_removed:1; /* Optimize Dx->D0 */
215 struct acpi_device_power_state {
218 u8 explicit_set:1; /* _PSx present? */
221 int power; /* % Power (compared to D0) */
222 int latency; /* Dx->D0 time (microseconds) */
223 struct acpi_handle_list resources; /* Power resources referenced */
226 struct acpi_device_power {
227 int state; /* Current state */
228 struct acpi_device_power_flags flags;
229 struct acpi_device_power_state states[4]; /* Power states (D0-D3) */
233 /* Performance Management */
235 struct acpi_device_perf_flags {
239 struct acpi_device_perf_state {
244 u8 power; /* % Power (compared to P0) */
245 u8 performance; /* % Performance ( " ) */
246 int latency; /* Px->P0 time (microseconds) */
249 struct acpi_device_perf {
251 struct acpi_device_perf_flags flags;
253 struct acpi_device_perf_state *states;
261 struct acpi_device *parent;
262 struct list_head children;
263 struct list_head node;
264 struct acpi_device_status status;
265 struct acpi_device_flags flags;
266 struct acpi_device_pnp pnp;
267 struct acpi_device_power power;
268 struct acpi_device_perf performance;
269 struct acpi_device_dir dir;
270 struct acpi_device_ops ops;
271 struct acpi_driver *driver;
278 #define acpi_driver_data(d) ((d)->driver_data)
286 struct acpi_bus_event {
287 struct list_head node;
288 acpi_device_class device_class;
299 int acpi_bus_get_device(acpi_handle, struct acpi_device **device);
300 int acpi_bus_get_status (struct acpi_device *device);
301 int acpi_bus_get_power (acpi_handle handle, int *state);
302 int acpi_bus_set_power (acpi_handle handle, int state);
303 int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
304 int acpi_bus_receive_event (struct acpi_bus_event *event);
305 int acpi_bus_register_driver (struct acpi_driver *driver);
306 int acpi_bus_unregister_driver (struct acpi_driver *driver);
307 int acpi_bus_scan (struct acpi_device *device);
308 int acpi_init (void);
309 void acpi_exit (void);
312 #endif /*CONFIG_ACPI_BUS*/
314 #endif /*__ACPI_BUS_H__*/