]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/timer_tick-single-vector.cpp
7bcc051f0a372f2a1ad63b5ad7f04a3c20c14261
[l4.git] / kernel / fiasco / src / kern / timer_tick-single-vector.cpp
1 INTERFACE:
2
3 #include "types.h"
4
5 EXTENSION class Timer_tick
6 {
7 public:
8   static Static_object<Timer_tick> _glbl_timer;
9 };
10
11 IMPLEMENTATION:
12
13 #include "timer.h"
14
15 Static_object<Timer_tick> Timer_tick::_glbl_timer;
16
17 IMPLEMENT void
18 Timer_tick::setup(unsigned cpu)
19 {
20   // all CPUs use the same timer IRQ, so initialize just on CPU 0
21   if (cpu != 0)
22     return;
23
24   _glbl_timer.construct(Any_cpu);
25   if (!allocate_irq(_glbl_timer, Timer::irq()))
26     panic("Could not allocate scheduling IRQ %d\n", Timer::irq());
27
28   _glbl_timer->set_mode(Timer::irq_mode());
29 }
30
31 IMPLEMENT
32 void
33 Timer_tick::enable(unsigned)
34 {
35   _glbl_timer->chip()->unmask(_glbl_timer->pin());
36 }
37
38 IMPLEMENT
39 void
40 Timer_tick::disable(unsigned)
41 {
42   _glbl_timer->chip()->mask(_glbl_timer->pin());
43 }
44
45 PUBLIC inline NEEDS["timer.h"]
46 void
47 Timer_tick::ack()
48 {
49   Timer::acknowledge();
50   Irq_base::ack();
51 }