Interrupts

This page is ment to detail setting up interup thandling use "modern" devices on x86 64bit. For that we are using ACPI tables the IO-APIC and the local APIC.

Definitions

APIC Advanced Configuration and Power Interface
GIS Global System Interrupt
IOAPIC I/O Advanced Programmable Interrupt Controller
local APIC local Advanced Programmable Interrupt Controller
MDAT Multiple APIC Description Table

Prerequisite

The knowlage of what a IRQ is. A way to run code in 64bit. Able to find ACPI tables, a AML interpreter is not required right now.

Legacy ISA interrupts

The 16 legacy ISA interupts are mapped to first 16 GIS. By default these are edge triggered^1. Inside of the MADT table there can be overrides for these 16 interrupts. On QEMU some of the remappings are only there to change the trigger mode from edge to level.

GIS Global System Interrupts

Global System Interrupts are virtual interrupt numbers, various ACPI tables refere to these numbers. IOAPICs are mapped into the GIS, the information for that can be found in the MDAT table and the IOAPIC.

Futher reading

http://forum.osdev.org/viewtopic.php?t=11379
https://en.wikipedia.org/wiki/Intel_8259#Spurious_Interrupts