]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ppc32/timer-decr-ppc32.cpp
Inital import
[l4.git] / kernel / fiasco / src / kern / ppc32 / timer-decr-ppc32.cpp
1 /**
2  * PowerPC timer using internal decrementer
3  */
4
5 IMPLEMENTATION [ppc32]:
6
7 #include "cpu.h"
8 #include "config.h"
9 #include "globals.h"
10 #include "kip.h"
11 #include "decrementer.h"
12 #include "warn.h"
13
14 #include <cstdio>
15
16 IMPLEMENT inline NEEDS ["decrementer.h", "kip.h", "config.h", <cstdio>]
17 void
18 Timer::init()
19 {
20   printf("Using PowerPC decrementer for scheduling\n");
21
22   //1000 Hz
23   Decrementer::d()->init(Kip::k()->frequency_bus /
24                          (4*Config::scheduler_granularity));
25
26 }
27
28 IMPLEMENT inline NEEDS ["decrementer.h"]
29 void
30 Timer::enable()
31 {
32   Decrementer::d()->enable();
33 }
34
35 IMPLEMENT inline NEEDS ["decrementer.h"]
36 void
37 Timer::disable()
38 {
39   Decrementer::d()->disable();
40 }
41
42 IMPLEMENT inline NEEDS ["kip.h"]
43 void
44 Timer::init_system_clock()
45 {
46   Kip::k()->clock = 0;
47 }
48
49 IMPLEMENT inline NEEDS ["globals.h", "kip.h"]
50 Unsigned64
51 Timer::system_clock()
52 {
53   return Kip::k()->clock;
54 }
55
56 IMPLEMENT inline NEEDS ["decrementer.h", "config.h", "globals.h", "kip.h"]
57 void
58 Timer::update_system_clock()
59 {
60   //not boot cpu
61   if(current_cpu())
62     return;
63
64   Decrementer::d()->set();
65   Kip::k()->clock += Config::scheduler_granularity;
66 }
67