diff options
Diffstat (limited to 'include/linux/clocksource.h')
| -rw-r--r-- | include/linux/clocksource.h | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 573819ef4cc0..5a40d14daa9f 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -143,7 +143,9 @@ extern u64 timecounter_cyc2time(struct timecounter *tc, | |||
| 143 | * 400-499: Perfect | 143 | * 400-499: Perfect |
| 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 | 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) |
| @@ -162,7 +164,9 @@ struct clocksource { | |||
| 162 | char *name; | 164 | char *name; |
| 163 | struct list_head list; | 165 | struct list_head list; |
| 164 | int rating; | 166 | int rating; |
| 165 | cycle_t (*read)(void); | 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; |
| @@ -271,7 +275,34 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) | |||
| 271 | */ | 275 | */ |
| 272 | static inline cycle_t clocksource_read(struct clocksource *cs) | 276 | static inline cycle_t clocksource_read(struct clocksource *cs) |
| 273 | { | 277 | { |
| 274 | return cs->read(); | 278 | return cs->read(cs); |
| 279 | } | ||
| 280 | |||
| 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); | ||
| 275 | } | 306 | } |
| 276 | 307 | ||
| 277 | /** | 308 | /** |
