Commit 97fa5ad9 by malcolm

Fixed up IDT files

parent ab42a3e9
Showing with 17 additions and 17 deletions
#include "idt.h" #include "idt.h"
#include <string.h>
struct idtr { typedef struct{
uint16_t limit; uint16_t limit;
uint32_t base; uint32_t base;
}; } idtr;
static struct idt_desc _idt [MAX_IDT_INT]; static idt_desc _idt [MAX_IDT_INT];
static struct idtr _idtr; static idtr _idtr;
static void idt_install () { static void idt_install () {
//TODO: VOODOO MAGIC //TODO: VOODOO MAGIC
} }
static void _cdecl default_handler () { static void default_handler () {
//DEBUG OUTPUT MAYBE? //DEBUG OUTPUT MAYBE?
for(;;); for(;;);
} }
idt_descriptor* get_ir (uint32_t i) { idt_desc* get_ir (uint32_t i) {
if (i>MAX_IDT_INT) if (i>MAX_IDT_INT)
return 0; return 0;
return &_idt[i]; return &_idt[i];
} }
int install_ir (uint32_t i, uint16_t flags, uint16_t sel, IRQ_HANDLER irq) { int install_ir (uint32_t i, uint16_t flags, uint16_t code_sel, IRQ_HANDLER irq) {
if (i>MAX_IDT_INT) if (i>MAX_IDT_INT)
return 0; return 0;
if (!irq) if (!irq)
return 0; return 0;
uint64_t uiBase = (uint64_t)&(*irq); uint64_t uiBase = (uint64_t)&(*irq);
_idt[i].low_base = uint16_t(uiBase & 0xffff); _idt[i].low_base = (uint16_t)(uiBase & 0xffff);
_idt[i].high_base = uint16_t((uiBase >> 16) & 0xffff); _idt[i].high_base = (uint16_t)((uiBase >> 16) & 0xffff);
_idt[i].reserved = 0; _idt[i].reserved = 0;
_idt[i].flags = uint8_t(flags); _idt[i].flags = (uint8_t)(flags);
_idt[i].code_sel = sel; _idt[i].code_sel = code_sel;
return 0; return 0;
} }
int idt_init (uint16_t code_sel) { int idt_init (uint16_t code_sel) {
_idtr.limit = sizeof (struct idt_desc) * MAX_IDT_INT -1; _idtr.limit = sizeof (idt_desc) * MAX_IDT_INT -1;
_idtr.base = (uint32_t)&_idt[0]; _idtr.base = (uint32_t)&_idt[0];
memset ((void*)&_idt[0], 0, sizeof (idt_desc) * MAX_IDT_INT-1); memset ((void*)&_idt[0], 0, sizeof (idt_desc) * MAX_IDT_INT-1);
for (int i=0; i<MAX_IDT_INT; i++) for (int i=0; i<MAX_IDT_INT; i++)
......
...@@ -13,18 +13,18 @@ ...@@ -13,18 +13,18 @@
#define IDT_PR 0x80 #define IDT_PR 0x80
//voodoo magic. find out what it does. //voodoo magic. find out what it does.
typedef void (_cdecl *IRQ_HANDLER)(void); typedef void (*IRQ_HANDLER)(void);
struct idt_desc{ typedef struct {
uint16_t low_base; uint16_t low_base;
uint16_t code_sel; uint16_t code_sel;
uint8_t reserved; uint8_t reserved;
uint8_t flags; uint8_t flags;
uint16_t high_base; uint16_t high_base;
}; } idt_desc;
extern idt_desc* get_ir (uint32_t i); extern idt_desc* get_ir (uint32_t i);
extern int install_ir (uint32_t i, uint16_t flags, uint16_c code_sel, IRQ_HANDLER); extern int install_ir (uint32_t i, uint16_t flags, uint16_t code_sel, IRQ_HANDLER);
extern int idt_init (uint16_t code_sel); extern int idt_init (uint16_t code_sel);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment