x86_64: expand IDT to 256 entries
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <arch/acpi.h>
|
||||
#include <socks/printk.h>
|
||||
#include <socks/sched.h>
|
||||
#include <socks/cpu.h>
|
||||
#include <socks/panic.h>
|
||||
#include <socks/libc/string.h>
|
||||
#include <socks/machine/irq.h>
|
||||
@@ -43,7 +44,6 @@ extern void _isr28();
|
||||
extern void _isr29();
|
||||
extern void _isr30();
|
||||
extern void _isr31();
|
||||
extern void _isr128();
|
||||
|
||||
extern void _irq0();
|
||||
extern void _irq1();
|
||||
@@ -61,12 +61,220 @@ extern void _irq12();
|
||||
extern void _irq13();
|
||||
extern void _irq14();
|
||||
extern void _irq15();
|
||||
extern void _irq16();
|
||||
extern void _irq17();
|
||||
extern void _irq18();
|
||||
extern void _irq19();
|
||||
extern void _irq20();
|
||||
extern void _irq21();
|
||||
extern void _irq22();
|
||||
extern void _irq23();
|
||||
extern void _irq24();
|
||||
extern void _irq25();
|
||||
extern void _irq26();
|
||||
extern void _irq27();
|
||||
extern void _irq28();
|
||||
extern void _irq29();
|
||||
extern void _irq30();
|
||||
extern void _irq31();
|
||||
extern void _irq32();
|
||||
extern void _irq33();
|
||||
extern void _irq34();
|
||||
extern void _irq35();
|
||||
extern void _irq36();
|
||||
extern void _irq37();
|
||||
extern void _irq38();
|
||||
extern void _irq39();
|
||||
extern void _irq40();
|
||||
extern void _irq41();
|
||||
extern void _irq42();
|
||||
extern void _irq43();
|
||||
extern void _irq44();
|
||||
extern void _irq45();
|
||||
extern void _irq46();
|
||||
extern void _irq47();
|
||||
extern void _irq48();
|
||||
extern void _irq49();
|
||||
extern void _irq50();
|
||||
extern void _irq51();
|
||||
extern void _irq52();
|
||||
extern void _irq53();
|
||||
extern void _irq54();
|
||||
extern void _irq55();
|
||||
extern void _irq56();
|
||||
extern void _irq57();
|
||||
extern void _irq58();
|
||||
extern void _irq59();
|
||||
extern void _irq60();
|
||||
extern void _irq61();
|
||||
extern void _irq62();
|
||||
extern void _irq63();
|
||||
extern void _irq64();
|
||||
extern void _irq65();
|
||||
extern void _irq66();
|
||||
extern void _irq67();
|
||||
extern void _irq68();
|
||||
extern void _irq69();
|
||||
extern void _irq70();
|
||||
extern void _irq71();
|
||||
extern void _irq72();
|
||||
extern void _irq73();
|
||||
extern void _irq74();
|
||||
extern void _irq75();
|
||||
extern void _irq76();
|
||||
extern void _irq77();
|
||||
extern void _irq78();
|
||||
extern void _irq79();
|
||||
extern void _irq80();
|
||||
extern void _irq81();
|
||||
extern void _irq82();
|
||||
extern void _irq83();
|
||||
extern void _irq84();
|
||||
extern void _irq85();
|
||||
extern void _irq86();
|
||||
extern void _irq87();
|
||||
extern void _irq88();
|
||||
extern void _irq89();
|
||||
extern void _irq90();
|
||||
extern void _irq91();
|
||||
extern void _irq92();
|
||||
extern void _irq93();
|
||||
extern void _irq94();
|
||||
extern void _irq95();
|
||||
extern void _irq96();
|
||||
extern void _irq97();
|
||||
extern void _irq98();
|
||||
extern void _irq99();
|
||||
extern void _irq100();
|
||||
extern void _irq101();
|
||||
extern void _irq102();
|
||||
extern void _irq103();
|
||||
extern void _irq104();
|
||||
extern void _irq105();
|
||||
extern void _irq106();
|
||||
extern void _irq107();
|
||||
extern void _irq108();
|
||||
extern void _irq109();
|
||||
extern void _irq110();
|
||||
extern void _irq111();
|
||||
extern void _irq112();
|
||||
extern void _irq113();
|
||||
extern void _irq114();
|
||||
extern void _irq115();
|
||||
extern void _irq116();
|
||||
extern void _irq117();
|
||||
extern void _irq118();
|
||||
extern void _irq119();
|
||||
extern void _irq120();
|
||||
extern void _irq121();
|
||||
extern void _irq122();
|
||||
extern void _irq123();
|
||||
extern void _irq124();
|
||||
extern void _irq125();
|
||||
extern void _irq126();
|
||||
extern void _irq127();
|
||||
extern void _irq128();
|
||||
extern void _irq129();
|
||||
extern void _irq130();
|
||||
extern void _irq131();
|
||||
extern void _irq132();
|
||||
extern void _irq133();
|
||||
extern void _irq134();
|
||||
extern void _irq135();
|
||||
extern void _irq136();
|
||||
extern void _irq137();
|
||||
extern void _irq138();
|
||||
extern void _irq139();
|
||||
extern void _irq140();
|
||||
extern void _irq141();
|
||||
extern void _irq142();
|
||||
extern void _irq143();
|
||||
extern void _irq144();
|
||||
extern void _irq145();
|
||||
extern void _irq146();
|
||||
extern void _irq147();
|
||||
extern void _irq148();
|
||||
extern void _irq149();
|
||||
extern void _irq150();
|
||||
extern void _irq151();
|
||||
extern void _irq152();
|
||||
extern void _irq153();
|
||||
extern void _irq154();
|
||||
extern void _irq155();
|
||||
extern void _irq156();
|
||||
extern void _irq157();
|
||||
extern void _irq158();
|
||||
extern void _irq159();
|
||||
extern void _irq160();
|
||||
extern void _irq161();
|
||||
extern void _irq162();
|
||||
extern void _irq163();
|
||||
extern void _irq164();
|
||||
extern void _irq165();
|
||||
extern void _irq166();
|
||||
extern void _irq167();
|
||||
extern void _irq168();
|
||||
extern void _irq169();
|
||||
extern void _irq170();
|
||||
extern void _irq171();
|
||||
extern void _irq172();
|
||||
extern void _irq173();
|
||||
extern void _irq174();
|
||||
extern void _irq175();
|
||||
extern void _irq176();
|
||||
extern void _irq177();
|
||||
extern void _irq178();
|
||||
extern void _irq179();
|
||||
extern void _irq180();
|
||||
extern void _irq181();
|
||||
extern void _irq182();
|
||||
extern void _irq183();
|
||||
extern void _irq184();
|
||||
extern void _irq185();
|
||||
extern void _irq186();
|
||||
extern void _irq187();
|
||||
extern void _irq188();
|
||||
extern void _irq189();
|
||||
extern void _irq190();
|
||||
extern void _irq191();
|
||||
extern void _irq192();
|
||||
extern void _irq193();
|
||||
extern void _irq194();
|
||||
extern void _irq195();
|
||||
extern void _irq196();
|
||||
extern void _irq197();
|
||||
extern void _irq198();
|
||||
extern void _irq199();
|
||||
extern void _irq200();
|
||||
extern void _irq201();
|
||||
extern void _irq202();
|
||||
extern void _irq203();
|
||||
extern void _irq204();
|
||||
extern void _irq205();
|
||||
extern void _irq206();
|
||||
extern void _irq207();
|
||||
extern void _irq208();
|
||||
extern void _irq209();
|
||||
extern void _irq210();
|
||||
extern void _irq211();
|
||||
extern void _irq212();
|
||||
extern void _irq213();
|
||||
extern void _irq214();
|
||||
extern void _irq215();
|
||||
extern void _irq216();
|
||||
extern void _irq217();
|
||||
extern void _irq218();
|
||||
extern void _irq219();
|
||||
extern void _irq220();
|
||||
extern void _irq221();
|
||||
extern void _irq222();
|
||||
extern void _irq223();
|
||||
|
||||
extern void syscall_gate();
|
||||
extern uintptr_t pf_faultptr(void);
|
||||
|
||||
static int_hook isr_handlers[NR_IDT_ENTRIES];
|
||||
static struct queue irq_hooks[32];
|
||||
static struct queue irq_hooks[223];
|
||||
|
||||
static struct idt idt;
|
||||
static int idt_initialised = 0;
|
||||
@@ -88,10 +296,11 @@ static void set_idt_gate(struct idt *idt, uint8_t index, uintptr_t base, uint16_
|
||||
static void gpf_handler(struct cpu_context *regs)
|
||||
{
|
||||
int ext = regs->err_no & 1;
|
||||
int table = (regs->err_no >> 1) & 2;
|
||||
int index = (regs->err_no >> 3) & 13;
|
||||
int table = (regs->err_no >> 1) & 0x03;
|
||||
int index = (regs->err_no >> 3) & 0x1FFF;
|
||||
|
||||
panic_irq(regs, "general protection fault (%08x %08x %08x %016llx)", ext, table, index, regs->rip);
|
||||
panic_irq(regs, "general protection fault (%016llx %02x %02x %04x %016llx)",
|
||||
regs->err_no, ext, table, index, regs->rip);
|
||||
}
|
||||
|
||||
static void pf_handler(struct cpu_context *regs)
|
||||
@@ -200,6 +409,214 @@ static void init_global_idt(void)
|
||||
set_idt_gate(&idt, 45, (uintptr_t)_irq13, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 46, (uintptr_t)_irq14, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 47, (uintptr_t)_irq15, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 48, (uintptr_t)_irq16, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 49, (uintptr_t)_irq17, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 50, (uintptr_t)_irq18, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 51, (uintptr_t)_irq19, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 52, (uintptr_t)_irq20, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 53, (uintptr_t)_irq21, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 54, (uintptr_t)_irq22, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 55, (uintptr_t)_irq23, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 56, (uintptr_t)_irq24, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 57, (uintptr_t)_irq25, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 58, (uintptr_t)_irq26, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 59, (uintptr_t)_irq27, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 60, (uintptr_t)_irq28, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 61, (uintptr_t)_irq29, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 62, (uintptr_t)_irq30, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 63, (uintptr_t)_irq31, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 64, (uintptr_t)_irq32, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 65, (uintptr_t)_irq33, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 66, (uintptr_t)_irq34, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 67, (uintptr_t)_irq35, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 68, (uintptr_t)_irq36, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 69, (uintptr_t)_irq37, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 70, (uintptr_t)_irq38, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 71, (uintptr_t)_irq39, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 72, (uintptr_t)_irq40, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 73, (uintptr_t)_irq41, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 74, (uintptr_t)_irq42, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 75, (uintptr_t)_irq43, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 76, (uintptr_t)_irq44, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 77, (uintptr_t)_irq45, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 78, (uintptr_t)_irq46, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 79, (uintptr_t)_irq47, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 80, (uintptr_t)_irq48, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 81, (uintptr_t)_irq49, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 82, (uintptr_t)_irq50, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 83, (uintptr_t)_irq51, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 84, (uintptr_t)_irq52, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 85, (uintptr_t)_irq53, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 86, (uintptr_t)_irq54, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 87, (uintptr_t)_irq55, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 88, (uintptr_t)_irq56, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 89, (uintptr_t)_irq57, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 90, (uintptr_t)_irq58, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 91, (uintptr_t)_irq59, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 92, (uintptr_t)_irq60, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 93, (uintptr_t)_irq61, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 94, (uintptr_t)_irq62, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 95, (uintptr_t)_irq63, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 96, (uintptr_t)_irq64, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 97, (uintptr_t)_irq65, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 98, (uintptr_t)_irq66, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 99, (uintptr_t)_irq67, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 100, (uintptr_t)_irq68, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 101, (uintptr_t)_irq69, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 102, (uintptr_t)_irq70, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 103, (uintptr_t)_irq71, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 104, (uintptr_t)_irq72, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 105, (uintptr_t)_irq73, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 106, (uintptr_t)_irq74, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 107, (uintptr_t)_irq75, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 108, (uintptr_t)_irq76, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 109, (uintptr_t)_irq77, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 110, (uintptr_t)_irq78, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 111, (uintptr_t)_irq79, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 112, (uintptr_t)_irq80, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 113, (uintptr_t)_irq81, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 114, (uintptr_t)_irq82, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 115, (uintptr_t)_irq83, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 116, (uintptr_t)_irq84, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 117, (uintptr_t)_irq85, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 118, (uintptr_t)_irq86, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 119, (uintptr_t)_irq87, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 120, (uintptr_t)_irq88, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 121, (uintptr_t)_irq89, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 122, (uintptr_t)_irq90, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 123, (uintptr_t)_irq91, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 124, (uintptr_t)_irq92, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 125, (uintptr_t)_irq93, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 126, (uintptr_t)_irq94, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 127, (uintptr_t)_irq95, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 128, (uintptr_t)_irq96, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 129, (uintptr_t)_irq97, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 130, (uintptr_t)_irq98, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 131, (uintptr_t)_irq99, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 132, (uintptr_t)_irq100, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 133, (uintptr_t)_irq101, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 134, (uintptr_t)_irq102, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 135, (uintptr_t)_irq103, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 136, (uintptr_t)_irq104, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 137, (uintptr_t)_irq105, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 138, (uintptr_t)_irq106, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 139, (uintptr_t)_irq107, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 140, (uintptr_t)_irq108, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 141, (uintptr_t)_irq109, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 142, (uintptr_t)_irq110, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 143, (uintptr_t)_irq111, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 144, (uintptr_t)_irq112, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 145, (uintptr_t)_irq113, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 146, (uintptr_t)_irq114, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 147, (uintptr_t)_irq115, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 148, (uintptr_t)_irq116, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 149, (uintptr_t)_irq117, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 150, (uintptr_t)_irq118, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 151, (uintptr_t)_irq119, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 152, (uintptr_t)_irq120, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 153, (uintptr_t)_irq121, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 154, (uintptr_t)_irq122, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 155, (uintptr_t)_irq123, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 156, (uintptr_t)_irq124, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 157, (uintptr_t)_irq125, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 158, (uintptr_t)_irq126, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 159, (uintptr_t)_irq127, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 160, (uintptr_t)_irq128, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 161, (uintptr_t)_irq129, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 162, (uintptr_t)_irq130, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 163, (uintptr_t)_irq131, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 164, (uintptr_t)_irq132, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 165, (uintptr_t)_irq133, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 166, (uintptr_t)_irq134, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 167, (uintptr_t)_irq135, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 168, (uintptr_t)_irq136, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 169, (uintptr_t)_irq137, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 170, (uintptr_t)_irq138, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 171, (uintptr_t)_irq139, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 172, (uintptr_t)_irq140, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 173, (uintptr_t)_irq141, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 174, (uintptr_t)_irq142, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 175, (uintptr_t)_irq143, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 176, (uintptr_t)_irq144, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 177, (uintptr_t)_irq145, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 178, (uintptr_t)_irq146, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 179, (uintptr_t)_irq147, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 180, (uintptr_t)_irq148, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 181, (uintptr_t)_irq149, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 182, (uintptr_t)_irq150, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 183, (uintptr_t)_irq151, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 184, (uintptr_t)_irq152, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 185, (uintptr_t)_irq153, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 186, (uintptr_t)_irq154, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 187, (uintptr_t)_irq155, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 188, (uintptr_t)_irq156, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 189, (uintptr_t)_irq157, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 190, (uintptr_t)_irq158, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 191, (uintptr_t)_irq159, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 192, (uintptr_t)_irq160, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 193, (uintptr_t)_irq161, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 194, (uintptr_t)_irq162, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 195, (uintptr_t)_irq163, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 196, (uintptr_t)_irq164, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 197, (uintptr_t)_irq165, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 198, (uintptr_t)_irq166, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 199, (uintptr_t)_irq167, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 200, (uintptr_t)_irq168, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 201, (uintptr_t)_irq169, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 202, (uintptr_t)_irq170, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 203, (uintptr_t)_irq171, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 204, (uintptr_t)_irq172, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 205, (uintptr_t)_irq173, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 206, (uintptr_t)_irq174, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 207, (uintptr_t)_irq175, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 208, (uintptr_t)_irq176, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 209, (uintptr_t)_irq177, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 210, (uintptr_t)_irq178, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 211, (uintptr_t)_irq179, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 212, (uintptr_t)_irq180, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 213, (uintptr_t)_irq181, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 214, (uintptr_t)_irq182, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 215, (uintptr_t)_irq183, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 216, (uintptr_t)_irq184, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 217, (uintptr_t)_irq185, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 218, (uintptr_t)_irq186, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 219, (uintptr_t)_irq187, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 220, (uintptr_t)_irq188, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 221, (uintptr_t)_irq189, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 222, (uintptr_t)_irq190, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 223, (uintptr_t)_irq191, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 224, (uintptr_t)_irq192, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 225, (uintptr_t)_irq193, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 226, (uintptr_t)_irq194, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 227, (uintptr_t)_irq195, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 228, (uintptr_t)_irq196, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 229, (uintptr_t)_irq197, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 230, (uintptr_t)_irq198, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 231, (uintptr_t)_irq199, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 232, (uintptr_t)_irq200, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 233, (uintptr_t)_irq201, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 234, (uintptr_t)_irq202, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 235, (uintptr_t)_irq203, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 236, (uintptr_t)_irq204, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 237, (uintptr_t)_irq205, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 238, (uintptr_t)_irq206, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 239, (uintptr_t)_irq207, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 240, (uintptr_t)_irq208, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 241, (uintptr_t)_irq209, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 242, (uintptr_t)_irq210, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 243, (uintptr_t)_irq211, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 244, (uintptr_t)_irq212, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 245, (uintptr_t)_irq213, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 246, (uintptr_t)_irq214, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 247, (uintptr_t)_irq215, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 248, (uintptr_t)_irq216, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 249, (uintptr_t)_irq217, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 250, (uintptr_t)_irq218, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 251, (uintptr_t)_irq219, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 252, (uintptr_t)_irq220, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 253, (uintptr_t)_irq221, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 254, (uintptr_t)_irq222, 0x08, 0x8E);
|
||||
set_idt_gate(&idt, 255, (uintptr_t)_irq223, 0x08, 0x8E);
|
||||
|
||||
idt_initialised = 1;
|
||||
}
|
||||
@@ -224,6 +641,7 @@ int idt_load(struct idt_ptr *ptr)
|
||||
|
||||
void isr_dispatch(struct cpu_context *regs)
|
||||
{
|
||||
printk("received ISR#%u on CPU %u", regs->int_no, this_cpu());
|
||||
int_hook h = isr_handlers[regs->int_no];
|
||||
if (h) {
|
||||
h(regs);
|
||||
@@ -236,6 +654,10 @@ void irq_dispatch(struct cpu_context *regs)
|
||||
{
|
||||
end_charge_period();
|
||||
|
||||
if (regs->int_no != IRQ0) {
|
||||
printk("received IRQ#%u on CPU %u", regs->int_no, this_cpu());
|
||||
}
|
||||
|
||||
irq_ack(regs->int_no);
|
||||
struct queue *hooks = &irq_hooks[regs->int_no - IRQ0];
|
||||
queue_foreach(struct irq_hook, hook, hooks, irq_entry) {
|
||||
|
||||
Reference in New Issue
Block a user