From 449188ab88b3cde24fefa52707d2e535d70a7e4a Mon Sep 17 00:00:00 2001 From: Ada Christine Date: Mon, 5 Apr 2021 15:54:01 +0000 Subject: now can install isrs --- kernel/cpu.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'kernel/cpu.c') diff --git a/kernel/cpu.c b/kernel/cpu.c index b541513..3c7284c 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -116,6 +116,12 @@ static void set_idt(int vec, } } +void set_ist(int vec, int ist_index) +{ + // non-destructively set the ist index. + idt[vec].access |= ist_index & 0x7; +} + static void gdt_init(void) { set_gdt(CODE_SEG_INDEX, 0, (uint64_t)-1, CODE64_SEG); @@ -154,8 +160,6 @@ static void gdt_init(void) "r"(DATA_SEG_INDEX << 3), "r"(TASK_SEG_INDEX << 3) ); - - } static void idt_init(void) @@ -182,3 +186,12 @@ void cpu_init(void) idt_init(); } +void isr_install(int vec, void *isr, int ist) +{ + set_idt(vec, CODE_SEG_INDEX << 3, (uint64_t)isr, INT64_GATE); + if (ist) + { + set_ist(vec, ist); + } +} + -- cgit v1.3.1-1-g115d