Implement PIT interrupts

This commit is contained in:
2025-08-22 12:37:48 +02:00
parent 9d8849a425
commit 182c6e2956
13 changed files with 354 additions and 145 deletions

View File

@ -9,6 +9,10 @@
#include "util/util.h"
#include "bootinfo/bootinfo.h"
#include "uacpi/uacpi.h"
#include "uacpi/acpi.h"
#include "apic.h"
struct acpi_madt *MADT = NULL;
// uACPI
@ -55,5 +59,22 @@ void acpi_init(void) {
LOG("hal", "acpi init\n");
}
/* uint32_t acpi_remapirq(uint32_t irq) { */
/* } */
uint8_t acpi_remapirq(uint8_t irq) {
uint64_t cur = (uint64_t)&MADT->entries;
uint64_t end = cur + MADT->hdr.length;
while (cur < end) {
struct acpi_entry_hdr *ent = (struct acpi_entry_hdr *)cur;
if (ent->type == ACPI_MADT_ENTRY_TYPE_INTERRUPT_SOURCE_OVERRIDE) {
struct acpi_madt_interrupt_source_override *override = (struct acpi_madt_interrupt_source_override *)ent;
if (override->source == irq) {
return override->gsi;
}
}
cur += ent->length;
}
return irq;
}