Blame view

kernel/time/tick-internal.h 4.31 KB
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
1
2
3
  /*
   * tick internal variable and functions used by low/high res code
   */
6441402b1   Thomas Gleixner   clockevents: prev...
4
5
6
  
  #define TICK_DO_TIMER_NONE	-1
  #define TICK_DO_TIMER_BOOT	-2
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
7
8
9
10
  DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
  extern spinlock_t tick_device_lock;
  extern ktime_t tick_next_period;
  extern ktime_t tick_period;
d3ed78245   Thomas Gleixner   highres/dyntick: ...
11
  extern int tick_do_timer_cpu __read_mostly;
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
12
13
14
  
  extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
  extern void tick_handle_periodic(struct clock_event_device *dev);
2344abbcb   Thomas Gleixner   clockevents: make...
15
  extern void clockevents_shutdown(struct clock_event_device *dev);
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
16
  /*
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
17
18
19
20
21
22
   * NO_HZ / high resolution timer shared code
   */
  #ifdef CONFIG_TICK_ONESHOT
  extern void tick_setup_oneshot(struct clock_event_device *newdev,
  			       void (*handler)(struct clock_event_device *),
  			       ktime_t nextevt);
1fb9b7d29   Thomas Gleixner   clockevents: prev...
23
24
  extern int tick_dev_program_event(struct clock_event_device *dev,
  				  ktime_t expires, int force);
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
25
26
27
  extern int tick_program_event(ktime_t expires, int force);
  extern void tick_oneshot_notify(void);
  extern int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *));
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
28
  extern void tick_resume_oneshot(void);
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
29
30
31
32
33
  # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
  extern void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
  extern void tick_broadcast_oneshot_control(unsigned long reason);
  extern void tick_broadcast_switch_to_oneshot(void);
  extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup);
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
34
  extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc);
27ce4cb4a   Thomas Gleixner   clockevents: prev...
35
  extern int tick_broadcast_oneshot_active(void);
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
36
37
38
39
40
41
42
43
  # else /* BROADCAST */
  static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
  {
  	BUG();
  }
  static inline void tick_broadcast_oneshot_control(unsigned long reason) { }
  static inline void tick_broadcast_switch_to_oneshot(void) { }
  static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
27ce4cb4a   Thomas Gleixner   clockevents: prev...
44
  static inline int tick_broadcast_oneshot_active(void) { return 0; }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
45
46
47
48
49
50
51
52
53
54
  # endif /* !BROADCAST */
  
  #else /* !ONESHOT */
  static inline
  void tick_setup_oneshot(struct clock_event_device *newdev,
  			void (*handler)(struct clock_event_device *),
  			ktime_t nextevt)
  {
  	BUG();
  }
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
55
56
57
58
  static inline void tick_resume_oneshot(void)
  {
  	BUG();
  }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
59
60
61
62
63
64
65
66
67
68
69
  static inline int tick_program_event(ktime_t expires, int force)
  {
  	return 0;
  }
  static inline void tick_oneshot_notify(void) { }
  static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
  {
  	BUG();
  }
  static inline void tick_broadcast_oneshot_control(unsigned long reason) { }
  static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
70
71
72
73
  static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc)
  {
  	return 0;
  }
f8e256c68   Ingo Molnar   timers: fix build...
74
  static inline int tick_broadcast_oneshot_active(void) { return 0; }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
75
76
77
  #endif /* !TICK_ONESHOT */
  
  /*
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
78
79
80
   * Broadcasting support
   */
  #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
81
82
83
84
85
  extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu);
  extern int tick_check_broadcast_device(struct clock_event_device *dev);
  extern int tick_is_broadcast_device(struct clock_event_device *dev);
  extern void tick_broadcast_on_off(unsigned long reason, int *oncpu);
  extern void tick_shutdown_broadcast(unsigned int *cpup);
6321dd60c   Thomas Gleixner   [PATCH] Save/rest...
86
87
  extern void tick_suspend_broadcast(void);
  extern int tick_resume_broadcast(void);
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  
  extern void
  tick_set_periodic_handler(struct clock_event_device *dev, int broadcast);
  
  #else /* !BROADCAST */
  
  static inline int tick_check_broadcast_device(struct clock_event_device *dev)
  {
  	return 0;
  }
  
  static inline int tick_is_broadcast_device(struct clock_event_device *dev)
  {
  	return 0;
  }
  static inline int tick_device_uses_broadcast(struct clock_event_device *dev,
  					     int cpu)
  {
  	return 0;
  }
  static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { }
  static inline void tick_broadcast_on_off(unsigned long reason, int *oncpu) { }
  static inline void tick_shutdown_broadcast(unsigned int *cpup) { }
6321dd60c   Thomas Gleixner   [PATCH] Save/rest...
111
112
  static inline void tick_suspend_broadcast(void) { }
  static inline int tick_resume_broadcast(void) { return 0; }
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
  
  /*
   * Set the periodic handler in non broadcast mode
   */
  static inline void tick_set_periodic_handler(struct clock_event_device *dev,
  					     int broadcast)
  {
  	dev->event_handler = tick_handle_periodic;
  }
  #endif /* !BROADCAST */
  
  /*
   * Check, if the device is functional or a dummy for broadcast
   */
  static inline int tick_device_is_functional(struct clock_event_device *dev)
  {
  	return !(dev->features & CLOCK_EVT_FEAT_DUMMY);
  }