]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/bsp/s3c/timer-arm-s3c2410.cpp
592a53fa51da4d0619253d784cdd2899a559d247
[l4.git] / kernel / fiasco / src / kern / arm / bsp / s3c / timer-arm-s3c2410.cpp
1 INTERFACE [arm && s3c2410]:
2
3 #include "kmem.h"
4
5 EXTENSION class Timer
6 {
7 public:
8   static unsigned irq() { return 14; }
9
10 private:
11   enum {
12     TCFG0  = Kmem::Timer_map_base + 0x00,
13     TCFG1  = Kmem::Timer_map_base + 0x04,
14     TCON   = Kmem::Timer_map_base + 0x08,
15     TCNTB0 = Kmem::Timer_map_base + 0x0c,
16     TCMPB0 = Kmem::Timer_map_base + 0x10,
17     TCNTO0 = Kmem::Timer_map_base + 0x14,
18     TCNTB1 = Kmem::Timer_map_base + 0x18,
19     TCMPB1 = Kmem::Timer_map_base + 0x1c,
20     TCNTO1 = Kmem::Timer_map_base + 0x20,
21     TCNTB2 = Kmem::Timer_map_base + 0x24,
22     TCMPB2 = Kmem::Timer_map_base + 0x28,
23     TCNTO2 = Kmem::Timer_map_base + 0x2c,
24     TCNTB3 = Kmem::Timer_map_base + 0x30,
25     TCMPB3 = Kmem::Timer_map_base + 0x34,
26     TCNTO3 = Kmem::Timer_map_base + 0x38,
27     TCNTB4 = Kmem::Timer_map_base + 0x3c,
28     TCNTO4 = Kmem::Timer_map_base + 0x40,
29
30   };
31 };
32
33 // -----------------------------------------------------------------------
34 IMPLEMENTATION [arm && s3c2410]:
35
36 #include "config.h"
37 #include "kip.h"
38 #include "io.h"
39
40 #include <cstdio>
41
42 IMPLEMENT
43 void Timer::init(unsigned)
44 {
45   Io::write(0, TCFG0); // prescaler config
46   Io::write(0, TCFG1); // mux select
47   Io::write(33333, TCNTB4); // reload value
48
49   Io::write(5 << 20, TCON); // start + autoreload
50 }
51
52 PUBLIC static inline
53 void
54 Timer::acknowledge()
55 {}
56
57 static inline
58 Unsigned64
59 Timer::timer_to_us(Unsigned32 /*cr*/)
60 { return 0; }
61
62 static inline
63 Unsigned64
64 Timer::us_to_timer(Unsigned64 us)
65 { (void)us; return 0; }
66
67 IMPLEMENT inline
68 void
69 Timer::update_one_shot(Unsigned64 wakeup)
70 {
71   (void)wakeup;
72 }
73
74 IMPLEMENT inline NEEDS["config.h", "kip.h", "io.h", Timer::timer_to_us]
75 Unsigned64
76 Timer::system_clock()
77 {
78   if (Config::Scheduler_one_shot)
79     //return Kip::k()->clock + timer_to_us(Io::read<Unsigned32>(OSCR));
80     return 0;
81   else
82     return Kip::k()->clock;
83 }