blob: 6d95ef7718474e21258d9ec2952a0d0b15c6eb5e [file] [log] [blame]
Jens Arnolde44372e2005-07-26 20:01:11 +00001/***************************************************************************
2* __________ __ ___.
3* Open \______ \ ____ ____ | | _\_ |__ _______ ___
4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7* \/ \/ \/ \/ \/
8* $Id$
9*
10* Copyright (C) 2005 Jens Arnold
11*
Daniel Stenberg2acc0ac2008-06-28 18:10:04 +000012* This program is free software; you can redistribute it and/or
13* modify it under the terms of the GNU General Public License
14* as published by the Free Software Foundation; either version 2
15* of the License, or (at your option) any later version.
Jens Arnolde44372e2005-07-26 20:01:11 +000016*
17* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18* KIND, either express or implied.
19*
20****************************************************************************/
21
22#ifndef __TIMER_H__
23#define __TIMER_H__
24
25#include <stdbool.h>
26#include "config.h"
27
Daniel Ankers242cbd52006-11-22 00:41:30 +000028#if defined(CPU_PP)
Jens Arnold295ec692006-04-04 01:16:11 +000029 /* Portalplayer chips use a microsecond timer. */
30 #define TIMER_FREQ 1000000
31#elif defined(CPU_COLDFIRE)
32 /* timer is based on busclk == cpuclk/2 */
33 #define TIMER_FREQ (CPU_FREQ/2)
Tomasz Malesinskicd630c92007-03-24 19:26:13 +000034#elif CONFIG_CPU == PNX0101
35 #define TIMER_FREQ 3000000
Dave Chapmanf2042982008-05-02 19:12:09 +000036#elif CONFIG_CPU == S3C2440 || CONFIG_CPU == DM320 || CONFIG_CPU == TCC7801 \
37 || defined(CPU_TCC77X)
Michael Sevakis4ae87c82007-07-06 21:36:32 +000038 #include "timer-target.h"
Kevin Ferraref3114f32007-07-29 04:01:46 +000039#elif defined(SIMULATOR)
Kevin Ferrare81aac2a2007-07-29 03:43:37 +000040 #define TIMER_FREQ 1000000
Thom Johansen46de4c22006-03-17 00:08:39 +000041#else
Jens Arnold295ec692006-04-04 01:16:11 +000042 #define TIMER_FREQ CPU_FREQ
Thom Johansen46de4c22006-03-17 00:08:39 +000043#endif
Jens Arnolde44372e2005-07-26 20:01:11 +000044bool timer_register(int reg_prio, void (*unregister_callback)(void),
Jens Arnoldac9b9272008-04-04 19:38:46 +000045 long cycles, int int_prio, void (*timer_callback)(void)
46 IF_COP(,int core));
Jens Arnolde44372e2005-07-26 20:01:11 +000047bool timer_set_period(long cycles);
Jens Arnoldcfb073c2005-10-03 09:24:36 +000048#ifdef CPU_COLDFIRE
49void timers_adjust_prescale(int multiplier, bool enable_irq);
50#endif
Jens Arnolde44372e2005-07-26 20:01:11 +000051void timer_unregister(void);
52
Michael Sevakis4ae87c82007-07-06 21:36:32 +000053/* For target-specific interface use */
54extern void (*pfn_timer)(void);
55extern void (*pfn_unregister)(void);
56
Jens Arnolde44372e2005-07-26 20:01:11 +000057#endif /* __TIMER_H__ */