|  | Time Interpolators | 
|  | ------------------ | 
|  |  | 
|  | Time interpolators are a base of time calculation between timer ticks and | 
|  | allow an accurate determination of time down to the accuracy of the time | 
|  | source in nanoseconds. | 
|  |  | 
|  | The architecture specific code typically provides gettimeofday and | 
|  | settimeofday under Linux. The time interpolator provides both if an arch | 
|  | defines CONFIG_TIME_INTERPOLATION. The arch still must set up timer tick | 
|  | operations and call the necessary functions to advance the clock. | 
|  |  | 
|  | With the time interpolator a standardized interface exists for time | 
|  | interpolation between ticks. The provided logic is highly scalable | 
|  | and has been tested in SMP situations of up to 512 CPUs. | 
|  |  | 
|  | If CONFIG_TIME_INTERPOLATION is defined then the architecture specific code | 
|  | (or the device drivers - like HPET) may register time interpolators. | 
|  | These are typically defined in the following way: | 
|  |  | 
|  | static struct time_interpolator my_interpolator { | 
|  | .frequency = MY_FREQUENCY, | 
|  | .source = TIME_SOURCE_MMIO32, | 
|  | .shift = 8,		/* scaling for higher accuracy */ | 
|  | .drift = -1,		/* Unknown drift */ | 
|  | .jitter = 0		/* time source is stable */ | 
|  | }; | 
|  |  | 
|  | void time_init(void) | 
|  | { | 
|  | .... | 
|  | /* Initialization of the timer *. | 
|  | my_interpolator.address = &my_timer; | 
|  | register_time_interpolator(&my_interpolator); | 
|  | .... | 
|  | } | 
|  |  | 
|  | For more details see include/linux/timex.h and kernel/timer.c. | 
|  |  | 
|  | Christoph Lameter <christoph@lameter.com>, October 31, 2004 | 
|  |  |