6 #include "irq_chip_ux_base.h"
8 #include "irq_chip_ia32.h"
12 public Irq_chip_ux_base,
14 private Irq_chip_ia32,
17 friend class Irq_chip_ia32;
19 bool reserve(Mword pin) override { return Irq_chip_ia32::reserve(pin); }
20 Irq_base *irq(Mword pin) const override { return Irq_chip_ia32::irq(pin); }
21 unsigned nr_irqs() const override { return Num_irqs; }
22 unsigned nr_msis() const override { return 0; }
24 void mask(Mword) override {}
25 void ack(Mword) override {}
26 void mask_and_ack(Mword) override {}
27 int set_mode(Mword, Mode) override { return 0; }
28 bool is_edge_triggered(Mword) const override { return false; }
29 void set_cpu(Mword, Cpu_number) override {}
31 Irq_mgr::Irq chip(Mword pin) const override
34 return Irq(const_cast<Irq_chip_ux*>(this), pin);
48 #include "boot_info.h"
52 Irq_chip_ux::alloc(Irq_base *irq, Mword irqn)
57 // PIC uses 16 vectors from Base_vector statically
58 unsigned vector = _base_vect + irqn;
59 return valloc<Irq_chip_ux>(irq, irqn, vector);
65 Irq_chip_ux::unmask(Mword pin)
67 assert (pin < Num_irqs);
69 // If fd is zero, someone tried to activate an IRQ without provider
72 int flags = fcntl(p.fd, F_GETFL);
74 || fcntl(p.fd, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0
75 || fcntl(p.fd, F_SETSIG, SIGIO) < 0
76 || fcntl(p.fd, F_SETOWN, Boot_info::pid()) < 0)
80 if (pin >= highest_irq)
81 highest_irq = pin + 1;
83 static void irq_prov_shutdown()
85 if (Irq_chip_ux::main)
86 Irq_chip_ux::main->shutdown();
90 Irq_chip_ux::Irq_chip_ux(bool is_main) : Irq_chip_ia32(Num_irqs)
96 atexit(irq_prov_shutdown);
100 // -----------------------------------------------------------------
101 IMPLEMENTATION [ux && debug]:
105 Irq_chip_ux::chip_type() const