mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
Merge pull request #24 from primeseven1/rewrite
Fix ACPI IRQ override flag decoding for IOAPIC
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user