This source file includes following definitions.
- clocksource_freq2mult
 
- clocksource_khz2mult
 
- clocksource_hz2mult
 
- clocksource_cyc2ns
 
- __clocksource_register
 
- clocksource_register_hz
 
- clocksource_register_khz
 
- __clocksource_update_freq_hz
 
- __clocksource_update_freq_khz
 
- clocksource_arch_init
 
- timer_probe
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 #ifndef _LINUX_CLOCKSOURCE_H
  10 #define _LINUX_CLOCKSOURCE_H
  11 
  12 #include <linux/types.h>
  13 #include <linux/timex.h>
  14 #include <linux/time.h>
  15 #include <linux/list.h>
  16 #include <linux/cache.h>
  17 #include <linux/timer.h>
  18 #include <linux/init.h>
  19 #include <linux/of.h>
  20 #include <asm/div64.h>
  21 #include <asm/io.h>
  22 
  23 struct clocksource;
  24 struct module;
  25 
  26 #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA
  27 #include <asm/clocksource.h>
  28 #endif
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 
  48 
  49 
  50 
  51 
  52 
  53 
  54 
  55 
  56 
  57 
  58 
  59 
  60 
  61 
  62 
  63 
  64 
  65 
  66 
  67 
  68 
  69 
  70 
  71 
  72 
  73 
  74 
  75 
  76 
  77 
  78 
  79 
  80 struct clocksource {
  81         u64 (*read)(struct clocksource *cs);
  82         u64 mask;
  83         u32 mult;
  84         u32 shift;
  85         u64 max_idle_ns;
  86         u32 maxadj;
  87 #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA
  88         struct arch_clocksource_data archdata;
  89 #endif
  90         u64 max_cycles;
  91         const char *name;
  92         struct list_head list;
  93         int rating;
  94         int (*enable)(struct clocksource *cs);
  95         void (*disable)(struct clocksource *cs);
  96         unsigned long flags;
  97         void (*suspend)(struct clocksource *cs);
  98         void (*resume)(struct clocksource *cs);
  99         void (*mark_unstable)(struct clocksource *cs);
 100         void (*tick_stable)(struct clocksource *cs);
 101 
 102         
 103 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
 104         
 105         struct list_head wd_list;
 106         u64 cs_last;
 107         u64 wd_last;
 108 #endif
 109         struct module *owner;
 110 };
 111 
 112 
 113 
 114 
 115 #define CLOCK_SOURCE_IS_CONTINUOUS              0x01
 116 #define CLOCK_SOURCE_MUST_VERIFY                0x02
 117 
 118 #define CLOCK_SOURCE_WATCHDOG                   0x10
 119 #define CLOCK_SOURCE_VALID_FOR_HRES             0x20
 120 #define CLOCK_SOURCE_UNSTABLE                   0x40
 121 #define CLOCK_SOURCE_SUSPEND_NONSTOP            0x80
 122 #define CLOCK_SOURCE_RESELECT                   0x100
 123 
 124 
 125 #define CLOCKSOURCE_MASK(bits) GENMASK_ULL((bits) - 1, 0)
 126 
 127 static inline u32 clocksource_freq2mult(u32 freq, u32 shift_constant, u64 from)
 128 {
 129         
 130 
 131 
 132 
 133 
 134 
 135 
 136         u64 tmp = ((u64)from) << shift_constant;
 137 
 138         tmp += freq/2; 
 139         do_div(tmp, freq);
 140 
 141         return (u32)tmp;
 142 }
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 
 151 
 152 static inline u32 clocksource_khz2mult(u32 khz, u32 shift_constant)
 153 {
 154         return clocksource_freq2mult(khz, shift_constant, NSEC_PER_MSEC);
 155 }
 156 
 157 
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant)
 167 {
 168         return clocksource_freq2mult(hz, shift_constant, NSEC_PER_SEC);
 169 }
 170 
 171 
 172 
 173 
 174 
 175 
 176 
 177 
 178 
 179 
 180 
 181 
 182 
 183 
 184 static inline s64 clocksource_cyc2ns(u64 cycles, u32 mult, u32 shift)
 185 {
 186         return ((u64) cycles * mult) >> shift;
 187 }
 188 
 189 
 190 extern int clocksource_unregister(struct clocksource*);
 191 extern void clocksource_touch_watchdog(void);
 192 extern void clocksource_change_rating(struct clocksource *cs, int rating);
 193 extern void clocksource_suspend(void);
 194 extern void clocksource_resume(void);
 195 extern struct clocksource * __init clocksource_default_clock(void);
 196 extern void clocksource_mark_unstable(struct clocksource *cs);
 197 extern void
 198 clocksource_start_suspend_timing(struct clocksource *cs, u64 start_cycles);
 199 extern u64 clocksource_stop_suspend_timing(struct clocksource *cs, u64 now);
 200 
 201 extern u64
 202 clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cycles);
 203 extern void
 204 clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
 205 
 206 
 207 
 208 
 209 
 210 extern int
 211 __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq);
 212 extern void
 213 __clocksource_update_freq_scale(struct clocksource *cs, u32 scale, u32 freq);
 214 
 215 
 216 
 217 
 218 
 219 static inline int __clocksource_register(struct clocksource *cs)
 220 {
 221         return __clocksource_register_scale(cs, 1, 0);
 222 }
 223 
 224 static inline int clocksource_register_hz(struct clocksource *cs, u32 hz)
 225 {
 226         return __clocksource_register_scale(cs, 1, hz);
 227 }
 228 
 229 static inline int clocksource_register_khz(struct clocksource *cs, u32 khz)
 230 {
 231         return __clocksource_register_scale(cs, 1000, khz);
 232 }
 233 
 234 static inline void __clocksource_update_freq_hz(struct clocksource *cs, u32 hz)
 235 {
 236         __clocksource_update_freq_scale(cs, 1, hz);
 237 }
 238 
 239 static inline void __clocksource_update_freq_khz(struct clocksource *cs, u32 khz)
 240 {
 241         __clocksource_update_freq_scale(cs, 1000, khz);
 242 }
 243 
 244 #ifdef CONFIG_ARCH_CLOCKSOURCE_INIT
 245 extern void clocksource_arch_init(struct clocksource *cs);
 246 #else
 247 static inline void clocksource_arch_init(struct clocksource *cs) { }
 248 #endif
 249 
 250 extern int timekeeping_notify(struct clocksource *clock);
 251 
 252 extern u64 clocksource_mmio_readl_up(struct clocksource *);
 253 extern u64 clocksource_mmio_readl_down(struct clocksource *);
 254 extern u64 clocksource_mmio_readw_up(struct clocksource *);
 255 extern u64 clocksource_mmio_readw_down(struct clocksource *);
 256 
 257 extern int clocksource_mmio_init(void __iomem *, const char *,
 258         unsigned long, int, unsigned, u64 (*)(struct clocksource *));
 259 
 260 extern int clocksource_i8253_init(void);
 261 
 262 #define TIMER_OF_DECLARE(name, compat, fn) \
 263         OF_DECLARE_1_RET(timer, name, compat, fn)
 264 
 265 #ifdef CONFIG_TIMER_PROBE
 266 extern void timer_probe(void);
 267 #else
 268 static inline void timer_probe(void) {}
 269 #endif
 270 
 271 #define TIMER_ACPI_DECLARE(name, table_id, fn)          \
 272         ACPI_DECLARE_PROBE_ENTRY(timer, name, table_id, 0, NULL, 0, fn)
 273 
 274 #endif