diff options
| author | Magnus Damm <damm@igel.co.jp> | 2009-04-21 15:24:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-21 16:41:47 -0400 |
| commit | 4614e6adafa2c5e6c3a9c245af2807fa7bc5117a (patch) | |
| tree | e4bb5eeaa252ede053abc6b3c4d15c4127ce7a32 /include/linux | |
| parent | 8e19608e8b5c001e4a66ce482edc474f05fb7355 (diff) | |
clocksource: add enable() and disable() callbacks
Add enable() and disable() callbacks for clocksources.
This allows us to put unused clocksources in power save mode. The
functions clocksource_enable() and clocksource_disable() wrap the
callbacks and are inserted in the timekeeping code to enable before use
and disable after switching to a new clocksource.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Acked-by: John Stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/clocksource.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 0d96cde9ee5d..5a40d14daa9f 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -144,6 +144,8 @@ extern u64 timecounter_cyc2time(struct timecounter *tc, | |||
| 144 | * The ideal clocksource. A must-use where | 144 | * The ideal clocksource. A must-use where |
| 145 | * available. | 145 | * available. |
| 146 | * @read: returns a cycle value, passes clocksource as argument | 146 | * @read: returns a cycle value, passes clocksource as argument |
| 147 | * @enable: optional function to enable the clocksource | ||
| 148 | * @disable: optional function to disable the clocksource | ||
| 147 | * @mask: bitmask for two's complement | 149 | * @mask: bitmask for two's complement |
| 148 | * subtraction of non 64 bit counters | 150 | * subtraction of non 64 bit counters |
| 149 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) | 151 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) |
| @@ -163,6 +165,8 @@ struct clocksource { | |||
| 163 | struct list_head list; | 165 | struct list_head list; |
| 164 | int rating; | 166 | int rating; |
| 165 | cycle_t (*read)(struct clocksource *cs); | 167 | cycle_t (*read)(struct clocksource *cs); |
| 168 | int (*enable)(struct clocksource *cs); | ||
| 169 | void (*disable)(struct clocksource *cs); | ||
| 166 | cycle_t mask; | 170 | cycle_t mask; |
| 167 | u32 mult; | 171 | u32 mult; |
| 168 | u32 mult_orig; | 172 | u32 mult_orig; |
| @@ -275,6 +279,33 @@ static inline cycle_t clocksource_read(struct clocksource *cs) | |||
| 275 | } | 279 | } |
| 276 | 280 | ||
| 277 | /** | 281 | /** |
| 282 | * clocksource_enable: - enable clocksource | ||
| 283 | * @cs: pointer to clocksource | ||
| 284 | * | ||
| 285 | * Enables the specified clocksource. The clocksource callback | ||
| 286 | * function should start up the hardware and setup mult and field | ||
| 287 | * members of struct clocksource to reflect hardware capabilities. | ||
| 288 | */ | ||
| 289 | static inline int clocksource_enable(struct clocksource *cs) | ||
| 290 | { | ||
| 291 | return cs->enable ? cs->enable(cs) : 0; | ||
| 292 | } | ||
| 293 | |||
| 294 | /** | ||
| 295 | * clocksource_disable: - disable clocksource | ||
| 296 | * @cs: pointer to clocksource | ||
| 297 | * | ||
| 298 | * Disables the specified clocksource. The clocksource callback | ||
| 299 | * function should power down the now unused hardware block to | ||
| 300 | * save power. | ||
| 301 | */ | ||
| 302 | static inline void clocksource_disable(struct clocksource *cs) | ||
| 303 | { | ||
| 304 | if (cs->disable) | ||
| 305 | cs->disable(cs); | ||
| 306 | } | ||
| 307 | |||
| 308 | /** | ||
| 278 | * cyc2ns - converts clocksource cycles to nanoseconds | 309 | * cyc2ns - converts clocksource cycles to nanoseconds |
| 279 | * @cs: Pointer to clocksource | 310 | * @cs: Pointer to clocksource |
| 280 | * @cycles: Cycles | 311 | * @cycles: Cycles |
