xref: /openbmc/linux/kernel/time/tick-internal.h (revision f8381cba04ba8173fd5a2b8e5cd8b3290ee13a98)
1 /*
2  * tick internal variable and functions used by low/high res code
3  */
4 DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
5 extern spinlock_t tick_device_lock;
6 extern ktime_t tick_next_period;
7 extern ktime_t tick_period;
8 
9 extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
10 extern void tick_handle_periodic(struct clock_event_device *dev);
11 
12 /*
13  * Broadcasting support
14  */
15 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
16 extern int tick_do_broadcast(cpumask_t mask);
17 extern struct tick_device tick_broadcast_device;
18 extern spinlock_t tick_broadcast_lock;
19 
20 extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu);
21 extern int tick_check_broadcast_device(struct clock_event_device *dev);
22 extern int tick_is_broadcast_device(struct clock_event_device *dev);
23 extern void tick_broadcast_on_off(unsigned long reason, int *oncpu);
24 extern void tick_shutdown_broadcast(unsigned int *cpup);
25 
26 extern void
27 tick_set_periodic_handler(struct clock_event_device *dev, int broadcast);
28 
29 #else /* !BROADCAST */
30 
31 static inline int tick_check_broadcast_device(struct clock_event_device *dev)
32 {
33 	return 0;
34 }
35 
36 static inline int tick_is_broadcast_device(struct clock_event_device *dev)
37 {
38 	return 0;
39 }
40 static inline int tick_device_uses_broadcast(struct clock_event_device *dev,
41 					     int cpu)
42 {
43 	return 0;
44 }
45 static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { }
46 static inline void tick_broadcast_on_off(unsigned long reason, int *oncpu) { }
47 static inline void tick_shutdown_broadcast(unsigned int *cpup) { }
48 
49 /*
50  * Set the periodic handler in non broadcast mode
51  */
52 static inline void tick_set_periodic_handler(struct clock_event_device *dev,
53 					     int broadcast)
54 {
55 	dev->event_handler = tick_handle_periodic;
56 }
57 #endif /* !BROADCAST */
58 
59 /*
60  * Check, if the device is functional or a dummy for broadcast
61  */
62 static inline int tick_device_is_functional(struct clock_event_device *dev)
63 {
64 	return !(dev->features & CLOCK_EVT_FEAT_DUMMY);
65 }
66