diff options
Diffstat (limited to 'timer.c')
-rw-r--r-- | timer.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/timer.c b/timer.c deleted file mode 100644 index 9d25879894d280..00000000000000 --- a/timer.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * linux/arch/ia64/sn/kernel/sn2/timer.c - * - * Copyright (C) 2003 Silicon Graphics, Inc. - */ - -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/time.h> -#include <linux/interrupt.h> - -#include <asm/hw_irq.h> -#include <asm/system.h> - -#include <asm/sn/leds.h> -#include <asm/sn/clksupport.h> - - -extern unsigned long sn_rtc_cycles_per_second; -static volatile unsigned long last_wall_rtc; - -/** - * gettimeoffset - number of nsecs elapsed since &xtime was last updated - * - * This function is used by do_gettimeofday() to determine the number - * of nsecs that have elapsed since the last update to &xtime. On SN - * this is accomplished using the RTC built in to each Hub chip; each - * is guaranteed to be synchronized by the PROM, so a local read will - * suffice (GET_RTC_COUNTER() does this for us). A snapshot of the RTC - * value is taken every time wall_jiffies is updated by the - * update_wall_time_hook (sn2_update_wall_time) which means we don't - * have to adjust for lost jiffies ticks or anything like that. - */ - -static volatile long rtc_offset; -static long rtc_nsecs_per_cycle; -static long rtc_per_timer_tick; - -unsigned long -sn_gettimeoffset(void) -{ - long current_rtc, elapsed_rtc, old, new_offset; - - do { - old = rtc_offset; - current_rtc = GET_RTC_COUNTER(); - - /* - * Need to address wrapping here! - */ - elapsed_rtc = (long)(current_rtc - last_wall_rtc); - - new_offset = max(elapsed_rtc, old); - } while (cmpxchg(&rtc_offset, old, new_offset) != old); - - return new_offset * rtc_nsecs_per_cycle; -} - - -void sn2_update_wall_time(long delta_nsec) -{ - rtc_offset -= min(rtc_offset, rtc_per_timer_tick); - last_wall_rtc = GET_RTC_COUNTER(); -} - - -void sn2_reset_wall_time(void) -{ - rtc_offset = 0; - last_wall_rtc = GET_RTC_COUNTER(); -} - - -void __init -sn_timer_init(void) -{ - rtc_per_timer_tick = sn_rtc_cycles_per_second / HZ; - rtc_nsecs_per_cycle = 1000000000 / sn_rtc_cycles_per_second; - - last_wall_rtc = GET_RTC_COUNTER(); - update_wall_time_hook = sn2_update_wall_time; - reset_wall_time_hook = sn2_reset_wall_time; - gettimeoffset = sn_gettimeoffset; -} |