2005-04-16 15:20:36 -07:00
/*
* 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 ) ;
2006-09-22 00:16:30 +01:00
# ifndef CONFIG_GENERIC_TIME
2005-04-16 15:20:36 -07:00
unsigned long ( * offset ) ( void ) ;
2006-09-22 00:16:30 +01:00
# endif
2005-06-25 19:39:45 +01:00
# 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 {
2006-06-18 16:26:58 +01:00
spinlock_t lock ;
2005-06-25 19:39:45 +01:00
unsigned int state ; /* Current state */
int ( * enable ) ( void ) ; /* Enables dynamic tick */
int ( * disable ) ( void ) ; /* Disables dynamic tick */
void ( * reprogram ) ( unsigned long ) ; /* Reprograms the timer */
2006-10-06 10:53:39 -07:00
int ( * handler ) ( int , void * ) ;
2005-04-16 15:20:36 -07:00
} ;
2005-06-25 19:39:45 +01:00
void timer_dyn_reprogram ( void ) ;
2005-06-27 14:04:05 +01:00
# else
# define timer_dyn_reprogram() do { } while (0)
2005-06-25 19:39:45 +01:00
# endif
2005-04-16 15:20:36 -07:00
extern struct sys_timer * system_timer ;
2006-10-06 10:53:39 -07:00
extern void timer_tick ( void ) ;
2005-04-16 15:20:36 -07:00
/*
* Kernel time keeping support .
*/
2006-07-03 02:18:48 +02:00
struct timespec ;
2005-04-16 15:20:36 -07:00
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