|
@@ -97,6 +97,21 @@ static irqreturn_t um_timer(int irq, void *dev)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
+static cycle_t itimer_read(void)
|
|
|
+{
|
|
|
+ return os_nsecs();
|
|
|
+}
|
|
|
+
|
|
|
+static struct clocksource itimer_clocksource = {
|
|
|
+ .name = "itimer",
|
|
|
+ .rating = 300,
|
|
|
+ .read = itimer_read,
|
|
|
+ .mask = CLOCKSOURCE_MASK(64),
|
|
|
+ .mult = 1,
|
|
|
+ .shift = 0,
|
|
|
+ .flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
|
|
+};
|
|
|
+
|
|
|
static void __init setup_itimer(void)
|
|
|
{
|
|
|
int err;
|
|
@@ -111,6 +126,11 @@ static void __init setup_itimer(void)
|
|
|
clockevent_delta2ns(60 * HZ, &itimer_clockevent);
|
|
|
itimer_clockevent.min_delta_ns =
|
|
|
clockevent_delta2ns(1, &itimer_clockevent);
|
|
|
+ err = clocksource_register(&itimer_clocksource);
|
|
|
+ if (err) {
|
|
|
+ printk(KERN_ERR "clocksource_register returned %d\n", err);
|
|
|
+ return;
|
|
|
+ }
|
|
|
clockevents_register_device(&itimer_clockevent);
|
|
|
}
|
|
|
|