OSDN Git Service

Start to make Task Switch System
[vaneos/vaneosmain.git] / Kernel / GDT_IDT.c
1 #include<VaneOS.h>
2 #include<GDT_IDT.h>
3
4 IDTR idtr;
5 GATE_DESCRIPTOR idt[ NUM_IDT ];
6 SEGMENT_DESCRIPTOR      gdt[ NUM_GDT ];
7 GDTR gdtr;
8
9 void setupInterruptGate( int int_num, void *interrupt_handler )
10 {
11         setupGateDescriptor( int_num,
12                 ( int )interrupt_handler,
13                 DEF_IDT_INT_SELECTOR,
14                 DEF_IDT_FLAGS_PRESENT | DEF_IDT_FLAGS_INTGATE_32BIT );
15 }
16
17 void setupGateDescriptor( int int_num,int base,unsigned short selector,unsigned char flags )
18 {
19         idt[ int_num ].baseLo   = ( unsigned short )(   base & 0x0000FFFF );
20         idt[ int_num ].selector = selector;
21         idt[ int_num ].reserved = 0x00;
22         idt[ int_num ].flags    = flags;
23         idt[ int_num ].baseHi   = ( unsigned short )( ( base & 0xFFFF0000 ) >> 16 );
24 }
25
26 void load_gdt(void)
27 {
28     __asm__ __volatile__ ( "lgdt gdtr" );
29     __asm__ __volatile__ ( "mov %ax, 0x10" );
30     __asm__ __volatile__ ( "mov %ds, %ax" );
31     __asm__ __volatile__ ( "mov %es, %ax" );
32     __asm__ __volatile__ ( "mov %fs, %ax" );
33     __asm__ __volatile__ ( "mov %gs, %ax" );
34     __asm__ __volatile__ ( "mov %ss, %ax" );
35     
36     clear_state();
37 }
38
39 void load_idt(void)
40 {
41         __asm__ __volatile__ ("lidt idtr");
42 }