1 // ---------------------------------------------------------------------
2 IMPLEMENTATION [arm && integrator]:
6 #include "irq_chip_generic.h"
8 #include "mmio_register_block.h"
11 class Irq_chip_arm_integr : public Irq_chip_gen, Mmio_register_block
17 IRQ_ENABLE_SET = 0x08,
18 IRQ_ENABLE_CLEAR = 0x0c,
20 FIQ_ENABLE_CLEAR = 0x2c,
27 unsigned set_mode(Mword, unsigned) { return Irq_base::Trigger_level; }
28 void set_cpu(Mword, Cpu_number) {}
29 void ack(Mword) { /* ack is empty */ }
33 Irq_chip_arm_integr::Irq_chip_arm_integr()
35 Mmio_register_block(Kmem::mmio_remap(Mem_layout::Pic_phys_base))
37 write<Mword>(0xffffffff, IRQ_ENABLE_CLEAR);
38 write<Mword>(0xffffffff, FIQ_ENABLE_CLEAR);
43 Irq_chip_arm_integr::mask(Mword irq)
45 assert(cpu_lock.test());
46 write<Mword>(1 << (irq - PIC_START), IRQ_ENABLE_CLEAR);
51 Irq_chip_arm_integr::mask_and_ack(Mword irq)
53 assert(cpu_lock.test());
54 write<Mword>(1 << (irq - PIC_START), IRQ_ENABLE_CLEAR);
60 Irq_chip_arm_integr::unmask(Mword irq)
62 assert(cpu_lock.test());
63 write<Mword>(1 << (irq - PIC_START), IRQ_ENABLE_SET);
66 static Static_object<Irq_mgr_single_chip<Irq_chip_arm_integr> > mgr;
71 Irq_mgr::mgr = mgr.construct();
75 Pic::Status Pic::disable_all_save()
82 void Pic::restore_all(Status)
86 Unsigned32 Irq_chip_arm_integr::pending()
88 return read<Mword>(IRQ_STATUS);
93 { mgr->c.handle_multi_pending<Irq_chip_arm_integr>(0); }
95 //---------------------------------------------------------------------------
96 IMPLEMENTATION [debug && integrator]:
100 Irq_chip_arm_integr::chip_type() const
101 { return "Integrator"; }