static void init_idt() { memset(&idt_entries, 0, sizeof(idt_entry_t ) * 256); idt_ptr.limit = sizeof(idt_entry_t) * 256 - 1; idt_ptr.base = (uint64_t)&idt_entries; idt_set_gate(0,8, 0, 0x0e, 0, ((uint64_t)&isr0)); _x86_64_asm_igdt(&idt_ptr); };
/* Installs the IDT */ void idt_install() { memset(&idt, 0, sizeof(struct idt_entry) * 256); idtp.limit = (sizeof (struct idt_entry) * 256) - 1; idtp.base = (uint64_t)&idt; _x86_64_asm_igdt(&idtp); idt_set_gate(0, (uint64_t)&x86_64_isr_vector0, 0x08, 0x8e); idt_set_gate(13, (uint64_t)&x86_64_isr_vector13, 0x08, 0x8e); //gpf handler idt_set_gate(14, (uint64_t)&x86_64_isr_vector14, 0x08, 0x8e); //pf handleR idt_set_gate(32, (uint64_t)&x86_64_isr_vector1, 0x08, 0x8e); //timer idt_set_gate(33, (uint64_t)&x86_64_isr_vector2, 0x08, 0x8e); //key board idt_set_gate(128, (uint64_t)&x86_64_isr_vector3, 0x08, 0x8e); /*putchar, exit, malloc, getpid, getppid etc syscall */ idt_set_gate(129, (uint64_t)&x86_64_isr_vector4, 0x08, 0x8e); //_x86_64_asm_igdt(&idtp); irq_remap(); }
static void init_idt() { memset(&idt_entries, 0, sizeof(idt_entry_t ) * 256); idt_ptr.limit = sizeof(idt_entry_t) * 256 - 1; idt_ptr.base = (uint64_t)&idt_entries; idt_set_gate(0,8, 0, 0x0e, 0, ((uint64_t)&isr0)); idt_set_gate(1,8, 0, 0x0e, 0, ((uint64_t)&isr1)); idt_set_gate(2,8, 0, 0x0e, 0, ((uint64_t)&isr2)); idt_set_gate(3,8, 0, 0x0e, 0, ((uint64_t)&isr3)); idt_set_gate(4,8, 0, 0x0e, 0, ((uint64_t)&isr4)); idt_set_gate(5,8, 0, 0x0e, 0, ((uint64_t)&isr5)); idt_set_gate(6,8, 0, 0x0e, 0, ((uint64_t)&isr6)); idt_set_gate(7,8, 0, 0x0e, 0, ((uint64_t)&isr7)); idt_set_gate(8,8, 0, 0x0e, 0, ((uint64_t)&isr8)); idt_set_gate(9,8, 0, 0x0e, 0, ((uint64_t)&isr9)); idt_set_gate(10,8, 0, 0x0e, 0, ((uint64_t)&isr10)); idt_set_gate(11,8, 0, 0x0e, 0, ((uint64_t)&isr11)); idt_set_gate(12,8, 0, 0x0e, 0, ((uint64_t)&isr12)); idt_set_gate(13,8, 0, 0x0e, 0, ((uint64_t)&isr13)); idt_set_gate(14,8, 0, 0x0e, 0, ((uint64_t)&isr14)); idt_set_gate(15,8, 0, 0x0e, 0, ((uint64_t)&isr15)); idt_set_gate(16,8, 0, 0x0e, 0, ((uint64_t)&isr16)); idt_set_gate(17,8, 0, 0x0e, 0, ((uint64_t)&isr17)); idt_set_gate(18,8, 0, 0x0e, 0, ((uint64_t)&isr18)); idt_set_gate(19,8, 0, 0x0e, 0, ((uint64_t)&isr19)); idt_set_gate(20,8, 0, 0x0e, 0, ((uint64_t)&isr20)); idt_set_gate(21,8, 0, 0x0e, 0, ((uint64_t)&isr21)); idt_set_gate(22,8, 0, 0x0e, 0, ((uint64_t)&isr22)); idt_set_gate(23,8, 0, 0x0e, 0, ((uint64_t)&isr23)); idt_set_gate(24,8, 0, 0x0e, 0, ((uint64_t)&isr24)); idt_set_gate(25,8, 0, 0x0e, 0, ((uint64_t)&isr25)); idt_set_gate(26,8, 0, 0x0e, 0, ((uint64_t)&isr26)); idt_set_gate(27,8, 0, 0x0e, 0, ((uint64_t)&isr27)); idt_set_gate(28,8, 0, 0x0e, 0, ((uint64_t)&isr28)); idt_set_gate(29,8, 0, 0x0e, 0, ((uint64_t)&isr29)); idt_set_gate(30,8, 0, 0x0e, 0, ((uint64_t)&isr30)); idt_set_gate(31,8, 0, 0x0e, 0, ((uint64_t)&isr31)); idt_set_gate(128,8, 0, 0x0e, 3, ((uint64_t)&isr128)); _x86_64_asm_igdt(&idt_ptr); };