diff options
Diffstat (limited to 'kernel/interrupts.c')
| -rw-r--r-- | kernel/interrupts.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 0852812..198fe11 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -27,19 +27,6 @@ static struct idt_desc } idtd; -// disable interrupts -void int_disable() -{ - __asm__("cli"); -} - -// enable interrupts -void int_enable() -{ - __asm__("sti"); - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"up and running"); -} - void int_generate88() { @@ -102,11 +89,10 @@ void int_irq18(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Machine Check"); X8 void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr) { - uint64_t base=(uint64_t)&(*addr); // TODO! + uint64_t base=(uint64_t)&(*addr); idt[irq].addrLo = base & 0xffff; idt[irq].addrHi = (base >> 16) & 0xffff; - idt[irq].addrHi = 0x0; idt[irq].zeros=0; idt[irq].flags=flags; idt[irq].sel=sel; @@ -150,13 +136,13 @@ void int_init(uint16_t sel) void int_install() { + idtd.size=sizeof(struct int_desc)*INT_MAX; - idtd.size=sizeof(struct int_desc)*INT_MAX; //TODO - idtd.baseHi=0x0000; - idtd.baseLo=&idt[0]; + uint32_t addr=&idt[0]; + idtd.baseHi=addr>>16; + idtd.baseLo=0xffff&addr; __asm__("lidt %0"::"m" (idtd)); - } /* //print interrupt table; //TODO! |
