blob: a04eabd43d06621dfadb38d01869f2f22adce783 [file] [log] [blame]
H. Peter Anvin1965aae2008-10-22 22:26:29 -07001#ifndef _ASM_X86_TIMER_H
2#define _ASM_X86_TIMER_H
Shaohua Lic3c433e2005-09-03 15:57:07 -07003#include <linux/pm.h>
Guillaume Chazarain53d517c2008-01-30 13:30:06 +01004#include <linux/percpu.h>
Ingo Molnar8e6dafd2009-02-23 00:34:39 +01005#include <linux/interrupt.h>
Peter Zijlstra5dd12c212013-11-29 18:04:39 +01006#include <linux/math64.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07007
Linus Torvalds1da177e2005-04-16 15:20:36 -07008#define TICK_SIZE (tick_nsec / 1000)
Zachary Amsden6cb9a832007-03-05 00:30:35 -08009
Zachary Amsden6cb9a832007-03-05 00:30:35 -080010unsigned long long native_sched_clock(void);
Stephen Rothwell25c1a412009-03-30 11:10:27 +110011extern int recalibrate_cpu_khz(void);
Jaswinder Singhcc038492008-07-21 21:52:51 +053012
13extern int no_timer_check;
Linus Torvalds1da177e2005-04-16 15:20:36 -070014
Peter Zijlstra20d1c862013-11-29 15:40:29 +010015/*
16 * We use the full linear equation: f(x) = a + b*x, in order to allow
17 * a continuous function in the face of dynamic freq changes.
18 *
19 * Continuity means that when our frequency changes our slope (b); we want to
20 * ensure that: f(t) == f'(t), which gives: a + b*t == a' + b'*t.
21 *
22 * Without an offset (a) the above would not be possible.
23 *
24 * See the comment near cycles_2_ns() for details on how we compute (b).
25 */
26struct cyc2ns_data {
27 u32 cyc2ns_mul;
28 u32 cyc2ns_shift;
29 u64 cyc2ns_offset;
30 u32 __count;
31 /* u32 hole */
32}; /* 24 bytes -- do not grow */
33
34extern struct cyc2ns_data *cyc2ns_read_begin(void);
35extern void cyc2ns_read_end(struct cyc2ns_data *);
Jeremy Fitzhardinge688340e2007-07-17 18:37:04 -070036
H. Peter Anvin1965aae2008-10-22 22:26:29 -070037#endif /* _ASM_X86_TIMER_H */