summaryrefslogtreecommitdiff
path: root/kernel/drivers
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-02-22 17:28:08 +0100
committerAnton Kling <anton@kling.gg>2024-02-22 17:28:55 +0100
commita18da25e7355979d0f26cfd39dc0032172e8b135 (patch)
tree2af66bedd0dff4bbccffc8d82cd06836d7f68e0d /kernel/drivers
parent9b475d3db3275d4c34f02161ae70ced5595a0fdb (diff)
Kernel: Fix undefined behavior and cleanup functions.
The int_syscall caused crashes for higher level of optimizations. To fix this I rewrote the function in assembly as I deemed it to be simpler.
Diffstat (limited to 'kernel/drivers')
-rw-r--r--kernel/drivers/mouse.c1
-rw-r--r--kernel/drivers/pit.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c
index ec7ce8c..af4f22e 100644
--- a/kernel/drivers/mouse.c
+++ b/kernel/drivers/mouse.c
@@ -142,4 +142,5 @@ void install_mouse(void) {
install_handler(int_mouse, INT_32_INTERRUPT_GATE(0x3), 12 + 0x20);
install_handler(what, INT_32_INTERRUPT_GATE(0x3), 0xe + 0x20);
+ install_handler(what, INT_32_INTERRUPT_GATE(0x3), 0xf + 0x20);
}
diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c
index 060fc54..30fd3ed 100644
--- a/kernel/drivers/pit.c
+++ b/kernel/drivers/pit.c
@@ -43,8 +43,8 @@ void set_pit_count(u16 _hertz) {
outb(PIT_IO_CHANNEL_0, (divisor & 0xFF00) >> 8);
}
-void int_clock(reg_t regs) {
- outb(0x20, 0x20);
+void int_clock(reg_t *regs) {
+ EOI(0x20);
pit_counter++;
if (pit_counter * 1000 >= hertz) {
pit_counter = 0;