pm.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

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. };
  42. typedef int pm_request_t;
  43. /*
  44.  * Device types
  45.  */
  46. enum
  47. {
  48. PM_UNKNOWN_DEV = 0, /* generic */
  49. PM_SYS_DEV,     /* system device (fan, KB controller, ...) */
  50. PM_PCI_DEV,     /* PCI device */
  51. PM_USB_DEV,     /* USB device */
  52. PM_SCSI_DEV,     /* SCSI device */
  53. PM_ISA_DEV,     /* ISA device */
  54. PM_MTD_DEV,     /* Memory Technology Device */
  55. };
  56. typedef int pm_dev_t;
  57. /*
  58.  * System device hardware ID (PnP) values
  59.  */
  60. enum
  61. {
  62. PM_SYS_UNKNOWN = 0x00000000, /* generic */
  63. PM_SYS_KBC =  0x41d00303, /* keyboard controller */
  64. PM_SYS_COM =  0x41d00500, /* serial port */
  65. PM_SYS_IRDA =  0x41d00510, /* IRDA controller */
  66. PM_SYS_FDC =  0x41d00700, /* floppy controller */
  67. PM_SYS_VGA =  0x41d00900, /* VGA controller */
  68. PM_SYS_PCMCIA =  0x41d00e00, /* PCMCIA controller */
  69. };
  70. /*
  71.  * Device identifier
  72.  */
  73. #define PM_PCI_ID(dev) ((dev)->bus->number << 16 | (dev)->devfn)
  74. /*
  75.  * Request handler callback
  76.  */
  77. struct pm_dev;
  78. typedef int (*pm_callback)(struct pm_dev *dev, pm_request_t rqst, void *data);
  79. /*
  80.  * Dynamic device information
  81.  */
  82. struct pm_dev
  83. {
  84. pm_dev_t  type;
  85. unsigned long  id;
  86. pm_callback  callback;
  87. void *data;
  88. unsigned long  flags;
  89. unsigned long  state;
  90. unsigned long  prev_state;
  91. struct list_head entry;
  92. };
  93. #ifdef CONFIG_PM
  94. extern int pm_active;
  95. #define PM_IS_ACTIVE() (pm_active != 0)
  96. /*
  97.  * Register a device with power management
  98.  */
  99. struct pm_dev *pm_register(pm_dev_t type,
  100.    unsigned long id,
  101.    pm_callback callback);
  102. /*
  103.  * Unregister a device with power management
  104.  */
  105. void pm_unregister(struct pm_dev *dev);
  106. /*
  107.  * Unregister all devices with matching callback
  108.  */
  109. void pm_unregister_all(pm_callback callback);
  110. /*
  111.  * Send a request to a single device
  112.  */
  113. int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data);
  114. /*
  115.  * Send a request to all devices
  116.  */
  117. int pm_send_all(pm_request_t rqst, void *data);
  118. /*
  119.  * Find a device
  120.  */
  121. struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from);
  122. static inline void pm_access(struct pm_dev *dev) {}
  123. static inline void pm_dev_idle(struct pm_dev *dev) {}
  124. #else /* CONFIG_PM */
  125. #define PM_IS_ACTIVE() 0
  126. static inline struct pm_dev *pm_register(pm_dev_t type,
  127.  unsigned long id,
  128.  pm_callback callback)
  129. {
  130. return 0;
  131. }
  132. static inline void pm_unregister(struct pm_dev *dev) {}
  133. static inline void pm_unregister_all(pm_callback callback) {}
  134. static inline int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data)
  135. {
  136. return 0;
  137. }
  138. static inline int pm_send_all(pm_request_t rqst, void *data)
  139. {
  140. return 0;
  141. }
  142. static inline struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from)
  143. {
  144. return 0;
  145. }
  146. static inline void pm_access(struct pm_dev *dev) {}
  147. static inline void pm_dev_idle(struct pm_dev *dev) {}
  148. #endif /* CONFIG_PM */
  149. extern void (*pm_idle)(void);
  150. extern void (*pm_power_off)(void);
  151. #endif /* __KERNEL__ */
  152. #endif /* _LINUX_PM_H */