summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-09-03 14:04:12 +0200
committerMichal Idziorek <m.i@gmx.at>2014-09-03 14:04:12 +0200
commita6efba7a22b85c0556c8c262f3bbcaf7bda7ddfa (patch)
treee060237fe895995ad1fd6eee0f7f3b19beed8088 /kernel/interrupts.c
parent0ce7674a27043cfdf4115d09d65493ac8af13563 (diff)
Moved kernel to 0x10000 !
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c24
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!