diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:13:52 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:13:52 -0500 |
| commit | 3c00303206c3a1ccd86579efdc90bc35f140962e (patch) | |
| tree | 66170c84b5ddaeb102aea3530517a26657b6ea29 /include/linux | |
| parent | 83dbb15e9cd78a3619e3db36777e2f81d09b2914 (diff) | |
| parent | efb90582c575084723cc14302c1300cb26c7e01f (diff) | |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux:
cpuidle: Single/Global registration of idle states
cpuidle: Split cpuidle_state structure and move per-cpu statistics fields
cpuidle: Remove CPUIDLE_FLAG_IGNORE and dev->prepare()
cpuidle: Move dev->last_residency update to driver enter routine; remove dev->last_state
ACPI: Fix CONFIG_ACPI_DOCK=n compiler warning
ACPI: Export FADT pm_profile integer value to userspace
thermal: Prevent polling from happening during system suspend
ACPI: Drop ACPI_NO_HARDWARE_INIT
ACPI atomicio: Convert width in bits to bytes in __acpi_ioremap_fast()
PNPACPI: Simplify disabled resource registration
ACPI: Fix possible recursive locking in hwregs.c
ACPI: use kstrdup()
mrst pmu: update comment
tools/power turbostat: less verbose debugging
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/cpuidle.h | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 583baf22cad2..7408af843b8a 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -23,57 +23,62 @@ | |||
| 23 | struct module; | 23 | struct module; |
| 24 | 24 | ||
| 25 | struct cpuidle_device; | 25 | struct cpuidle_device; |
| 26 | struct cpuidle_driver; | ||
| 26 | 27 | ||
| 27 | 28 | ||
| 28 | /**************************** | 29 | /**************************** |
| 29 | * CPUIDLE DEVICE INTERFACE * | 30 | * CPUIDLE DEVICE INTERFACE * |
| 30 | ****************************/ | 31 | ****************************/ |
| 31 | 32 | ||
| 33 | struct cpuidle_state_usage { | ||
| 34 | void *driver_data; | ||
| 35 | |||
| 36 | unsigned long long usage; | ||
| 37 | unsigned long long time; /* in US */ | ||
| 38 | }; | ||
| 39 | |||
| 32 | struct cpuidle_state { | 40 | struct cpuidle_state { |
| 33 | char name[CPUIDLE_NAME_LEN]; | 41 | char name[CPUIDLE_NAME_LEN]; |
| 34 | char desc[CPUIDLE_DESC_LEN]; | 42 | char desc[CPUIDLE_DESC_LEN]; |
| 35 | void *driver_data; | ||
| 36 | 43 | ||
| 37 | unsigned int flags; | 44 | unsigned int flags; |
| 38 | unsigned int exit_latency; /* in US */ | 45 | unsigned int exit_latency; /* in US */ |
| 39 | unsigned int power_usage; /* in mW */ | 46 | unsigned int power_usage; /* in mW */ |
| 40 | unsigned int target_residency; /* in US */ | 47 | unsigned int target_residency; /* in US */ |
| 41 | 48 | ||
| 42 | unsigned long long usage; | ||
| 43 | unsigned long long time; /* in US */ | ||
| 44 | |||
| 45 | int (*enter) (struct cpuidle_device *dev, | 49 | int (*enter) (struct cpuidle_device *dev, |
| 46 | struct cpuidle_state *state); | 50 | struct cpuidle_driver *drv, |
| 51 | int index); | ||
| 47 | }; | 52 | }; |
| 48 | 53 | ||
| 49 | /* Idle State Flags */ | 54 | /* Idle State Flags */ |
| 50 | #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ | 55 | #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ |
| 51 | #define CPUIDLE_FLAG_IGNORE (0x100) /* ignore during this idle period */ | ||
| 52 | 56 | ||
| 53 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) | 57 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) |
| 54 | 58 | ||
| 55 | /** | 59 | /** |
| 56 | * cpuidle_get_statedata - retrieves private driver state data | 60 | * cpuidle_get_statedata - retrieves private driver state data |
| 57 | * @state: the state | 61 | * @st_usage: the state usage statistics |
| 58 | */ | 62 | */ |
| 59 | static inline void * cpuidle_get_statedata(struct cpuidle_state *state) | 63 | static inline void *cpuidle_get_statedata(struct cpuidle_state_usage *st_usage) |
| 60 | { | 64 | { |
| 61 | return state->driver_data; | 65 | return st_usage->driver_data; |
| 62 | } | 66 | } |
| 63 | 67 | ||
| 64 | /** | 68 | /** |
| 65 | * cpuidle_set_statedata - stores private driver state data | 69 | * cpuidle_set_statedata - stores private driver state data |
| 66 | * @state: the state | 70 | * @st_usage: the state usage statistics |
| 67 | * @data: the private data | 71 | * @data: the private data |
| 68 | */ | 72 | */ |
| 69 | static inline void | 73 | static inline void |
| 70 | cpuidle_set_statedata(struct cpuidle_state *state, void *data) | 74 | cpuidle_set_statedata(struct cpuidle_state_usage *st_usage, void *data) |
| 71 | { | 75 | { |
| 72 | state->driver_data = data; | 76 | st_usage->driver_data = data; |
| 73 | } | 77 | } |
| 74 | 78 | ||
| 75 | struct cpuidle_state_kobj { | 79 | struct cpuidle_state_kobj { |
| 76 | struct cpuidle_state *state; | 80 | struct cpuidle_state *state; |
| 81 | struct cpuidle_state_usage *state_usage; | ||
| 77 | struct completion kobj_unregister; | 82 | struct completion kobj_unregister; |
| 78 | struct kobject kobj; | 83 | struct kobject kobj; |
| 79 | }; | 84 | }; |
| @@ -81,22 +86,17 @@ struct cpuidle_state_kobj { | |||
| 81 | struct cpuidle_device { | 86 | struct cpuidle_device { |
| 82 | unsigned int registered:1; | 87 | unsigned int registered:1; |
| 83 | unsigned int enabled:1; | 88 | unsigned int enabled:1; |
| 84 | unsigned int power_specified:1; | ||
| 85 | unsigned int cpu; | 89 | unsigned int cpu; |
| 86 | 90 | ||
| 87 | int last_residency; | 91 | int last_residency; |
| 88 | int state_count; | 92 | int state_count; |
| 89 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; | 93 | struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX]; |
| 90 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; | 94 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; |
| 91 | struct cpuidle_state *last_state; | ||
| 92 | 95 | ||
| 93 | struct list_head device_list; | 96 | struct list_head device_list; |
| 94 | struct kobject kobj; | 97 | struct kobject kobj; |
| 95 | struct completion kobj_unregister; | 98 | struct completion kobj_unregister; |
| 96 | void *governor_data; | 99 | void *governor_data; |
| 97 | struct cpuidle_state *safe_state; | ||
| 98 | |||
| 99 | int (*prepare) (struct cpuidle_device *dev); | ||
| 100 | }; | 100 | }; |
| 101 | 101 | ||
| 102 | DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); | 102 | DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); |
| @@ -120,6 +120,11 @@ static inline int cpuidle_get_last_residency(struct cpuidle_device *dev) | |||
| 120 | struct cpuidle_driver { | 120 | struct cpuidle_driver { |
| 121 | char name[CPUIDLE_NAME_LEN]; | 121 | char name[CPUIDLE_NAME_LEN]; |
| 122 | struct module *owner; | 122 | struct module *owner; |
| 123 | |||
| 124 | unsigned int power_specified:1; | ||
| 125 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; | ||
| 126 | int state_count; | ||
| 127 | int safe_state_index; | ||
| 123 | }; | 128 | }; |
| 124 | 129 | ||
| 125 | #ifdef CONFIG_CPU_IDLE | 130 | #ifdef CONFIG_CPU_IDLE |
| @@ -166,11 +171,14 @@ struct cpuidle_governor { | |||
| 166 | struct list_head governor_list; | 171 | struct list_head governor_list; |
| 167 | unsigned int rating; | 172 | unsigned int rating; |
| 168 | 173 | ||
| 169 | int (*enable) (struct cpuidle_device *dev); | 174 | int (*enable) (struct cpuidle_driver *drv, |
| 170 | void (*disable) (struct cpuidle_device *dev); | 175 | struct cpuidle_device *dev); |
| 176 | void (*disable) (struct cpuidle_driver *drv, | ||
| 177 | struct cpuidle_device *dev); | ||
| 171 | 178 | ||
| 172 | int (*select) (struct cpuidle_device *dev); | 179 | int (*select) (struct cpuidle_driver *drv, |
| 173 | void (*reflect) (struct cpuidle_device *dev); | 180 | struct cpuidle_device *dev); |
| 181 | void (*reflect) (struct cpuidle_device *dev, int index); | ||
| 174 | 182 | ||
| 175 | struct module *owner; | 183 | struct module *owner; |
| 176 | }; | 184 | }; |
