This source file includes following definitions.
- clockevent_state_detached
- clockevent_state_shutdown
- clockevent_state_periodic
- clockevent_state_oneshot
- clockevent_state_oneshot_stopped
- div_sc
- clockevents_calc_mult_shift
- tick_check_broadcast_expired
- tick_setup_hrtimer_broadcast
- clockevents_suspend
- clockevents_resume
- tick_check_broadcast_expired
- tick_setup_hrtimer_broadcast
1
2
3
4
5
6
7
8
9 #ifndef _LINUX_CLOCKCHIPS_H
10 #define _LINUX_CLOCKCHIPS_H
11
12 #ifdef CONFIG_GENERIC_CLOCKEVENTS
13
14 # include <linux/clocksource.h>
15 # include <linux/cpumask.h>
16 # include <linux/ktime.h>
17 # include <linux/notifier.h>
18
19 struct clock_event_device;
20 struct module;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 enum clock_event_state {
36 CLOCK_EVT_STATE_DETACHED,
37 CLOCK_EVT_STATE_SHUTDOWN,
38 CLOCK_EVT_STATE_PERIODIC,
39 CLOCK_EVT_STATE_ONESHOT,
40 CLOCK_EVT_STATE_ONESHOT_STOPPED,
41 };
42
43
44
45
46 # define CLOCK_EVT_FEAT_PERIODIC 0x000001
47 # define CLOCK_EVT_FEAT_ONESHOT 0x000002
48 # define CLOCK_EVT_FEAT_KTIME 0x000004
49
50
51
52
53
54
55
56 # define CLOCK_EVT_FEAT_C3STOP 0x000008
57 # define CLOCK_EVT_FEAT_DUMMY 0x000010
58
59
60
61
62 # define CLOCK_EVT_FEAT_DYNIRQ 0x000020
63 # define CLOCK_EVT_FEAT_PERCPU 0x000040
64
65
66
67
68 # define CLOCK_EVT_FEAT_HRTIMER 0x000080
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 struct clock_event_device {
101 void (*event_handler)(struct clock_event_device *);
102 int (*set_next_event)(unsigned long evt, struct clock_event_device *);
103 int (*set_next_ktime)(ktime_t expires, struct clock_event_device *);
104 ktime_t next_event;
105 u64 max_delta_ns;
106 u64 min_delta_ns;
107 u32 mult;
108 u32 shift;
109 enum clock_event_state state_use_accessors;
110 unsigned int features;
111 unsigned long retries;
112
113 int (*set_state_periodic)(struct clock_event_device *);
114 int (*set_state_oneshot)(struct clock_event_device *);
115 int (*set_state_oneshot_stopped)(struct clock_event_device *);
116 int (*set_state_shutdown)(struct clock_event_device *);
117 int (*tick_resume)(struct clock_event_device *);
118
119 void (*broadcast)(const struct cpumask *mask);
120 void (*suspend)(struct clock_event_device *);
121 void (*resume)(struct clock_event_device *);
122 unsigned long min_delta_ticks;
123 unsigned long max_delta_ticks;
124
125 const char *name;
126 int rating;
127 int irq;
128 int bound_on;
129 const struct cpumask *cpumask;
130 struct list_head list;
131 struct module *owner;
132 } ____cacheline_aligned;
133
134
135 static inline bool clockevent_state_detached(struct clock_event_device *dev)
136 {
137 return dev->state_use_accessors == CLOCK_EVT_STATE_DETACHED;
138 }
139
140 static inline bool clockevent_state_shutdown(struct clock_event_device *dev)
141 {
142 return dev->state_use_accessors == CLOCK_EVT_STATE_SHUTDOWN;
143 }
144
145 static inline bool clockevent_state_periodic(struct clock_event_device *dev)
146 {
147 return dev->state_use_accessors == CLOCK_EVT_STATE_PERIODIC;
148 }
149
150 static inline bool clockevent_state_oneshot(struct clock_event_device *dev)
151 {
152 return dev->state_use_accessors == CLOCK_EVT_STATE_ONESHOT;
153 }
154
155 static inline bool clockevent_state_oneshot_stopped(struct clock_event_device *dev)
156 {
157 return dev->state_use_accessors == CLOCK_EVT_STATE_ONESHOT_STOPPED;
158 }
159
160
161
162
163
164
165
166
167
168
169
170
171 static inline unsigned long
172 div_sc(unsigned long ticks, unsigned long nsec, int shift)
173 {
174 u64 tmp = ((u64)ticks) << shift;
175
176 do_div(tmp, nsec);
177
178 return (unsigned long) tmp;
179 }
180
181
182 extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt);
183 extern void clockevents_register_device(struct clock_event_device *dev);
184 extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu);
185
186 extern void clockevents_config_and_register(struct clock_event_device *dev,
187 u32 freq, unsigned long min_delta,
188 unsigned long max_delta);
189
190 extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq);
191
192 static inline void
193 clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 maxsec)
194 {
195 return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, freq, maxsec);
196 }
197
198 extern void clockevents_suspend(void);
199 extern void clockevents_resume(void);
200
201 # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
202 # ifdef CONFIG_ARCH_HAS_TICK_BROADCAST
203 extern void tick_broadcast(const struct cpumask *mask);
204 # else
205 # define tick_broadcast NULL
206 # endif
207 extern int tick_receive_broadcast(void);
208 # endif
209
210 # if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
211 extern void tick_setup_hrtimer_broadcast(void);
212 extern int tick_check_broadcast_expired(void);
213 # else
214 static inline int tick_check_broadcast_expired(void) { return 0; }
215 static inline void tick_setup_hrtimer_broadcast(void) { }
216 # endif
217
218 #else
219
220 static inline void clockevents_suspend(void) { }
221 static inline void clockevents_resume(void) { }
222 static inline int tick_check_broadcast_expired(void) { return 0; }
223 static inline void tick_setup_hrtimer_broadcast(void) { }
224
225 #endif
226
227 #endif