diff options
author | Alexis211 <alexis211@gmail.com> | 2010-02-06 20:51:56 +0100 |
---|---|---|
committer | Alexis211 <alexis211@gmail.com> | 2010-02-06 20:51:56 +0100 |
commit | 6a52d123672b7a00af6e22b4c138205be2042a94 (patch) | |
tree | cd9b0a13490159369a66c850850596fd4b418139 /src/kernel/task/idt.h | |
parent | 3558f18daf50281ee1cd68cca96cd967dbac04ba (diff) | |
download | TCE-6a52d123672b7a00af6e22b4c138205be2042a94.tar.gz TCE-6a52d123672b7a00af6e22b4c138205be2042a94.zip |
Reorganisation
Diffstat (limited to 'src/kernel/task/idt.h')
-rw-r--r-- | src/kernel/task/idt.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/kernel/task/idt.h b/src/kernel/task/idt.h new file mode 100644 index 0000000..bb89013 --- /dev/null +++ b/src/kernel/task/idt.h @@ -0,0 +1,33 @@ +#ifndef DEF_IDT_H +#define DEF_IDT_H + +#include <types.h> + +struct idt_entry { + uint16_t base_lo; //Low part of address to jump to + uint16_t sel; //Kernel segment selector + uint8_t always0; + uint8_t flags; //Flags + uint16_t base_hi; //High part of address to jump to +} __attribute__((packed)); + +struct idt_ptr { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); + +struct registers { + uint32_t cr3; //page directory physical address + uint32_t ds; // Data segment selector + uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha. + uint32_t int_no, err_code; // Interrupt number and error code (if applicable) + uint32_t eip, cs, eflags, useresp, ss; // Pushed by the processor automatically. +}; + +typedef void (*int_callback)(struct registers*); + +void idt_init(); +void idt_handleIrq(int number, int_callback func); + +#endif + |