Blame view
include/linux/cpuidle.h
5.28 KB
4f86d3a8e cpuidle: consolid... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* * cpuidle.h - a generic framework for CPU idle power management * * (C) 2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> * Shaohua Li <shaohua.li@intel.com> * Adam Belay <abelay@novell.com> * * This code is licenced under the GPL. */ #ifndef _LINUX_CPUIDLE_H #define _LINUX_CPUIDLE_H #include <linux/percpu.h> #include <linux/list.h> |
4f86d3a8e cpuidle: consolid... |
16 17 18 19 20 |
#include <linux/kobject.h> #include <linux/completion.h> #define CPUIDLE_STATE_MAX 8 #define CPUIDLE_NAME_LEN 16 |
4fcb2fcd4 ACPI, cpuidle: Cl... |
21 |
#define CPUIDLE_DESC_LEN 32 |
4f86d3a8e cpuidle: consolid... |
22 |
|
de4772542 include: replace ... |
23 |
struct module; |
4f86d3a8e cpuidle: consolid... |
24 |
struct cpuidle_device; |
46bcfad7a cpuidle: Single/G... |
25 |
struct cpuidle_driver; |
4f86d3a8e cpuidle: consolid... |
26 27 28 29 30 |
/**************************** * CPUIDLE DEVICE INTERFACE * ****************************/ |
4202735e8 cpuidle: Split cp... |
31 32 33 34 35 36 |
struct cpuidle_state_usage { void *driver_data; unsigned long long usage; unsigned long long time; /* in US */ }; |
4f86d3a8e cpuidle: consolid... |
37 38 |
struct cpuidle_state { char name[CPUIDLE_NAME_LEN]; |
4fcb2fcd4 ACPI, cpuidle: Cl... |
39 |
char desc[CPUIDLE_DESC_LEN]; |
4f86d3a8e cpuidle: consolid... |
40 41 42 43 44 |
unsigned int flags; unsigned int exit_latency; /* in US */ unsigned int power_usage; /* in mW */ unsigned int target_residency; /* in US */ |
4f86d3a8e cpuidle: consolid... |
45 |
int (*enter) (struct cpuidle_device *dev, |
46bcfad7a cpuidle: Single/G... |
46 |
struct cpuidle_driver *drv, |
e978aa7d7 cpuidle: Move dev... |
47 |
int index); |
4f86d3a8e cpuidle: consolid... |
48 49 50 51 |
}; /* Idle State Flags */ #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ |
4f86d3a8e cpuidle: consolid... |
52 53 54 55 56 |
#define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) /** * cpuidle_get_statedata - retrieves private driver state data |
4202735e8 cpuidle: Split cp... |
57 |
* @st_usage: the state usage statistics |
4f86d3a8e cpuidle: consolid... |
58 |
*/ |
4202735e8 cpuidle: Split cp... |
59 |
static inline void *cpuidle_get_statedata(struct cpuidle_state_usage *st_usage) |
4f86d3a8e cpuidle: consolid... |
60 |
{ |
4202735e8 cpuidle: Split cp... |
61 |
return st_usage->driver_data; |
4f86d3a8e cpuidle: consolid... |
62 63 64 65 |
} /** * cpuidle_set_statedata - stores private driver state data |
4202735e8 cpuidle: Split cp... |
66 |
* @st_usage: the state usage statistics |
4f86d3a8e cpuidle: consolid... |
67 68 69 |
* @data: the private data */ static inline void |
4202735e8 cpuidle: Split cp... |
70 |
cpuidle_set_statedata(struct cpuidle_state_usage *st_usage, void *data) |
4f86d3a8e cpuidle: consolid... |
71 |
{ |
4202735e8 cpuidle: Split cp... |
72 |
st_usage->driver_data = data; |
4f86d3a8e cpuidle: consolid... |
73 74 75 76 |
} struct cpuidle_state_kobj { struct cpuidle_state *state; |
4202735e8 cpuidle: Split cp... |
77 |
struct cpuidle_state_usage *state_usage; |
4f86d3a8e cpuidle: consolid... |
78 79 80 81 82 |
struct completion kobj_unregister; struct kobject kobj; }; struct cpuidle_device { |
dcb84f335 cpuidle acpi driv... |
83 |
unsigned int registered:1; |
b5556a67f cpuidle: dubious ... |
84 |
unsigned int enabled:1; |
4f86d3a8e cpuidle: consolid... |
85 86 87 88 |
unsigned int cpu; int last_residency; int state_count; |
4202735e8 cpuidle: Split cp... |
89 |
struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX]; |
4f86d3a8e cpuidle: consolid... |
90 |
struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; |
4f86d3a8e cpuidle: consolid... |
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
struct list_head device_list; struct kobject kobj; struct completion kobj_unregister; void *governor_data; }; DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); /** * cpuidle_get_last_residency - retrieves the last state's residency time * @dev: the target CPU * * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_VALID isn't set */ static inline int cpuidle_get_last_residency(struct cpuidle_device *dev) { return dev->last_residency; } /**************************** * CPUIDLE DRIVER INTERFACE * ****************************/ struct cpuidle_driver { char name[CPUIDLE_NAME_LEN]; struct module *owner; |
46bcfad7a cpuidle: Single/G... |
119 120 121 122 123 |
unsigned int power_specified:1; struct cpuidle_state states[CPUIDLE_STATE_MAX]; int state_count; int safe_state_index; |
4f86d3a8e cpuidle: consolid... |
124 125 126 |
}; #ifdef CONFIG_CPU_IDLE |
d91ee5863 cpuidle: replace ... |
127 |
extern void disable_cpuidle(void); |
a0bfa1373 cpuidle: stop dep... |
128 |
extern int cpuidle_idle_call(void); |
4f86d3a8e cpuidle: consolid... |
129 |
extern int cpuidle_register_driver(struct cpuidle_driver *drv); |
752138df0 cpuidle: make cpu... |
130 |
struct cpuidle_driver *cpuidle_get_driver(void); |
4f86d3a8e cpuidle: consolid... |
131 132 133 134 135 136 137 138 139 140 |
extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); extern int cpuidle_register_device(struct cpuidle_device *dev); extern void cpuidle_unregister_device(struct cpuidle_device *dev); extern void cpuidle_pause_and_lock(void); extern void cpuidle_resume_and_unlock(void); extern int cpuidle_enable_device(struct cpuidle_device *dev); extern void cpuidle_disable_device(struct cpuidle_device *dev); #else |
d91ee5863 cpuidle: replace ... |
141 |
static inline void disable_cpuidle(void) { } |
a0bfa1373 cpuidle: stop dep... |
142 |
static inline int cpuidle_idle_call(void) { return -ENODEV; } |
4f86d3a8e cpuidle: consolid... |
143 |
static inline int cpuidle_register_driver(struct cpuidle_driver *drv) |
6b2c676bf cpuidle: fail to ... |
144 |
{return -ENODEV; } |
752138df0 cpuidle: make cpu... |
145 |
static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; } |
4f86d3a8e cpuidle: consolid... |
146 147 |
static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } static inline int cpuidle_register_device(struct cpuidle_device *dev) |
6b2c676bf cpuidle: fail to ... |
148 |
{return -ENODEV; } |
4f86d3a8e cpuidle: consolid... |
149 150 151 152 153 |
static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { } static inline void cpuidle_pause_and_lock(void) { } static inline void cpuidle_resume_and_unlock(void) { } static inline int cpuidle_enable_device(struct cpuidle_device *dev) |
6b2c676bf cpuidle: fail to ... |
154 |
{return -ENODEV; } |
4f86d3a8e cpuidle: consolid... |
155 156 157 158 159 160 161 162 163 164 165 166 |
static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } #endif /****************************** * CPUIDLE GOVERNOR INTERFACE * ******************************/ struct cpuidle_governor { char name[CPUIDLE_NAME_LEN]; struct list_head governor_list; unsigned int rating; |
46bcfad7a cpuidle: Single/G... |
167 168 169 170 |
int (*enable) (struct cpuidle_driver *drv, struct cpuidle_device *dev); void (*disable) (struct cpuidle_driver *drv, struct cpuidle_device *dev); |
4f86d3a8e cpuidle: consolid... |
171 |
|
46bcfad7a cpuidle: Single/G... |
172 173 |
int (*select) (struct cpuidle_driver *drv, struct cpuidle_device *dev); |
e978aa7d7 cpuidle: Move dev... |
174 |
void (*reflect) (struct cpuidle_device *dev, int index); |
4f86d3a8e cpuidle: consolid... |
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
struct module *owner; }; #ifdef CONFIG_CPU_IDLE extern int cpuidle_register_governor(struct cpuidle_governor *gov); extern void cpuidle_unregister_governor(struct cpuidle_governor *gov); #else static inline int cpuidle_register_governor(struct cpuidle_governor *gov) {return 0;} static inline void cpuidle_unregister_governor(struct cpuidle_governor *gov) { } #endif |
9a0b84158 cpuidle: Add a po... |
191 192 193 194 195 |
#ifdef CONFIG_ARCH_HAS_CPU_RELAX #define CPUIDLE_DRIVER_STATE_START 1 #else #define CPUIDLE_DRIVER_STATE_START 0 #endif |
4f86d3a8e cpuidle: consolid... |
196 |
#endif /* _LINUX_CPUIDLE_H */ |