75 строки
1.4 KiB
C
75 строки
1.4 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 device_node *np;
|
|
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 __init timer_of_cleanup(struct timer_of *to);
|
|
|
|
#endif
|