source: trunk/packages/xen-3.1/xen-3.1/xen/include/acpi/acpi_bus.h @ 34

Last change on this file since 34 was 34, checked in by hartmans, 17 years ago

Add xen and xen-common

File size: 8.7 KB
Line 
1/*
2 *  acpi_bus.h - ACPI Bus Driver ($Revision: 22 $)
3 *
4 *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6 *
7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 *
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.
13 *
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.
18 *
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.
22 *
23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 */
25
26#ifndef __ACPI_BUS_H__
27#define __ACPI_BUS_H__
28
29#include <acpi/acpi.h>
30
31#define PREFIX                  "ACPI: "
32
33/* TBD: Make dynamic */
34#define ACPI_MAX_HANDLES        10
35struct acpi_handle_list {
36        u32                     count;
37        acpi_handle             handles[ACPI_MAX_HANDLES];
38};
39
40
41/* acpi_utils.h */
42acpi_status
43acpi_extract_package (
44        union acpi_object       *package,
45        struct acpi_buffer      *format,
46        struct acpi_buffer      *buffer);
47acpi_status
48acpi_evaluate_integer (
49        acpi_handle             handle,
50        acpi_string             pathname,
51        struct acpi_object_list *arguments,
52        unsigned long           *data);
53acpi_status
54acpi_evaluate_reference (
55        acpi_handle             handle,
56        acpi_string             pathname,
57        struct acpi_object_list *arguments,
58        struct acpi_handle_list *list);
59
60
61#ifdef CONFIG_ACPI_BUS
62
63#include <linux/proc_fs.h>
64
65#define ACPI_BUS_FILE_ROOT      "acpi"
66extern struct proc_dir_entry    *acpi_root_dir;
67extern FADT_DESCRIPTOR          acpi_fadt;
68
69enum acpi_bus_removal_type {
70        ACPI_BUS_REMOVAL_NORMAL = 0,
71        ACPI_BUS_REMOVAL_EJECT,
72        ACPI_BUS_REMOVAL_SUPRISE,
73        ACPI_BUS_REMOVAL_TYPE_COUNT
74};
75
76enum acpi_bus_device_type {
77        ACPI_BUS_TYPE_DEVICE    = 0,
78        ACPI_BUS_TYPE_POWER,
79        ACPI_BUS_TYPE_PROCESSOR,
80        ACPI_BUS_TYPE_THERMAL,
81        ACPI_BUS_TYPE_SYSTEM,
82        ACPI_BUS_TYPE_POWER_BUTTON,
83        ACPI_BUS_TYPE_SLEEP_BUTTON,
84        ACPI_BUS_DEVICE_TYPE_COUNT
85};
86
87struct acpi_driver;
88struct acpi_device;
89
90
91/*
92 * ACPI Driver
93 * -----------
94 */
95
96typedef int (*acpi_op_add)      (struct acpi_device *device);
97typedef int (*acpi_op_remove)   (struct acpi_device *device, int type);
98typedef int (*acpi_op_lock)     (struct acpi_device *device, int type);
99typedef int (*acpi_op_start)    (struct acpi_device *device);
100typedef int (*acpi_op_stop)     (struct acpi_device *device, int type);
101typedef int (*acpi_op_suspend)  (struct acpi_device *device, int state);
102typedef int (*acpi_op_resume)   (struct acpi_device *device, int state);
103typedef int (*acpi_op_scan)     (struct acpi_device *device);
104typedef int (*acpi_op_bind)     (struct acpi_device *device);
105typedef int (*acpi_op_unbind)   (struct acpi_device *device);
106typedef int (*acpi_op_match)    (struct acpi_device *device,
107                                 struct acpi_driver *driver);
108
109struct acpi_device_ops {
110        acpi_op_add             add;
111        acpi_op_remove          remove;
112        acpi_op_lock            lock;
113        acpi_op_start           start;
114        acpi_op_stop            stop;
115        acpi_op_suspend         suspend;
116        acpi_op_resume          resume;
117        acpi_op_scan            scan;
118        acpi_op_bind            bind;
119        acpi_op_unbind          unbind;
120        acpi_op_match           match;
121};
122
123struct acpi_driver {
124        struct list_head        node;
125        char                    name[80];
126        char                    class[80];
127        atomic_t                references;
128        char                    *ids;           /* Supported Hardware IDs */
129        struct acpi_device_ops  ops;
130};
131
132/*
133 * ACPI Device
134 * -----------
135 */
136
137/* Status (_STA) */
138
139struct acpi_device_status {
140        u32                     present:1;
141        u32                     enabled:1;
142        u32                     show_in_ui:1;
143        u32                     functional:1;
144        u32                     battery_present:1;
145        u32                     reserved:27;
146};
147
148
149/* Flags */
150
151struct acpi_device_flags {
152        u32                     dynamic_status:1;
153        u32                     hardware_id:1;
154        u32                     compatible_ids:1;
155        u32                     bus_address:1;
156        u32                     unique_id:1;
157        u32                     removable:1;
158        u32                     ejectable:1;
159        u32                     lockable:1;
160        u32                     suprise_removal_ok:1;
161        u32                     power_manageable:1;
162        u32                     performance_manageable:1;
163        u32                     wake_capable:1; /* Wakeup(_PRW) supported? */
164        u32                     reserved:20;
165};
166
167
168/* File System */
169
170struct acpi_device_dir {
171        struct proc_dir_entry   *entry;
172};
173
174#define acpi_device_dir(d)      ((d)->dir.entry)
175
176
177/* Plug and Play */
178
179typedef char                    acpi_bus_id[5];
180typedef unsigned long           acpi_bus_address;
181typedef char                    acpi_hardware_id[9];
182typedef char                    acpi_unique_id[9];
183typedef char                    acpi_device_name[40];
184typedef char                    acpi_device_class[20];
185
186struct acpi_device_pnp {
187        acpi_bus_id             bus_id;                        /* Object name */
188        acpi_bus_address        bus_address;                          /* _ADR */
189        acpi_hardware_id        hardware_id;                          /* _HID */
190        struct acpi_compatible_id_list *cid_list;                    /* _CIDs */
191        acpi_unique_id          unique_id;                            /* _UID */
192        acpi_device_name        device_name;             /* Driver-determined */
193        acpi_device_class       device_class;            /*        "          */
194};
195
196#define acpi_device_bid(d)      ((d)->pnp.bus_id)
197#define acpi_device_adr(d)      ((d)->pnp.bus_address)
198#define acpi_device_hid(d)      ((d)->pnp.hardware_id)
199#define acpi_device_uid(d)      ((d)->pnp.unique_id)
200#define acpi_device_name(d)     ((d)->pnp.device_name)
201#define acpi_device_class(d)    ((d)->pnp.device_class)
202
203
204/* Power Management */
205
206struct acpi_device_power_flags {
207        u32                     explicit_get:1;              /* _PSC present? */
208        u32                     power_resources:1;         /* Power resources */
209        u32                     inrush_current:1;         /* Serialize Dx->D0 */
210        u32                     power_removed:1;           /* Optimize Dx->D0 */
211        u32                     reserved:28;
212};
213
214struct acpi_device_power_state {
215        struct {
216                u8                      valid:1;       
217                u8                      explicit_set:1;      /* _PSx present? */
218                u8                      reserved:6;
219        }                       flags;
220        int                     power;            /* % Power (compared to D0) */
221        int                     latency;        /* Dx->D0 time (microseconds) */
222        struct acpi_handle_list resources;      /* Power resources referenced */
223};
224
225struct acpi_device_power {
226        int                     state;                       /* Current state */
227        struct acpi_device_power_flags flags;
228        struct acpi_device_power_state states[4];     /* Power states (D0-D3) */
229};
230
231
232/* Performance Management */
233
234struct acpi_device_perf_flags {
235        u8                      reserved:8;
236};
237
238struct acpi_device_perf_state {
239        struct {
240                u8                      valid:1;       
241                u8                      reserved:7;
242        }                       flags;
243        u8                      power;            /* % Power (compared to P0) */
244        u8                      performance;      /* % Performance (    "   ) */
245        int                     latency;        /* Px->P0 time (microseconds) */
246};
247
248struct acpi_device_perf {
249        int                     state;
250        struct acpi_device_perf_flags flags;
251        int                     state_count;
252        struct acpi_device_perf_state *states;
253};
254
255/* Wakeup Management */
256struct acpi_device_wakeup_flags {
257        u8      valid:1; /* Can successfully enable wakeup? */
258        u8      run_wake:1; /* Run-Wake GPE devices */
259};
260
261struct acpi_device_wakeup_state {
262        u8      enabled:1;
263        u8      active:1;
264};
265
266struct acpi_device_wakeup {
267        acpi_handle             gpe_device;
268        acpi_integer            gpe_number;;
269        acpi_integer            sleep_state;
270        struct acpi_handle_list resources;
271        struct acpi_device_wakeup_state state;
272        struct acpi_device_wakeup_flags flags;
273};
274
275/* Device */
276
277struct acpi_device {
278        acpi_handle             handle;
279        struct acpi_device      *parent;
280        struct list_head        children;
281        struct list_head        node;
282        struct list_head        wakeup_list;
283        struct list_head        g_list;
284        struct acpi_device_status status;
285        struct acpi_device_flags flags;
286        struct acpi_device_pnp  pnp;
287        struct acpi_device_power power;
288        struct acpi_device_wakeup wakeup;
289        struct acpi_device_perf performance;
290        struct acpi_device_dir  dir;
291        struct acpi_device_ops  ops;
292        struct acpi_driver      *driver;
293        void                    *driver_data;
294        struct kobject          kobj;
295};
296
297#define acpi_driver_data(d)     ((d)->driver_data)
298
299
300/*
301 * Events
302 * ------
303 */
304
305struct acpi_bus_event {
306        struct list_head        node;
307        acpi_device_class       device_class;
308        acpi_bus_id             bus_id;
309        u32                     type;
310        u32                     data;
311};
312
313extern struct subsystem acpi_subsys;
314
315/*
316 * External Functions
317 */
318
319int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device);
320void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
321int acpi_bus_get_status (struct acpi_device *device);
322int acpi_bus_get_power (acpi_handle handle, int *state);
323int acpi_bus_set_power (acpi_handle handle, int state);
324int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
325int acpi_bus_receive_event (struct acpi_bus_event *event);
326int acpi_bus_register_driver (struct acpi_driver *driver);
327int acpi_bus_unregister_driver (struct acpi_driver *driver);
328int acpi_bus_scan (struct acpi_device *start);
329int acpi_bus_trim(struct acpi_device *start, int rmdevice);
330int acpi_bus_add (struct acpi_device **child, struct acpi_device *parent,
331                acpi_handle handle, int type);
332
333
334int acpi_match_ids (struct acpi_device  *device, char   *ids);
335int acpi_create_dir(struct acpi_device *);
336void acpi_remove_dir(struct acpi_device *);
337
338#endif /*CONFIG_ACPI_BUS*/
339
340#endif /*__ACPI_BUS_H__*/
Note: See TracBrowser for help on using the repository browser.