Commit faea7c7a by malcolm

Fixed compile bugs, moved isntall functions to dt.asm

parent 48cb44bf
Showing with 23 additions and 9 deletions
section .text
global idt_install
idt_install:
mov eax, [esp+4]
lidt [eax]
ret
global gdt_install
gdt_install:
mov eax, [esp+4]
lgdt [eax]
ret
...@@ -8,9 +8,10 @@ typedef struct{ ...@@ -8,9 +8,10 @@ typedef struct{
static gdt_desc _gdt [MAX_GDT_DESC]; static gdt_desc _gdt [MAX_GDT_DESC];
static gdtr _gdtr; static gdtr _gdtr;
static void gdt_install () { /*static void gdt_install () {
asm volatile("lgdt [%0]": : "p"(&_gdtr)); asm volatile("lgdt (%0)": : "p"(&_gdtr));
} }*/
extern void gdt_install(gdtr _gdtr);
void gdt_set_desc(uint32_t i, uint64_t base, uint64_t limit, uint8_t access, uint8_t gran) void gdt_set_desc(uint32_t i, uint64_t base, uint64_t limit, uint8_t access, uint8_t gran)
{ {
...@@ -43,6 +44,6 @@ int gdt_init() { ...@@ -43,6 +44,6 @@ int gdt_init() {
gdt_set_desc(1,0,0xffffffff, GDT_RW|GDT_EXE|GDT_CDT|GDT_MEM, GDT_GR_PG|GDT_GR_32|GDT_GR_HI); gdt_set_desc(1,0,0xffffffff, GDT_RW|GDT_EXE|GDT_CDT|GDT_MEM, GDT_GR_PG|GDT_GR_32|GDT_GR_HI);
//data //data
gdt_set_desc(2,0,0xffffffff, GDT_RW|GDT_CDT|GDT_MEM, GDT_GR_PG|GDT_GR_32|GDT_GR_HI); gdt_set_desc(2,0,0xffffffff, GDT_RW|GDT_CDT|GDT_MEM, GDT_GR_PG|GDT_GR_32|GDT_GR_HI);
gdt_install(); gdt_install(_gdtr);
return 0; return 0;
} }
...@@ -8,10 +8,11 @@ typedef struct{ ...@@ -8,10 +8,11 @@ typedef struct{
static idt_desc _idt [MAX_IDT_INT]; static idt_desc _idt [MAX_IDT_INT];
static idtr _idtr; static idtr _idtr;
static void idt_install () { /*static void idt_install () {
//TODO: VOODOO MAGIC //TODO: VOODOO MAGIC
asm volatile ("lidt [%0]": : "p"(&_idtr)); asm volatile ("lidt (%0)": : "p"(&(_idtr)));
} }*/
extern void idt_install(idtr _idtr);
static void default_handler () { static void default_handler () {
//DEBUG OUTPUT MAYBE? //DEBUG OUTPUT MAYBE?
for(;;); for(;;);
...@@ -41,6 +42,6 @@ int idt_init (uint16_t code_sel) { ...@@ -41,6 +42,6 @@ int idt_init (uint16_t code_sel) {
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++)
install_ir (i, IDT_PR|IDT_32,code_sel,(IRQ_HANDLER)default_handler); install_ir (i, IDT_PR|IDT_32,code_sel,(IRQ_HANDLER)default_handler);
idt_install (); idt_install (_idtr);
return 0; return 0;
} }
...@@ -20,7 +20,7 @@ typedef struct { ...@@ -20,7 +20,7 @@ typedef struct {
uint8_t reserved; uint8_t reserved;
uint8_t flags; uint8_t flags;
uint16_t high_base; uint16_t high_base;
} __attibute__((packed)) idt_desc; }__attribute__((packed)) 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_t code_sel, IRQ_HANDLER); extern int install_ir (uint32_t i, uint16_t flags, uint16_t code_sel, IRQ_HANDLER);
......
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