From 1e8bad98827b651009a8ad4b8134d8a72a004be3 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 16 Jul 2017 08:19:05 +0200 Subject: moved registering of mouse/keyboard interrupts into the driver activation instead of having them directly in kernel.c also more standardization of the driver init functions (mouse set_resolution instead of constructor parameters res_x and res_y) --- src/drivers/hdi/ps2/keyboard.c | 4 ++++ src/drivers/hdi/ps2/keyboard.h | 1 + src/drivers/hdi/ps2/mouse.c | 7 +++++-- src/drivers/hdi/ps2/mouse.h | 3 ++- src/kernel/kernel.c | 9 ++------- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/drivers/hdi/ps2/keyboard.c b/src/drivers/hdi/ps2/keyboard.c index 1c5f978..d4003b2 100644 --- a/src/drivers/hdi/ps2/keyboard.c +++ b/src/drivers/hdi/ps2/keyboard.c @@ -92,6 +92,7 @@ void keyboard_activate( void *obj ) { puts( "Activating driver for PS/2 keyboard.." ); + driver_t *driver = obj; keyboard_t *keyboard = obj; // first switch off port 1 @@ -122,6 +123,9 @@ void keyboard_activate( void *obj ) //send_command( keyboard, KBD_ACTIVATE ); //read_ack( keyboard ); + interrupt_handler_init( &keyboard->interrupt_handler, IRQ_BASE + 0x01, driver->interrupt, keyboard_handle_interrupt, obj ); + interrupts_register_interrupt_handler( keyboard->interrupt_handler ); + // enable port 1 send_command( keyboard, COMMAND_ENABLE_PORT1 ); } diff --git a/src/drivers/hdi/ps2/keyboard.h b/src/drivers/hdi/ps2/keyboard.h index c80b363..a0e06ef 100644 --- a/src/drivers/hdi/ps2/keyboard.h +++ b/src/drivers/hdi/ps2/keyboard.h @@ -51,6 +51,7 @@ typedef struct { port8_t data_port; bool shift; keyboard_event_handler_t handler; + interrupt_handler_t interrupt_handler; } keyboard_t; typedef struct { diff --git a/src/drivers/hdi/ps2/mouse.c b/src/drivers/hdi/ps2/mouse.c index 169f994..66c0dea 100644 --- a/src/drivers/hdi/ps2/mouse.c +++ b/src/drivers/hdi/ps2/mouse.c @@ -85,7 +85,7 @@ static mouse_vtable_t const mouse_vtable = { } }; -void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, const uint32_t res_x, const uint32_t res_y, interrupt_t *interrupt, void *context ) +void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *interrupt, void *context ) { memset( mouse, 0, sizeof( mouse_t ) ); @@ -94,7 +94,6 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, const uint32_t r // TODO: we should probe for wheel mouse and more than 3 packets mouse->nof_packets = DEFAULT_NOF_PACKETS; - mouse_set_resolution( mouse, res_x, res_y ); mouse->handler = handler; port8_init( &mouse->command_port, 0x64 ); @@ -107,6 +106,7 @@ void mouse_activate( void *obj ) { puts( "Activating driver for PS/2 mouse.." ); + driver_t *driver = obj; mouse_t *mouse = obj; // enable port 2 @@ -137,6 +137,9 @@ void mouse_activate( void *obj ) // send_command( mouse, COMMAND_SEND_TO_PORT2 ); // write_data( mouse, MOUSE_COMMAND_SET_DEFAULTS ); + interrupt_handler_init( &mouse->interrupt_handler, IRQ_BASE + 0x0C, driver->interrupt, mouse_handle_interrupt, obj ); + interrupts_register_interrupt_handler( mouse->interrupt_handler ); + // enable mouse on second port send_command( mouse, COMMAND_SEND_TO_PORT2 ); write_data( mouse, MOUSE_COMMAND_ENABLE_DATAREPORTING ); diff --git a/src/drivers/hdi/ps2/mouse.h b/src/drivers/hdi/ps2/mouse.h index b87efa5..1a00b5e 100644 --- a/src/drivers/hdi/ps2/mouse.h +++ b/src/drivers/hdi/ps2/mouse.h @@ -47,13 +47,14 @@ typedef struct { int32_t cursor_x; int32_t cursor_y; mouse_event_handler_t handler; + interrupt_handler_t interrupt_handler; } mouse_t; typedef struct { driver_vtable_t base; } mouse_vtable_t; -void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, const uint32_t res_x, const uint32_t res_y, interrupt_t *interrupt, void *context ); +void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *interrupt, void *context ); void mouse_activate( void *obj ); void mouse_deactivate( void *obj ); void mouse_deinit( void *obj ); diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index d38929c..31d4ec7 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -125,16 +125,11 @@ void kernel_main( void ) global_context.keyboard = (keyboard_t *)malloc( sizeof( keyboard_t ) ); keyboard_init( global_context.keyboard, &handle_keyboard_event, &interrupt, (void *)&global_context ); - interrupt_handler_t keyboard_interrupt_handler; - interrupt_handler_init( &keyboard_interrupt_handler, IRQ_BASE + 0x01, &interrupt, keyboard_handle_interrupt, global_context.keyboard ); - interrupts_register_interrupt_handler( keyboard_interrupt_handler ); driver_manager_add_driver( &global_context.driver_manager, (driver_t *)global_context.keyboard ); global_context.mouse = (mouse_t *)malloc( sizeof( mouse_t ) ); - mouse_init( global_context.mouse, &handle_mouse_event, global_context.vga_text.res_x, global_context.vga_text.res_y, &interrupt, (void *)&global_context ); - interrupt_handler_t mouse_interrupt_handler; - interrupt_handler_init( &mouse_interrupt_handler, IRQ_BASE + 0x0C, &interrupt, mouse_handle_interrupt, global_context.mouse ); - interrupts_register_interrupt_handler( mouse_interrupt_handler ); + mouse_init( global_context.mouse, &handle_mouse_event, &interrupt, (void *)&global_context ); + mouse_set_resolution( global_context.mouse, global_context.vga_text.res_x, global_context.vga_text.res_y ); driver_manager_add_driver( &global_context.driver_manager, (driver_t *)global_context.mouse ); // exit point in case of kernel panic, do this as soon as -- cgit v1.2.3-54-g00ecf