예제 #1
0
void reload_idt()
 {
   idt_ptr.limit = sizeof(idt_entries);
   idt_ptr.base  = (uint64_t)idt_entries;

   idt_set_gate(0, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(1, (uint64_t)&isr1, 0x08,0);     
   idt_set_gate(2, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(3, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(4, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(5, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(6, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(7, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(8, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(9, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(10, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(11, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(12, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(13, (uint64_t)&_isr13, 0x08,0);

   idt_set_gate(14, (uint64_t)&_isr14, 0x08,0);

   idt_set_gate(15, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(16, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(17, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(18, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(19, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(20, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(21, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(22, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(23, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(24, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(25, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(26, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(27, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(28, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(29, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(30, (uint64_t)&isr1, 0x08,0);
   idt_set_gate(31, (uint64_t)&isr1, 0x08,0);


   idt_set_gate(32, (uint64_t)&_isr0, 0x08,0);
   idt_set_gate(33, (uint64_t)&_isr2, 0x08,0);
   
   idt_set_gate(128, (uint64_t)&_isr128,0x08,3);
    _x86_64_asm_lidt(&idt_ptr);
    
 }
예제 #2
0
void init_idt()
{
	idtPtr.limit = (sizeof(struct idt_entry) * MAX_IDT); //- 1;
	idtPtr.base = (uint64_t) idtEntry;
	memset(&idtEntry,0,(sizeof(struct idt_entry) * MAX_IDT));
	
	//isr
	idt_set_gate(0,(uint64_t)isr0,0x08, 0x8E);
	idt_set_gate(13,(uint64_t)isr13,0x08, 0x8E);
	idt_set_gate(14,(uint64_t)isr14,0x08, 0x8E);
	idt_set_gate(128,(uint64_t)isr128,0x08, 0xEE);
	//irq
   	idt_set_gate(32,(uint64_t)irq0,0x08,0x8E);
   	idt_set_gate(33,(uint64_t)irq1,0x08,0x8E);
	
	_x86_64_asm_lidt(&idtPtr);
}
예제 #3
0
파일: idt.c 프로젝트: csarron/cse506os
void
reload_idt ()
{
    idt_init ();
    _x86_64_asm_lidt (&idtr);
    //register CPU exception handler
    idt_set_gate (0x00, (uint64_t) exception0, 0x08, 0x8E);
    idt_set_gate (0x01, (uint64_t) exception1, 0x08, 0x8E);
    idt_set_gate (0x02, (uint64_t) exception2, 0x08, 0x8E);
    idt_set_gate (0x03, (uint64_t) exception3, 0x08, 0x8E);
    idt_set_gate (0x04, (uint64_t) exception4, 0x08, 0x8E);
    idt_set_gate (0x05, (uint64_t) exception5, 0x08, 0x8E);
    idt_set_gate (0x06, (uint64_t) exception6, 0x08, 0x8E);
    idt_set_gate (0x07, (uint64_t) exception7, 0x08, 0x8E);
    idt_set_gate (0x08, (uint64_t) exception8, 0x08, 0x8E);
    idt_set_gate (0x09, (uint64_t) exception9, 0x08, 0x8E);
    idt_set_gate (0x0A, (uint64_t) exception10, 0x08, 0x8E);
    idt_set_gate (0x0B, (uint64_t) exception11, 0x08, 0x8E);
    idt_set_gate (0x0C, (uint64_t) exception12, 0x08, 0x8E);
    idt_set_gate (0x0D, (uint64_t) exception13, 0x08, 0x8E);
    idt_set_gate (0x0E, (uint64_t) exception14, 0x08, 0x8E);
    idt_set_gate (0x0F, (uint64_t) exception15, 0x08, 0x8E);
    idt_set_gate (0x10, (uint64_t) exception16, 0x08, 0x8E);
    idt_set_gate (0x11, (uint64_t) exception17, 0x08, 0x8E);
    idt_set_gate (0x12, (uint64_t) exception18, 0x08, 0x8E);
    idt_set_gate (0x13, (uint64_t) exception19, 0x08, 0x8E);
    idt_set_gate (0x14, (uint64_t) exception20, 0x08, 0x8E);
    idt_set_gate (0x15, (uint64_t) exception21, 0x08, 0x8E);
    idt_set_gate (0x16, (uint64_t) exception22, 0x08, 0x8E);
    idt_set_gate (0x17, (uint64_t) exception23, 0x08, 0x8E);
    idt_set_gate (0x18, (uint64_t) exception24, 0x08, 0x8E);
    idt_set_gate (0x19, (uint64_t) exception25, 0x08, 0x8E);
    idt_set_gate (0x1A, (uint64_t) exception26, 0x08, 0x8E);
    idt_set_gate (0x1B, (uint64_t) exception27, 0x08, 0x8E);
    idt_set_gate (0x1C, (uint64_t) exception28, 0x08, 0x8E);
    idt_set_gate (0x1D, (uint64_t) exception29, 0x08, 0x8E);
    idt_set_gate (0x1E, (uint64_t) exception30, 0x08, 0x8E);
    idt_set_gate (0x1F, (uint64_t) exception31, 0x08, 0x8E);
    //register timer & kerboard interrupt handler
    idt_set_gate (0x20, (uint64_t) isr32, 0x08, 0x8E);
    idt_set_gate (0x21, (uint64_t) isr33, 0x08, 0x8E);
    //regiter yield func for cooperative scheduling
    idt_set_gate (0x80, (uint64_t) co_yield, 0x08, 0x8E);
    
}