aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-04-28 23:28:54 -0400
committerIan Moffett <ian@osmora.org>2024-04-28 23:28:54 -0400
commit6aaaa53128926b42f63d4ef4861a16082d1c93db (patch)
tree23991ea7331f0c4a414e4f97f01876c3f58cf476
parentc6212de99ef76f4833974c7bb2e044413dac8d3d (diff)
kernel/amd64: ioapic: Add ioapic_set_vec()
Add helper to set vector in a redirection table entry Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--sys/arch/amd64/amd64/ioapic.c11
-rw-r--r--sys/include/arch/amd64/ioapic.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/arch/amd64/amd64/ioapic.c b/sys/arch/amd64/amd64/ioapic.c
index b4d5f51..ffc732d 100644
--- a/sys/arch/amd64/amd64/ioapic.c
+++ b/sys/arch/amd64/amd64/ioapic.c
@@ -168,6 +168,17 @@ ioapic_set_base(void *mmio_base)
}
void
+ioapic_set_vec(uint8_t irq, uint8_t vector)
+{
+ union ioapic_redentry redentry;
+ uint8_t gsi = irq_to_gsi(irq);
+
+ ioapic_read_redentry(&redentry, gsi);
+ redentry.vector = vector;
+ ioapic_write_redentry(&redentry, gsi);
+}
+
+void
ioapic_init(void)
{
size_t tmp;
diff --git a/sys/include/arch/amd64/ioapic.h b/sys/include/arch/amd64/ioapic.h
index 54051cd..890f375 100644
--- a/sys/include/arch/amd64/ioapic.h
+++ b/sys/include/arch/amd64/ioapic.h
@@ -37,6 +37,7 @@ void ioapic_irq_unmask(uint8_t irq);
void ioapic_gsi_mask(uint8_t irq);
void ioapic_gsi_unmask(uint8_t irq);
void ioapic_set_base(void *mmio_base);
+void ioapic_set_vec(uint8_t irq, uint8_t vector);
void ioapic_init(void);
#endif /* !_AMD64_IOAPIC_H_ */