mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
2bcc673101
Pull timer updates from Thomas Gleixner: "Yet another big pile of changes: - More year 2038 work from Arnd slowly reaching the point where we need to think about the syscalls themself. - A new timer function which allows to conditionally (re)arm a timer only when it's either not running or the new expiry time is sooner than the armed expiry time. This allows to use a single timer for multiple timeout requirements w/o caring about the first expiry time at the call site. - A new NMI safe accessor to clock real time for the printk timestamp work. Can be used by tracing, perf as well if required. - A large number of timer setup conversions from Kees which got collected here because either maintainers requested so or they simply got ignored. As Kees pointed out already there are a few trivial merge conflicts and some redundant commits which was unavoidable due to the size of this conversion effort. - Avoid a redundant iteration in the timer wheel softirq processing. - Provide a mechanism to treat RTC implementations depending on their hardware properties, i.e. don't inflict the write at the 0.5 seconds boundary which originates from the PC CMOS RTC to all RTCs. No functional change as drivers need to be updated separately. - The usual small updates to core code clocksource drivers. Nothing really exciting" * 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (111 commits) timers: Add a function to start/reduce a timer pstore: Use ktime_get_real_fast_ns() instead of __getnstimeofday() timer: Prepare to change all DEFINE_TIMER() callbacks netfilter: ipvs: Convert timers to use timer_setup() scsi: qla2xxx: Convert timers to use timer_setup() block/aoe: discover_timer: Convert timers to use timer_setup() ide: Convert timers to use timer_setup() drbd: Convert timers to use timer_setup() mailbox: Convert timers to use timer_setup() crypto: Convert timers to use timer_setup() drivers/pcmcia: omap1: Fix error in automated timer conversion ARM: footbridge: Fix typo in timer conversion drivers/sgi-xp: Convert timers to use timer_setup() drivers/pcmcia: Convert timers to use timer_setup() drivers/memstick: Convert timers to use timer_setup() drivers/macintosh: Convert timers to use timer_setup() hwrng/xgene-rng: Convert timers to use timer_setup() auxdisplay: Convert timers to use timer_setup() sparc/led: Convert timers to use timer_setup() mips: ip22/32: Convert timers to use timer_setup() ...
74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __TIMER_OF_H__
|
|
#define __TIMER_OF_H__
|
|
|
|
#include <linux/clockchips.h>
|
|
|
|
#define TIMER_OF_BASE 0x1
|
|
#define TIMER_OF_CLOCK 0x2
|
|
#define TIMER_OF_IRQ 0x4
|
|
|
|
struct of_timer_irq {
|
|
int irq;
|
|
int index;
|
|
int percpu;
|
|
const char *name;
|
|
unsigned long flags;
|
|
irq_handler_t handler;
|
|
};
|
|
|
|
struct of_timer_base {
|
|
void __iomem *base;
|
|
const char *name;
|
|
int index;
|
|
};
|
|
|
|
struct of_timer_clk {
|
|
struct clk *clk;
|
|
const char *name;
|
|
int index;
|
|
unsigned long rate;
|
|
unsigned long period;
|
|
};
|
|
|
|
struct timer_of {
|
|
unsigned int flags;
|
|
struct clock_event_device clkevt;
|
|
struct of_timer_base of_base;
|
|
struct of_timer_irq of_irq;
|
|
struct of_timer_clk of_clk;
|
|
void *private_data;
|
|
};
|
|
|
|
static inline struct timer_of *to_timer_of(struct clock_event_device *clkevt)
|
|
{
|
|
return container_of(clkevt, struct timer_of, clkevt);
|
|
}
|
|
|
|
static inline void __iomem *timer_of_base(struct timer_of *to)
|
|
{
|
|
return to->of_base.base;
|
|
}
|
|
|
|
static inline int timer_of_irq(struct timer_of *to)
|
|
{
|
|
return to->of_irq.irq;
|
|
}
|
|
|
|
static inline unsigned long timer_of_rate(struct timer_of *to)
|
|
{
|
|
return to->of_clk.rate;
|
|
}
|
|
|
|
static inline unsigned long timer_of_period(struct timer_of *to)
|
|
{
|
|
return to->of_clk.period;
|
|
}
|
|
|
|
extern int __init timer_of_init(struct device_node *np,
|
|
struct timer_of *to);
|
|
|
|
extern void timer_of_exit(struct timer_of *to);
|
|
|
|
#endif
|