Beispiel #1
0
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);
};
Beispiel #2
0
/* 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();
}
Beispiel #3
0
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);
};