]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/dirq_pic_pin.cpp
update
[l4.git] / kernel / fiasco / src / kern / dirq_pic_pin.cpp
1 INTERFACE:
2
3 #include "irq_pin.h"
4 #include "initcalls.h"
5
6 class Irq_base;
7
8 class Dirq_pic_pin : public Irq_pin
9 {
10 public:
11   explicit Dirq_pic_pin(unsigned irq) { payload()[0] = irq; }
12   unsigned irq() const { return payload()[0]; }
13
14   static void init() FIASCO_INIT;
15 };
16
17 //---------------------------------------------------------------------------
18 IMPLEMENTATION:
19
20 #include "irq.h"
21 #include "pic.h"
22 #include "vkey.h"
23 #if 0
24 PRIVATE static
25 bool
26 Dirq_pic_pin::setup_hw_pin(Irq_base *irq, unsigned irqnum)
27 {
28   if (irqnum >= Pic::nr_irqs())
29     return false;
30
31   new (irq->pin()) Dirq_pic_pin(irqnum);
32   return true;
33 }
34 #endif
35
36 PUBLIC
37 void
38 Dirq_pic_pin::unbind_irq()
39 {
40   do_mask();
41   disable();
42   Irq_chip::hw_chip->free(Irq::self(this), irq());
43   replace<Sw_irq_pin>();
44 }
45
46 PUBLIC
47 void
48 Dirq_pic_pin::do_mask()
49 {
50   assert (cpu_lock.test());
51   Pic::disable_locked(irq());
52 }
53
54
55 PUBLIC
56 void
57 Dirq_pic_pin::do_mask_and_ack()
58 {
59   assert (cpu_lock.test());
60   __mask();
61   Pic::disable_locked(irq());
62   Pic::acknowledge_locked(irq());
63 }
64
65 PUBLIC
66 void
67 Dirq_pic_pin::ack()
68 {
69   Pic::acknowledge_locked(irq());
70 }
71
72 PUBLIC
73 void
74 Dirq_pic_pin::do_set_mode(unsigned)
75 {}
76
77 PUBLIC
78 void
79 Dirq_pic_pin::do_unmask()
80 {
81   assert (cpu_lock.test());
82   Pic::enable_locked(irq(), 0xa); //prio);
83 #if 0
84   unsigned long prio;
85
86   if (EXPECT_FALSE(!Irq::self(this)->owner()))
87     return;
88   if (Irq::self(this)->owner() == (Receiver*)-1)
89     prio = ~0UL; // highes prio for JDB IRQs
90   else
91     prio = Irq::self(this)->owner()->sched()->prio();
92 #endif
93
94 }
95
96 PUBLIC
97 void
98 Dirq_pic_pin::set_cpu(unsigned)
99 {}
100
101 PUBLIC
102 bool
103 Dirq_pic_pin::check_debug_irq()
104 {
105   return !Vkey::check_(irq());
106 }
107
108 //---------------------------------------------------------------------------
109 IMPLEMENTATION [debug]:
110
111 PUBLIC
112 char const *
113 Dirq_pic_pin::pin_type() const
114 { return "HW IRQ (DIRQ)"; }
115