|  | /* | 
|  | * linux/include/asm-arm/mach/time.h | 
|  | * | 
|  | * Copyright (C) 2004 MontaVista Software, Inc. | 
|  | * | 
|  | * This program is free software; you can redistribute it and/or modify | 
|  | * it under the terms of the GNU General Public License version 2 as | 
|  | * published by the Free Software Foundation. | 
|  | */ | 
|  | #ifndef __ASM_ARM_MACH_TIME_H | 
|  | #define __ASM_ARM_MACH_TIME_H | 
|  |  | 
|  | #include <linux/sysdev.h> | 
|  |  | 
|  | /* | 
|  | * This is our kernel timer structure. | 
|  | * | 
|  | * - init | 
|  | *   Initialise the kernels jiffy timer source, claim interrupt | 
|  | *   using setup_irq.  This is called early on during initialisation | 
|  | *   while interrupts are still disabled on the local CPU. | 
|  | * - suspend | 
|  | *   Suspend the kernel jiffy timer source, if necessary.  This | 
|  | *   is called with interrupts disabled, after all normal devices | 
|  | *   have been suspended.  If no action is required, set this to | 
|  | *   NULL. | 
|  | * - resume | 
|  | *   Resume the kernel jiffy timer source, if necessary.  This | 
|  | *   is called with interrupts disabled before any normal devices | 
|  | *   are resumed.  If no action is required, set this to NULL. | 
|  | * - offset | 
|  | *   Return the timer offset in microseconds since the last timer | 
|  | *   interrupt.  Note: this must take account of any unprocessed | 
|  | *   timer interrupt which may be pending. | 
|  | */ | 
|  | struct sys_timer { | 
|  | struct sys_device	dev; | 
|  | void			(*init)(void); | 
|  | void			(*suspend)(void); | 
|  | void			(*resume)(void); | 
|  | #ifndef CONFIG_GENERIC_TIME | 
|  | unsigned long		(*offset)(void); | 
|  | #endif | 
|  |  | 
|  | #ifdef CONFIG_NO_IDLE_HZ | 
|  | struct dyn_tick_timer	*dyn_tick; | 
|  | #endif | 
|  | }; | 
|  |  | 
|  | #ifdef CONFIG_NO_IDLE_HZ | 
|  |  | 
|  | #define DYN_TICK_ENABLED	(1 << 1) | 
|  |  | 
|  | struct dyn_tick_timer { | 
|  | spinlock_t	lock; | 
|  | unsigned int	state;			/* Current state */ | 
|  | int		(*enable)(void);	/* Enables dynamic tick */ | 
|  | int		(*disable)(void);	/* Disables dynamic tick */ | 
|  | void		(*reprogram)(unsigned long); /* Reprograms the timer */ | 
|  | int		(*handler)(int, void *); | 
|  | }; | 
|  |  | 
|  | void timer_dyn_reprogram(void); | 
|  | #else | 
|  | #define timer_dyn_reprogram()	do { } while (0) | 
|  | #endif | 
|  |  | 
|  | extern struct sys_timer *system_timer; | 
|  | extern void timer_tick(void); | 
|  |  | 
|  | /* | 
|  | * Kernel time keeping support. | 
|  | */ | 
|  | struct timespec; | 
|  | extern int (*set_rtc)(void); | 
|  | extern void save_time_delta(struct timespec *delta, struct timespec *rtc); | 
|  | extern void restore_time_delta(struct timespec *delta, struct timespec *rtc); | 
|  |  | 
|  | #endif |