acpi: add APIC irq ack and legacy vector remapping

This commit is contained in:
2023-03-24 14:21:02 +00:00
parent cb622f5ad4
commit 864362ba82
11 changed files with 286 additions and 49 deletions

View File

@@ -0,0 +1,39 @@
#ifndef ARCH_ACPI_IOAPIC_HPP_
#define ARCH_ACPI_IOAPIC_HPP_
#include <stdint.h>
#include <socks/status.h>
#include <socks/queue.h>
namespace arch::acpi {
struct io_apic {
uint32_t *io_base = nullptr;
unsigned int io_first_irq = 0;
unsigned int io_nr_irq = 0;
queue_entry_t io_entry;
struct irq_entry {
uint64_t irq_vec : 8;
uint64_t irq_delivery : 3;
uint64_t irq_destmode : 1;
uint64_t irq_status : 1;
uint64_t irq_polarity : 1;
uint64_t irq_irr : 1;
uint64_t irq_triggermode : 1;
uint64_t irq_mask : 1;
uint64_t irq_resv : 39;
uint64_t irq_dest : 8;
};
io_apic(uint32_t *base, unsigned int first_irq);
uint32_t read(uint32_t reg);
void write(uint32_t reg, uint32_t val);
kern_status_t read_irq(unsigned int index, irq_entry &entry);
void write_irq(unsigned int index, const irq_entry &entry);
void map_irq(unsigned int src, unsigned int dest);
};
}
#endif