Implement PIT interrupts
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user