summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 17:46:21 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 17:46:21 +0200
commit5d0dbb301f00504ff59c805aa23b27a39fe5ee36 (patch)
tree752455419d001c3cc42ebce9703952d56c73e2eb /src
parent76b381c5d30f32c3018a134d96f8a5c3ad677cfa (diff)
downloadabaos-5d0dbb301f00504ff59c805aa23b27a39fe5ee36.tar.gz
abaos-5d0dbb301f00504ff59c805aa23b27a39fe5ee36.tar.bz2
mouse and keyboard are now allocated driver pointers
Diffstat (limited to 'src')
-rw-r--r--src/drivers/driver.c2
-rw-r--r--src/kernel/kernel.c23
2 files changed, 15 insertions, 10 deletions
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 <stdbool.h>
#include "stdint.h"
+#include "stdlib.h"
#include <stdarg.h>
#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 );