blob: e3b60854fbc28910fef5f1b7dd862098444a57d0 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001Time Interpolators
2------------------
3
4Time interpolators are a base of time calculation between timer ticks and
5allow an accurate determination of time down to the accuracy of the time
6source in nanoseconds.
7
8The architecture specific code typically provides gettimeofday and
9settimeofday under Linux. The time interpolator provides both if an arch
10defines CONFIG_TIME_INTERPOLATION. The arch still must set up timer tick
11operations and call the necessary functions to advance the clock.
12
13With the time interpolator a standardized interface exists for time
14interpolation between ticks. The provided logic is highly scalable
15and has been tested in SMP situations of up to 512 CPUs.
16
17If CONFIG_TIME_INTERPOLATION is defined then the architecture specific code
18(or the device drivers - like HPET) may register time interpolators.
19These are typically defined in the following way:
20
21static struct time_interpolator my_interpolator {
22 .frequency = MY_FREQUENCY,
23 .source = TIME_SOURCE_MMIO32,
24 .shift = 8, /* scaling for higher accuracy */
25 .drift = -1, /* Unknown drift */
26 .jitter = 0 /* time source is stable */
27};
28
29void time_init(void)
30{
31 ....
32 /* Initialization of the timer *.
33 my_interpolator.address = &my_timer;
34 register_time_interpolator(&my_interpolator);
35 ....
36}
37
38For more details see include/linux/timex.h and kernel/timer.c.
39
40Christoph Lameter <christoph@lameter.com>, October 31, 2004
41