linux/drivers/clocksource/timer-of.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __TIMER_OF_H__
   3#define __TIMER_OF_H__
   4
   5#include <linux/clockchips.h>
   6
   7#define TIMER_OF_BASE   0x1
   8#define TIMER_OF_CLOCK  0x2
   9#define TIMER_OF_IRQ    0x4
  10
  11struct of_timer_irq {
  12        int irq;
  13        int index;
  14        int percpu;
  15        const char *name;
  16        unsigned long flags;
  17        irq_handler_t handler;
  18};
  19
  20struct of_timer_base {
  21        void __iomem *base;
  22        const char *name;
  23        int index;
  24};
  25
  26struct of_timer_clk {
  27        struct clk *clk;
  28        const char *name;
  29        int index;
  30        unsigned long rate;
  31        unsigned long period;
  32};
  33
  34struct timer_of {
  35        unsigned int flags;
  36        struct device_node *np;
  37        struct clock_event_device clkevt;
  38        struct of_timer_base of_base;
  39        struct of_timer_irq  of_irq;
  40        struct of_timer_clk  of_clk;
  41        void *private_data;
  42};
  43
  44static inline struct timer_of *to_timer_of(struct clock_event_device *clkevt)
  45{
  46        return container_of(clkevt, struct timer_of, clkevt);
  47}
  48
  49static inline void __iomem *timer_of_base(struct timer_of *to)
  50{
  51        return to->of_base.base;
  52}
  53
  54static inline int timer_of_irq(struct timer_of *to)
  55{
  56        return to->of_irq.irq;
  57}
  58
  59static inline unsigned long timer_of_rate(struct timer_of *to)
  60{
  61        return to->of_clk.rate;
  62}
  63
  64static inline unsigned long timer_of_period(struct timer_of *to)
  65{
  66        return to->of_clk.period;
  67}
  68
  69extern int __init timer_of_init(struct device_node *np,
  70                                struct timer_of *to);
  71
  72extern void __init timer_of_cleanup(struct timer_of *to);
  73
  74#endif
  75