In order to switch to a runtime selectable local timer, add a registration interface that timer drivers can use to register to the core. local_timer_setup() and local_timer_stop() are made weak symbols in order not to break existing setups. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Sathish Ambley <sambley@codeaurora.org>
72 lines
1.3 KiB
C
72 lines
1.3 KiB
C
/*
|
|
* arch/arm/include/asm/localtimer.h
|
|
*
|
|
* Copyright (C) 2004-2005 ARM Ltd.
|
|
*
|
|
* 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_LOCALTIMER_H
|
|
#define __ASM_ARM_LOCALTIMER_H
|
|
|
|
#include <linux/interrupt.h>
|
|
|
|
struct clock_event_device;
|
|
|
|
struct local_timer_ops {
|
|
int (*setup)(struct clock_event_device *);
|
|
void (*stop)(struct clock_event_device *);
|
|
};
|
|
|
|
/*
|
|
* Setup a per-cpu timer, whether it be a local timer or dummy broadcast
|
|
*/
|
|
void percpu_timer_setup(void);
|
|
|
|
#ifdef CONFIG_LOCAL_TIMERS
|
|
|
|
#ifdef CONFIG_HAVE_ARM_TWD
|
|
|
|
#include "smp_twd.h"
|
|
|
|
#define local_timer_stop(c) twd_timer_stop((c))
|
|
|
|
#else
|
|
|
|
/*
|
|
* Stop the local timer
|
|
*/
|
|
void local_timer_stop(struct clock_event_device *);
|
|
|
|
#endif
|
|
|
|
/*
|
|
* Setup a local timer interrupt for a CPU.
|
|
*/
|
|
int local_timer_setup(struct clock_event_device *);
|
|
|
|
/*
|
|
* Register a local timer driver
|
|
*/
|
|
int local_timer_register(struct local_timer_ops *);
|
|
|
|
#else
|
|
|
|
static inline int local_timer_setup(struct clock_event_device *evt)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
|
|
static inline void local_timer_stop(struct clock_event_device *evt)
|
|
{
|
|
}
|
|
|
|
static inline int local_timer_register(struct local_timer_ops *ops)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
#endif
|
|
|
|
#endif
|