]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/bsp/tegra2/pic-arm-tegra2.cpp
update
[l4.git] / kernel / fiasco / src / kern / arm / bsp / tegra2 / pic-arm-tegra2.cpp
1 INTERFACE [arm && tegra2]:
2
3 #include "gic.h"
4
5 class Irq_base;
6
7 EXTENSION class Pic
8 {
9 public:
10   enum
11   {
12     Multi_irq_pending = 0,
13     No_irq_pending = 1023,
14   };
15 };
16
17 //-------------------------------------------------------------------
18 IMPLEMENTATION [arm && pic_gic && tegra2]:
19
20 #include <cstring>
21 #include <cstdio>
22
23 #include "config.h"
24 #include "initcalls.h"
25 #include "irq_chip.h"
26 #include "irq_chip_generic.h"
27 #include "kmem.h"
28
29 Gic Gic_pin::_gic[1];
30
31 class Irq_chip_tegra2 : public Irq_chip_gen
32 {
33 };
34
35 PUBLIC
36 void Irq_chip_tegra2::setup(Irq_base *irq, unsigned irqnum)
37 {
38   irq->pin()->replace<Gic_pin>(0, irqnum);
39 }
40
41 IMPLEMENT FIASCO_INIT
42 void Pic::init()
43 {
44   static Irq_chip_tegra2 _ia;
45   Irq_chip::hw_chip = &_ia;
46
47   Gic_pin::_gic[0].init(Kmem::Gic_cpu_map_base, Kmem::Gic_dist_map_base);
48 }
49
50 IMPLEMENT inline
51 Pic::Status Pic::disable_all_save()
52 { return 0; }
53
54 IMPLEMENT inline
55 void Pic::restore_all(Status)
56 {}
57
58 PUBLIC static inline
59 Unsigned32 Pic::pending()
60 {
61   return Gic_pin::_gic[0].pending();
62 }
63
64 PUBLIC static inline
65 Mword Pic::is_pending(Mword &irqs, Mword irq)
66 { return irqs == irq; }
67
68 //-------------------------------------------------------------------
69 IMPLEMENTATION [arm && mp && pic_gic && tegra2]:
70
71 PUBLIC static
72 void Pic::init_ap()
73 {
74   Gic_pin::_gic[0].init_ap();
75 }