2005-04-16 15:20:36 -07:00
/*
* Copyright ( C ) 2001 , 2002 , MontaVista Software Inc .
* Author : Jun Sun , jsun @ mvista . com or jsun @ junsun . net
* Copyright ( c ) 2003 Maciej W . Rozycki
*
* include / asm - mips / time . h
* header file for the new style time . c file and time services .
*
2013-01-22 12:59:30 +01:00
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
2005-04-16 15:20:36 -07:00
* Free Software Foundation ; either version 2 of the License , or ( at your
* option ) any later version .
*/
# ifndef _ASM_TIME_H
# define _ASM_TIME_H
# include <linux/rtc.h>
2005-11-03 01:01:15 +09:00
# include <linux/spinlock.h>
2007-10-19 08:13:08 +01:00
# include <linux/clockchips.h>
2006-11-12 00:10:28 +09:00
# include <linux/clocksource.h>
2005-11-03 01:01:15 +09:00
extern spinlock_t rtc_lock ;
2005-04-16 15:20:36 -07:00
/*
2007-10-11 23:46:08 +01:00
* RTC ops . By default , they point to weak no - op RTC functions .
2006-03-27 01:16:33 -08:00
* rtc_mips_set_time - reverse the above translation and set time to RTC .
* rtc_mips_set_mmss - similar to rtc_set_time , but only min and sec need
2005-04-16 15:20:36 -07:00
* to be set . Used by RTC sync - up .
*/
2007-10-11 23:46:08 +01:00
extern int rtc_mips_set_time ( unsigned long ) ;
extern int rtc_mips_set_mmss ( unsigned long ) ;
2005-04-16 15:20:36 -07:00
/*
* board specific routines required by time_init ( ) .
*/
2007-10-11 23:46:08 +01:00
extern void plat_time_init ( void ) ;
2005-04-16 15:20:36 -07:00
/*
* mips_hpt_frequency - must be set if you intend to use an R4k - compatible
2007-12-09 21:19:36 +09:00
* counter as a timer interrupt source .
2005-04-16 15:20:36 -07:00
*/
extern unsigned int mips_hpt_frequency ;
2007-10-11 23:46:09 +01:00
/*
* The performance counter IRQ on MIPS is a close relative to the timer IRQ
* so it lives here .
*/
extern int ( * perf_irq ) ( void ) ;
2014-09-18 14:47:12 -07:00
extern int __weak get_c0_perfcount_int ( void ) ;
2007-10-11 23:46:09 +01:00
2007-10-11 23:46:09 +01:00
/*
* Initialize the calling CPU ' s compare interrupt as clockevent device
*/
2015-07-12 18:11:38 -05:00
extern unsigned int get_c0_compare_int ( void ) ;
2008-12-21 09:26:22 +01:00
extern int r4k_clockevent_init ( void ) ;
2007-11-21 16:39:44 +00:00
static inline int mips_clockevent_init ( void )
2007-10-18 17:48:11 +01:00
{
2014-10-20 12:04:04 -07:00
# ifdef CONFIG_CEVT_R4K
2008-12-21 09:26:22 +01:00
return r4k_clockevent_init ( ) ;
# else
2007-11-21 16:39:44 +00:00
return - ENXIO ;
2007-10-18 17:48:11 +01:00
# endif
2008-12-21 09:26:22 +01:00
}
2007-10-11 23:46:09 +01:00
2007-11-24 22:33:28 +00:00
/*
* Initialize the count register as a clocksource
*/
2008-12-21 09:26:22 +01:00
extern int init_r4k_clocksource ( void ) ;
2008-03-12 13:58:10 +00:00
static inline int init_mips_clocksource ( void )
2007-11-24 22:33:28 +00:00
{
2013-10-07 11:32:54 +01:00
# ifdef CONFIG_CSRC_R4K
2008-12-21 09:26:22 +01:00
return init_r4k_clocksource ( ) ;
# else
2008-03-12 13:58:10 +00:00
return 0 ;
2007-11-24 22:33:28 +00:00
# endif
2008-12-21 09:26:22 +01:00
}
2007-11-24 22:33:28 +00:00
2009-11-11 14:05:34 +00:00
static inline void clockevent_set_clock ( struct clock_event_device * cd ,
unsigned int clock )
{
clockevents_calc_mult_shift ( cd , clock , 4 ) ;
}
2007-10-19 08:13:08 +01:00
2005-04-16 15:20:36 -07:00
# endif /* _ASM_TIME_H */