Blame view
include/linux/clockchips.h
6.56 KB
d316c57ff [PATCH] clockeven... |
1 2 3 4 5 6 7 8 9 |
/* linux/include/linux/clockchips.h * * This file contains the structure definitions for clockchips. * * If you are not a clockchip, or the time of day code, you should * not be including this file! */ #ifndef _LINUX_CLOCKCHIPS_H #define _LINUX_CLOCKCHIPS_H |
4dbad816f timer: move enum ... |
10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* Clock event notification values */ enum clock_event_nofitiers { CLOCK_EVT_NOTIFY_ADD, CLOCK_EVT_NOTIFY_BROADCAST_ON, CLOCK_EVT_NOTIFY_BROADCAST_OFF, CLOCK_EVT_NOTIFY_BROADCAST_FORCE, CLOCK_EVT_NOTIFY_BROADCAST_ENTER, CLOCK_EVT_NOTIFY_BROADCAST_EXIT, CLOCK_EVT_NOTIFY_SUSPEND, CLOCK_EVT_NOTIFY_RESUME, CLOCK_EVT_NOTIFY_CPU_DYING, CLOCK_EVT_NOTIFY_CPU_DEAD, }; |
de68d9b17 clockevents: Allo... |
23 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD |
d316c57ff [PATCH] clockeven... |
24 25 26 27 28 29 30 |
#include <linux/clocksource.h> #include <linux/cpumask.h> #include <linux/ktime.h> #include <linux/notifier.h> struct clock_event_device; |
ccf33d688 clockevents: Add ... |
31 |
struct module; |
d316c57ff [PATCH] clockeven... |
32 33 34 35 36 37 38 |
/* Clock event mode commands */ enum clock_event_mode { CLOCK_EVT_MODE_UNUSED = 0, CLOCK_EVT_MODE_SHUTDOWN, CLOCK_EVT_MODE_PERIODIC, CLOCK_EVT_MODE_ONESHOT, |
18de5bc4c clockevents: fix ... |
39 |
CLOCK_EVT_MODE_RESUME, |
d316c57ff [PATCH] clockeven... |
40 |
}; |
d316c57ff [PATCH] clockeven... |
41 42 43 44 45 |
/* * Clock event features */ #define CLOCK_EVT_FEAT_PERIODIC 0x000001 #define CLOCK_EVT_FEAT_ONESHOT 0x000002 |
65516f8a7 clockevents: Add ... |
46 |
#define CLOCK_EVT_FEAT_KTIME 0x000004 |
d316c57ff [PATCH] clockeven... |
47 48 49 50 51 52 |
/* * x86(64) specific misfeatures: * * - Clockevent source stops in C3 State and needs broadcast support. * - Local APIC timer is used as a dummy device. */ |
65516f8a7 clockevents: Add ... |
53 54 |
#define CLOCK_EVT_FEAT_C3STOP 0x000008 #define CLOCK_EVT_FEAT_DUMMY 0x000010 |
d316c57ff [PATCH] clockeven... |
55 |
|
d2348fb6f tick: Dynamically... |
56 57 58 59 |
/* * Core shall set the interrupt affinity dynamically in broadcast mode */ #define CLOCK_EVT_FEAT_DYNIRQ 0x000020 |
3713c0cfd clockchips: Add F... |
60 |
#define CLOCK_EVT_FEAT_PERCPU 0x000040 |
d2348fb6f tick: Dynamically... |
61 |
|
5d1638acb tick: Introduce h... |
62 63 64 65 |
/* * Clockevent device is based on a hrtimer for broadcast */ #define CLOCK_EVT_FEAT_HRTIMER 0x000080 |
d316c57ff [PATCH] clockeven... |
66 67 |
/** * struct clock_event_device - clock event device descriptor |
847b2f42b clockevents: Rest... |
68 69 |
* @event_handler: Assigned by the framework to be called by the low * level handler of the event source |
65516f8a7 clockevents: Add ... |
70 71 |
* @set_next_event: set next event function using a clocksource delta * @set_next_ktime: set next event function using a direct ktime value |
847b2f42b clockevents: Rest... |
72 |
* @next_event: local storage for the next event in oneshot mode |
d316c57ff [PATCH] clockeven... |
73 74 75 76 |
* @max_delta_ns: maximum delta value in ns * @min_delta_ns: minimum delta value in ns * @mult: nanosecond to cycles multiplier * @shift: nanoseconds to cycles divisor (power of two) |
847b2f42b clockevents: Rest... |
77 78 79 80 81 |
* @mode: operating mode assigned by the management code * @features: features * @retries: number of forced programming retries * @set_mode: set mode function * @broadcast: function to broadcast events |
57f0fcbe1 clockevents: Prov... |
82 83 |
* @min_delta_ticks: minimum delta value in ticks stored for reconfiguration * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration |
847b2f42b clockevents: Rest... |
84 |
* @name: ptr to clock event name |
d316c57ff [PATCH] clockeven... |
85 |
* @rating: variable to rate clock event devices |
ce0be1273 clockchips.h: ker... |
86 |
* @irq: IRQ number (only for non CPU local devices) |
5d1638acb tick: Introduce h... |
87 |
* @bound_on: Bound on CPU |
ce0be1273 clockchips.h: ker... |
88 |
* @cpumask: cpumask to indicate for which CPUs this device works |
d316c57ff [PATCH] clockeven... |
89 |
* @list: list head for the management code |
ccf33d688 clockevents: Add ... |
90 |
* @owner: module reference |
d316c57ff [PATCH] clockeven... |
91 92 |
*/ struct clock_event_device { |
847b2f42b clockevents: Rest... |
93 94 95 |
void (*event_handler)(struct clock_event_device *); int (*set_next_event)(unsigned long evt, struct clock_event_device *); |
65516f8a7 clockevents: Add ... |
96 97 |
int (*set_next_ktime)(ktime_t expires, struct clock_event_device *); |
847b2f42b clockevents: Rest... |
98 |
ktime_t next_event; |
97813f2fe nohz: Allow 32-bi... |
99 100 |
u64 max_delta_ns; u64 min_delta_ns; |
23af368e9 clockevents: Use ... |
101 102 |
u32 mult; u32 shift; |
847b2f42b clockevents: Rest... |
103 104 105 106 107 108 109 |
enum clock_event_mode mode; unsigned int features; unsigned long retries; void (*broadcast)(const struct cpumask *mask); void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *); |
adc78e6b9 timekeeping: Add ... |
110 111 |
void (*suspend)(struct clock_event_device *); void (*resume)(struct clock_event_device *); |
57f0fcbe1 clockevents: Prov... |
112 113 |
unsigned long min_delta_ticks; unsigned long max_delta_ticks; |
847b2f42b clockevents: Rest... |
114 |
const char *name; |
d316c57ff [PATCH] clockeven... |
115 116 |
int rating; int irq; |
5d1638acb tick: Introduce h... |
117 |
int bound_on; |
320ab2b0b cpumask: convert ... |
118 |
const struct cpumask *cpumask; |
d316c57ff [PATCH] clockeven... |
119 |
struct list_head list; |
ccf33d688 clockevents: Add ... |
120 |
struct module *owner; |
847b2f42b clockevents: Rest... |
121 |
} ____cacheline_aligned; |
d316c57ff [PATCH] clockeven... |
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
/* * Calculate a multiplication factor for scaled math, which is used to convert * nanoseconds based values to clock ticks: * * clock_ticks = (nanoseconds * factor) >> shift. * * div_sc is the rearranged equation to calculate a factor from a given clock * ticks / nanoseconds ratio: * * factor = (clock_ticks << shift) / nanoseconds */ static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec, int shift) { uint64_t tmp = ((uint64_t)ticks) << shift; do_div(tmp, nsec); return (unsigned long) tmp; } /* Clock event layer functions */ |
97813f2fe nohz: Allow 32-bi... |
144 145 |
extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt); |
d316c57ff [PATCH] clockeven... |
146 |
extern void clockevents_register_device(struct clock_event_device *dev); |
03e13cf5e clockevents: Impl... |
147 |
extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu); |
d316c57ff [PATCH] clockeven... |
148 |
|
e5400321a clockevents: Make... |
149 |
extern void clockevents_config(struct clock_event_device *dev, u32 freq); |
57f0fcbe1 clockevents: Prov... |
150 151 152 |
extern void clockevents_config_and_register(struct clock_event_device *dev, u32 freq, unsigned long min_delta, unsigned long max_delta); |
80b816b73 clockevents: Prov... |
153 |
extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); |
d316c57ff [PATCH] clockeven... |
154 155 |
extern void clockevents_exchange_device(struct clock_event_device *old, struct clock_event_device *new); |
d316c57ff [PATCH] clockeven... |
156 157 |
extern void clockevents_set_mode(struct clock_event_device *dev, enum clock_event_mode mode); |
d316c57ff [PATCH] clockeven... |
158 |
extern int clockevents_program_event(struct clock_event_device *dev, |
d1748302f clockevents: Make... |
159 |
ktime_t expires, bool force); |
d316c57ff [PATCH] clockeven... |
160 |
|
7c1e76897 clockevents: prev... |
161 |
extern void clockevents_handle_noop(struct clock_event_device *dev); |
7d2f944a2 clocksource: Prov... |
162 163 164 165 166 167 |
static inline void clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) { return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, freq, minsec); } |
adc78e6b9 timekeeping: Add ... |
168 169 |
extern void clockevents_suspend(void); extern void clockevents_resume(void); |
12572dbb5 clockevents: Add ... |
170 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
12ad10004 clockevents: Add ... |
171 172 173 174 175 |
#ifdef CONFIG_ARCH_HAS_TICK_BROADCAST extern void tick_broadcast(const struct cpumask *mask); #else #define tick_broadcast NULL #endif |
12572dbb5 clockevents: Add ... |
176 177 |
extern int tick_receive_broadcast(void); #endif |
eaa907c54 tick: Provide a c... |
178 |
#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) |
5d1638acb tick: Introduce h... |
179 |
extern void tick_setup_hrtimer_broadcast(void); |
eaa907c54 tick: Provide a c... |
180 181 182 |
extern int tick_check_broadcast_expired(void); #else static inline int tick_check_broadcast_expired(void) { return 0; } |
f1689bb7a time: Fixup fallo... |
183 |
static inline void tick_setup_hrtimer_broadcast(void) {}; |
eaa907c54 tick: Provide a c... |
184 |
#endif |
de68d9b17 clockevents: Allo... |
185 |
#ifdef CONFIG_GENERIC_CLOCKEVENTS |
da7e6f45c time: Change the ... |
186 |
extern int clockevents_notify(unsigned long reason, void *arg); |
d316c57ff [PATCH] clockeven... |
187 |
#else |
da7e6f45c time: Change the ... |
188 |
static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; } |
de68d9b17 clockevents: Allo... |
189 190 191 |
#endif #else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */ |
d316c57ff [PATCH] clockeven... |
192 |
|
adc78e6b9 timekeeping: Add ... |
193 194 |
static inline void clockevents_suspend(void) {} static inline void clockevents_resume(void) {} |
da7e6f45c time: Change the ... |
195 |
static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; } |
19919226c clockevents: Add ... |
196 |
static inline int tick_check_broadcast_expired(void) { return 0; } |
849401b66 tick: Fixup more ... |
197 |
static inline void tick_setup_hrtimer_broadcast(void) {}; |
d316c57ff [PATCH] clockeven... |
198 199 200 201 |
#endif #endif |