Merge pull request #24 from primeseven1/rewrite

Fix ACPI IRQ override flag decoding for IOAPIC
This commit is contained in:
Matheus
2026-01-28 11:17:15 -03:00
committed by GitHub
+3 -3
View File
@@ -135,15 +135,15 @@ void arch_apic_init_perf(void) {
void arch_ioapic_setirq(uint8_t irq, uint8_t vector, uint8_t proc, bool masked) { void arch_ioapic_setirq(uint8_t irq, uint8_t vector, uint8_t proc, bool masked) {
// default settings for ISA irqs // default settings for ISA irqs
uint8_t polarity = 1; // active high uint8_t polarity = 0; // active high
uint8_t trigger = 0; // edge triggered uint8_t trigger = 0; // edge triggered
for (uintmax_t i = 0; i < override_count; ++i) { for (uintmax_t i = 0; i < override_count; ++i) {
struct acpi_madt_interrupt_source_override *override = getentry(ACPI_MADT_ENTRY_TYPE_INTERRUPT_SOURCE_OVERRIDE, i); struct acpi_madt_interrupt_source_override *override = getentry(ACPI_MADT_ENTRY_TYPE_INTERRUPT_SOURCE_OVERRIDE, i);
if (override->source != irq) if (override->source != irq)
continue; continue;
polarity = override->flags & 2 ? 1 : 0; // active low polarity = ((override->flags & 0b11) == 0b11) ? 1 : 0; // active low : active high
trigger = override->flags & 8 ? 1 : 0; // level triggered trigger = (((override->flags >> 2) & 0b11) == 0b11) ? 1 : 0; // level triggered : edge triggered
irq = override->gsi; irq = override->gsi;
break; break;
} }