From 5d0dbb301f00504ff59c805aa23b27a39fe5ee36 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 15 Jul 2017 17:46:21 +0200 Subject: mouse and keyboard are now allocated driver pointers --- src/drivers/driver.c | 2 ++ src/kernel/kernel.c | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/drivers/driver.c b/src/drivers/driver.c index 18428dc..c9633b8 100644 --- a/src/drivers/driver.c +++ b/src/drivers/driver.c @@ -3,6 +3,7 @@ #include "kernel.h" #include "string.h" #include "stdio.h" +#include "stdlib.h" static driver_vtable_t const driver_vtable = { driver_register_interrupt_handler, @@ -90,6 +91,7 @@ void driver_manager_deinit( driver_manager_t *manager ) for( int i = manager->nof_drivers - 1; i >= 0; i-- ) { driver_t *driver = (driver_t *)manager->driver[i]; driver->vtable->deinit( driver ); + free( driver ); } } diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 2d34d4c..bd13e07 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -1,5 +1,6 @@ #include #include "stdint.h" +#include "stdlib.h" #include #include "vgatext.h" @@ -47,8 +48,8 @@ typedef struct { memory_manager_t memory_manager; vga_t vga; mode_t mode; - keyboard_t keyboard; - mouse_t mouse; + keyboard_t *keyboard; + mouse_t *mouse; desktop_t desktop; window_t window1; window_t window2; @@ -122,17 +123,19 @@ void kernel_main( void ) // hard-wired drivers - keyboard_init( &global_context.keyboard, &handle_keyboard_event, (void *)&global_context ); + global_context.keyboard = (keyboard_t *)malloc( sizeof( keyboard_t ) ); + keyboard_init( global_context.keyboard, &handle_keyboard_event, (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 ); + 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 ); + driver_manager_add_driver( &global_context.driver_manager, (driver_t *)global_context.keyboard ); - mouse_init( &global_context.mouse, &handle_mouse_event, global_context.vga_text.res_x, global_context.vga_text.res_y, (void *)&global_context ); + 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, (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 ); + interrupt_handler_init( &mouse_interrupt_handler, IRQ_BASE + 0x0C, &interrupt, mouse_handle_interrupt, global_context.mouse ); interrupts_register_interrupt_handler( mouse_interrupt_handler ); - driver_manager_add_driver( &global_context.driver_manager, (driver_t *)&global_context.mouse ); + 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 // possible @@ -344,7 +347,7 @@ static void switch_to_graphics_mode( global_context_t *global_context ) { vga_t *vga = &global_context->vga; vga_text_t *vga_text = &global_context->vga_text; - mouse_t *mouse = &global_context->mouse; + mouse_t *mouse = global_context->mouse; desktop_t *desktop = &global_context->desktop; if( vga_set_mode( vga, vga_make_mode( VGA_MODE_TYPE_GRAPHICS, 320, 200, 8 ) ) ) { @@ -386,7 +389,7 @@ static void switch_to_text_mode( global_context_t *global_context ) { vga_t *vga = &global_context->vga; vga_text_t *vga_text = &global_context->vga_text; - mouse_t *mouse = &global_context->mouse; + mouse_t *mouse = global_context->mouse; vga_text_restore( vga_text ); -- cgit v1.2.3-54-g00ecf