pm.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  pm.h - Power management interface
  3.  *
  4.  *  Copyright (C) 2000 Andrew Henroid
  5.  *
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20. #ifndef _LINUX_PM_H
  21. #define _LINUX_PM_H
  22. #ifdef __KERNEL__
  23. #include <linux/config.h>
  24. #include <linux/list.h>
  25. /*
  26.  * Power management requests
  27.  */
  28. enum
  29. {
  30. PM_SUSPEND, /* enter D1-D3 */
  31. PM_RESUME,  /* enter D0 */
  32. PM_SAVE_STATE,  /* save device's state */
  33. /* enable wake-on */
  34. PM_SET_WAKEUP,
  35. /* bus resource management */
  36. PM_GET_RESOURCES,
  37. PM_SET_RESOURCES,
  38. /* base station management */
  39. PM_EJECT,
  40. PM_LOCK,
  41. #ifdef CONFIG_MIZI
  42. /* initialization */
  43. PM_MZ_INIT,
  44. PM_MZ_EXIT,
  45. #endif
  46. };
  47. typedef int pm_request_t;
  48. /*
  49.  * Device types
  50.  */
  51. enum
  52. {
  53. PM_UNKNOWN_DEV = 0, /* generic */
  54. PM_SYS_DEV,     /* system device (fan, KB controller, ...) */
  55. PM_PCI_DEV,     /* PCI device */
  56. PM_USB_DEV,     /* USB device */
  57. PM_SCSI_DEV,     /* SCSI device */
  58. PM_ISA_DEV,     /* ISA device */
  59. PM_MTD_DEV,     /* Memory Technology Device */
  60. PM_ILLUMINATION_DEV, /* Display back or front light */
  61. #ifdef CONFIG_MIZI
  62. PM_USER_DEV,     /* when wakeup, user must be handle this */
  63. PM_DEBUG_DEV,     /* for DEBUGGING purpose */
  64. PM_GP_DEV,     /* for OS switching */
  65. #endif
  66. };
  67. typedef int pm_dev_t;
  68. /*
  69.  * System device hardware ID (PnP) values
  70.  */
  71. enum
  72. {
  73. PM_SYS_UNKNOWN = 0x00000000, /* generic */
  74. PM_SYS_KBC =  0x41d00303, /* keyboard controller */
  75. PM_SYS_COM =  0x41d00500, /* serial port */
  76. PM_SYS_IRDA =  0x41d00510, /* IRDA controller */
  77. PM_SYS_FDC =  0x41d00700, /* floppy controller */
  78. PM_SYS_VGA =  0x41d00900, /* VGA controller */
  79. PM_SYS_PCMCIA =  0x41d00e00, /* PCMCIA controller */
  80. #ifdef CONFIG_MIZI
  81. /* new ID */
  82. PM_USER_LCD =    0x12340100, /* LCD */
  83. PM_USER_LIGHT =  0x12340101, /* Front/Back Light */
  84. PM_USER_INPUT =  0x12340200, /* INPUT device */
  85. PM_DEBUG_0 =     0x12380100,
  86. PM_DEBUG_1 =     0x12380101,
  87. PM_DEBUG_2 =     0x12380102,
  88. PM_SYS_MISC =    0x41d00b00,
  89. #endif
  90. };
  91. /*
  92.  * Device identifier
  93.  */
  94. #define PM_PCI_ID(dev) ((dev)->bus->number << 16 | (dev)->devfn)
  95. /*
  96.  * Request handler callback
  97.  */
  98. struct pm_dev;
  99. typedef int (*pm_callback)(struct pm_dev *dev, pm_request_t rqst, void *data);
  100. /*
  101.  * Dynamic device information
  102.  */
  103. struct pm_dev
  104. {
  105. pm_dev_t  type;
  106. unsigned long  id;
  107. pm_callback  callback;
  108. void *data;
  109. unsigned long  flags;
  110. int  state;
  111. int  prev_state;
  112. struct list_head entry;
  113. };
  114. #ifdef CONFIG_PM
  115. extern int pm_active;
  116. #define PM_IS_ACTIVE() (pm_active != 0)
  117. /*
  118.  * Register a device with power management
  119.  */
  120. struct pm_dev *pm_register(pm_dev_t type,
  121.    unsigned long id,
  122.    pm_callback callback);
  123. /*
  124.  * Unregister a device with power management
  125.  */
  126. void pm_unregister(struct pm_dev *dev);
  127. /*
  128.  * Unregister all devices with matching callback
  129.  */
  130. void pm_unregister_all(pm_callback callback);
  131. /*
  132.  * Send a request to a single device
  133.  */
  134. int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data);
  135. /*
  136.  * Send a request to all devices
  137.  */
  138. int pm_send_all(pm_request_t rqst, void *data);
  139. /*
  140.  * Find a device
  141.  */
  142. struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from);
  143. #ifdef CONFIG_MIZI
  144. #include <linux/sched.h>
  145. extern unsigned long pm_last_jiffies;
  146. static inline void pm_access(struct pm_dev *dev) { 
  147. pm_last_jiffies = jiffies;
  148. }
  149. #else
  150. static inline void pm_access(struct pm_dev *dev) {}
  151. #endif
  152. static inline void pm_dev_idle(struct pm_dev *dev) {}
  153. #else /* CONFIG_PM */
  154. #define PM_IS_ACTIVE() 0
  155. static inline struct pm_dev *pm_register(pm_dev_t type,
  156.  unsigned long id,
  157.  pm_callback callback)
  158. {
  159. return 0;
  160. }
  161. static inline void pm_unregister(struct pm_dev *dev) {}
  162. static inline void pm_unregister_all(pm_callback callback) {}
  163. static inline int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data)
  164. {
  165. return 0;
  166. }
  167. static inline int pm_send_all(pm_request_t rqst, void *data)
  168. {
  169. return 0;
  170. }
  171. static inline struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from)
  172. {
  173. return 0;
  174. }
  175. static inline void pm_access(struct pm_dev *dev) {}
  176. static inline void pm_dev_idle(struct pm_dev *dev) {}
  177. #endif /* CONFIG_PM */
  178. extern void (*pm_idle)(void);
  179. extern void (*pm_power_off)(void);
  180. #endif /* __KERNEL__ */
  181. #endif /* _LINUX_PM_H */