diff options
Diffstat (limited to 'include/linux/clocksource.h')
| -rw-r--r-- | include/linux/clocksource.h | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 9c78d15d33e4..135509821c39 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -56,6 +56,7 @@ struct module; | |||
| 56 | * @shift: cycle to nanosecond divisor (power of two) | 56 | * @shift: cycle to nanosecond divisor (power of two) |
| 57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) | 57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) |
| 58 | * @maxadj: maximum adjustment value to mult (~11%) | 58 | * @maxadj: maximum adjustment value to mult (~11%) |
| 59 | * @max_cycles: maximum safe cycle value which won't overflow on multiplication | ||
| 59 | * @flags: flags describing special properties | 60 | * @flags: flags describing special properties |
| 60 | * @archdata: arch-specific data | 61 | * @archdata: arch-specific data |
| 61 | * @suspend: suspend function for the clocksource, if necessary | 62 | * @suspend: suspend function for the clocksource, if necessary |
| @@ -76,7 +77,7 @@ struct clocksource { | |||
| 76 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA | 77 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA |
| 77 | struct arch_clocksource_data archdata; | 78 | struct arch_clocksource_data archdata; |
| 78 | #endif | 79 | #endif |
| 79 | 80 | u64 max_cycles; | |
| 80 | const char *name; | 81 | const char *name; |
| 81 | struct list_head list; | 82 | struct list_head list; |
| 82 | int rating; | 83 | int rating; |
| @@ -178,7 +179,6 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) | |||
| 178 | } | 179 | } |
| 179 | 180 | ||
| 180 | 181 | ||
| 181 | extern int clocksource_register(struct clocksource*); | ||
| 182 | extern int clocksource_unregister(struct clocksource*); | 182 | extern int clocksource_unregister(struct clocksource*); |
| 183 | extern void clocksource_touch_watchdog(void); | 183 | extern void clocksource_touch_watchdog(void); |
| 184 | extern struct clocksource* clocksource_get_next(void); | 184 | extern struct clocksource* clocksource_get_next(void); |
| @@ -189,7 +189,7 @@ extern struct clocksource * __init clocksource_default_clock(void); | |||
| 189 | extern void clocksource_mark_unstable(struct clocksource *cs); | 189 | extern void clocksource_mark_unstable(struct clocksource *cs); |
| 190 | 190 | ||
| 191 | extern u64 | 191 | extern u64 |
| 192 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask); | 192 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cycles); |
| 193 | extern void | 193 | extern void |
| 194 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | 194 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); |
| 195 | 195 | ||
| @@ -200,7 +200,16 @@ clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | |||
| 200 | extern int | 200 | extern int |
| 201 | __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq); | 201 | __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq); |
| 202 | extern void | 202 | extern void |
| 203 | __clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq); | 203 | __clocksource_update_freq_scale(struct clocksource *cs, u32 scale, u32 freq); |
| 204 | |||
| 205 | /* | ||
| 206 | * Don't call this unless you are a default clocksource | ||
| 207 | * (AKA: jiffies) and absolutely have to. | ||
| 208 | */ | ||
| 209 | static inline int __clocksource_register(struct clocksource *cs) | ||
| 210 | { | ||
| 211 | return __clocksource_register_scale(cs, 1, 0); | ||
| 212 | } | ||
| 204 | 213 | ||
| 205 | static inline int clocksource_register_hz(struct clocksource *cs, u32 hz) | 214 | static inline int clocksource_register_hz(struct clocksource *cs, u32 hz) |
| 206 | { | 215 | { |
| @@ -212,14 +221,14 @@ static inline int clocksource_register_khz(struct clocksource *cs, u32 khz) | |||
| 212 | return __clocksource_register_scale(cs, 1000, khz); | 221 | return __clocksource_register_scale(cs, 1000, khz); |
| 213 | } | 222 | } |
| 214 | 223 | ||
| 215 | static inline void __clocksource_updatefreq_hz(struct clocksource *cs, u32 hz) | 224 | static inline void __clocksource_update_freq_hz(struct clocksource *cs, u32 hz) |
| 216 | { | 225 | { |
| 217 | __clocksource_updatefreq_scale(cs, 1, hz); | 226 | __clocksource_update_freq_scale(cs, 1, hz); |
| 218 | } | 227 | } |
| 219 | 228 | ||
| 220 | static inline void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz) | 229 | static inline void __clocksource_update_freq_khz(struct clocksource *cs, u32 khz) |
| 221 | { | 230 | { |
| 222 | __clocksource_updatefreq_scale(cs, 1000, khz); | 231 | __clocksource_update_freq_scale(cs, 1000, khz); |
| 223 | } | 232 | } |
| 224 | 233 | ||
| 225 | 234 | ||
