mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
foc: Extend irq mode heuristics
Explicitly set default mode for legacy interrupts to not rely on kernel default settings. This patch fixes the constantly busy IRQ threads for IRQ 1 and 12 as soon as the PS/2 driver was loaded until the point when the first IRQ occurred.
This commit is contained in:
parent
91b0578446
commit
171aa332b7
@ -51,24 +51,29 @@ void Genode::Platform::setup_irq_mode(unsigned irq_number, unsigned trigger,
|
||||
{
|
||||
using namespace Fiasco;
|
||||
|
||||
/* don't touch anything below IRQ 16 in the default case */
|
||||
if (irq_number < 16 && trigger == Irq_session::TRIGGER_UNCHANGED &&
|
||||
polarity == Irq_session::TRIGGER_UNCHANGED)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Translate ACPI interrupt mode (trigger/polarity) to Fiasco APIC
|
||||
* values. Default is level low for IRQs > 15
|
||||
*/
|
||||
l4_umword_t mode;
|
||||
mode = (trigger == Irq_session::TRIGGER_LEVEL) ||
|
||||
(irq_number > 15 && trigger == Irq_session::TRIGGER_UNCHANGED)
|
||||
? L4_IRQ_F_LEVEL : L4_IRQ_F_EDGE;
|
||||
|
||||
mode |= (polarity == Irq_session::POLARITY_LOW) ||
|
||||
(irq_number > 15 && polarity == Irq_session::POLARITY_UNCHANGED)
|
||||
? L4_IRQ_F_NEG : L4_IRQ_F_POS;
|
||||
/* set edge-high as default for legacy interrupts */
|
||||
if (irq_number < 16
|
||||
&& trigger == Irq_session::TRIGGER_UNCHANGED
|
||||
&& polarity == Irq_session::TRIGGER_UNCHANGED) {
|
||||
|
||||
mode = L4_IRQ_F_POS_EDGE;
|
||||
|
||||
} else {
|
||||
|
||||
/*
|
||||
* Translate ACPI interrupt mode (trigger/polarity) to Fiasco APIC
|
||||
* values. Default is level low for IRQs > 15
|
||||
*/
|
||||
mode = (trigger == Irq_session::TRIGGER_LEVEL) ||
|
||||
(irq_number > 15 && trigger == Irq_session::TRIGGER_UNCHANGED)
|
||||
? L4_IRQ_F_LEVEL : L4_IRQ_F_EDGE;
|
||||
|
||||
mode |= (polarity == Irq_session::POLARITY_LOW) ||
|
||||
(irq_number > 15 && polarity == Irq_session::POLARITY_UNCHANGED)
|
||||
? L4_IRQ_F_NEG : L4_IRQ_F_POS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set mode
|
||||
|
Loading…
x
Reference in New Issue
Block a user