home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / acpi / acpi_bus.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  9.4 KB  |  363 lines

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