summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-16 08:19:05 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-16 08:19:05 +0200
commit1e8bad98827b651009a8ad4b8134d8a72a004be3 (patch)
tree3c93acf15ff42d3f07d807d02852f43d8ac21b1b
parent21c1989527191fa3739984a167d7a1cf939cfd6b (diff)
downloadabaos-1e8bad98827b651009a8ad4b8134d8a72a004be3.tar.gz
abaos-1e8bad98827b651009a8ad4b8134d8a72a004be3.tar.bz2
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)
-rw-r--r--src/drivers/hdi/ps2/keyboard.c4
-rw-r--r--src/drivers/hdi/ps2/keyboard.h1
-rw-r--r--src/drivers/hdi/ps2/mouse.c7
-rw-r--r--src/drivers/hdi/ps2/mouse.h3
-rw-r--r--src/kernel/kernel.c9
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