summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-18 16:49:00 +0200
committerMiguel <m.i@gmx.at>2018-08-18 16:49:00 +0200
commit8d5d5b8fcca8c9fad89f64f41a3d36c62453dba4 (patch)
tree9dd87423d63ab4d03946da81ec76ee8746e44ef2 /kernel/interrupts.c
parent639c3d47b09114628f8e1f8817c27c10bf1fb28c (diff)
mouse up and running again
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index e19d816..74599c3 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -3,6 +3,7 @@
#include "lib/logger/log.h" // logger facilities
#include "asm/asm.h"
+#include "driver/mouse.h"
#include "interrupts.h"
#include "x86.h"
@@ -21,7 +22,6 @@ void deflog(uint32_t eip, uint16_t cs, uint32_t flags)
void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr);
//void mouse_handler();
-
// the interrupt descriptor table
static struct int_desc
{
@@ -52,7 +52,6 @@ void int_default()
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"default handler");
}
-
void show_error(uint32_t err)
{
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"interrupt error code: 0x%08x",err);
@@ -61,7 +60,6 @@ void show_error(uint32_t err)
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Selector: %x",err&0b1111111111111000);
}
-
void exception_handle_0(){ panic(FOOLOS_MODULE_NAME,"Divide by 0"); }
void exception_handle_1(){ panic(FOOLOS_MODULE_NAME,"Single step (debugger)"); }
void exception_handle_2(){ panic(FOOLOS_MODULE_NAME,"Non Maskable Interrupt"); }
@@ -103,11 +101,9 @@ void exception_handle_16(){ panic(FOOLOS_MODULE_NAME,"Coprocessor error");
void exception_handle_17(){ panic(FOOLOS_MODULE_NAME,"Alignment Check"); }
void exception_handle_18(){ panic(FOOLOS_MODULE_NAME,"Machine Check"); }
-
//set a handler for a specific interrupt
void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr)
{
-
uint64_t base=(uint32_t)&(*(uint32_t*)addr);
idt[irq].addrLo = base & 0xffff;
@@ -115,27 +111,23 @@ void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr)
idt[irq].zeros=0;
idt[irq].flags=flags;
idt[irq].sel=sel;
-
}
// set default handler for all interrupts for a start
void int_init(uint16_t sel)
{
- //
// Setup PIC
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"setting up PIC",&idt,&idtd);
pic_setup();
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"initializing. IDT: 0x%08x, IDTD: 0x%08X",&idt,&idtd);
- int i;
- for(i=0; i<INT_MAX; i++)
+ for(int i=0; i<INT_MAX; i++)
{
int_install_ir(i, 0b10001110, sel,&int_default_handler);
}
// exceptions
-
int_install_ir(0, 0b10001110, 0x08,&int_irq0);
int_install_ir(1, 0b10001110, 0x08,&int_irq1);
int_install_ir(2, 0b10001110, 0x08,&int_irq2);
@@ -165,8 +157,8 @@ void int_init(uint16_t sel)
// install keyboard interrupt handler (irq 1 => 33)
int_install_ir(33, 0b10001110, 0x08,&int_kb_handler);
- //mouse
-// int_install_ir(44, 0b10001110, 0x08,&mouse_handler);
+ //mouse interrupt handler (irq 12 => 34)
+ int_install_ir(44, 0b10001110, 0x08,&int_mouse_handler);
//system calls
int_install_ir(0x80, 0b11101110, 0x08,&int_syscall_handler);
@@ -174,9 +166,8 @@ void int_init(uint16_t sel)
int_install();
// now we can enable interrupts back again
- // x86_int_enable();
+ // x86_int_enable();
x86_int_disable();
-
}
void int_install()
@@ -190,4 +181,3 @@ void int_install()
__asm__("lidt %0"::"m" (idtd));
}
-