summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 21:14:10 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 21:14:10 +0200
commit21c1989527191fa3739984a167d7a1cf939cfd6b (patch)
tree616c12b7cefde87570a4615fbd3ac13a91287bc3 /src
parentcfc0bfa213a94a6dee80c15047026547847da91c (diff)
downloadabaos-21c1989527191fa3739984a167d7a1cf939cfd6b.tar.gz
abaos-21c1989527191fa3739984a167d7a1cf939cfd6b.tar.bz2
started to make driver construtors similar (keyboard, mouse)
passing context around to pci scanning function for driver initialization
Diffstat (limited to 'src')
-rw-r--r--src/drivers/hdi/ps2/keyboard.c7
-rw-r--r--src/drivers/hdi/ps2/keyboard.h3
-rw-r--r--src/drivers/hdi/ps2/mouse.c9
-rw-r--r--src/drivers/hdi/ps2/mouse.h3
-rw-r--r--src/drivers/video/vga.c4
-rw-r--r--src/hardware/pci.c10
-rw-r--r--src/hardware/pci.h4
-rw-r--r--src/kernel/kernel.c8
8 files changed, 24 insertions, 24 deletions
diff --git a/src/drivers/hdi/ps2/keyboard.c b/src/drivers/hdi/ps2/keyboard.c
index ccae3e7..1c5f978 100644
--- a/src/drivers/hdi/ps2/keyboard.c
+++ b/src/drivers/hdi/ps2/keyboard.c
@@ -73,16 +73,17 @@ static keyboard_vtable_t const keyboard_vtable = {
}
};
-void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, void *context )
+void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, interrupt_t *interrupt, void *context )
{
memset( keyboard, 0, sizeof( keyboard_t ) );
+ driver_init( (driver_t *)keyboard, interrupt, context );
+
port8_init( &keyboard->command_port, 0x64 );
port8_init( &keyboard->data_port, 0x60 );
keyboard->shift = false;
keyboard->handler = handler;
- keyboard->context = context;
((driver_t *)keyboard)->vtable = (driver_vtable_t *)&keyboard_vtable;
}
@@ -315,7 +316,7 @@ uint32_t keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
event.key = KEYBOARD_KEY_ESC;
}
- keyboard->handler( &event, keyboard->context );
+ keyboard->handler( &event, keyboard->base.context );
return esp;
}
diff --git a/src/drivers/hdi/ps2/keyboard.h b/src/drivers/hdi/ps2/keyboard.h
index 5f90ee8..c80b363 100644
--- a/src/drivers/hdi/ps2/keyboard.h
+++ b/src/drivers/hdi/ps2/keyboard.h
@@ -51,14 +51,13 @@ typedef struct {
port8_t data_port;
bool shift;
keyboard_event_handler_t handler;
- void *context;
} keyboard_t;
typedef struct {
driver_vtable_t base;
} keyboard_vtable_t;
-void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, void *context );
+void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, interrupt_t *interrupt, void *context );
void keyboard_activate( void *obj );
void keyboard_deactivate( void *obj );
void keyboard_deinit( void *obj );
diff --git a/src/drivers/hdi/ps2/mouse.c b/src/drivers/hdi/ps2/mouse.c
index 1421729..169f994 100644
--- a/src/drivers/hdi/ps2/mouse.c
+++ b/src/drivers/hdi/ps2/mouse.c
@@ -85,16 +85,17 @@ 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, void *context )
+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 )
{
memset( mouse, 0, sizeof( mouse_t ) );
+
+ driver_init( (driver_t *)mouse, interrupt, context );
// 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;
- mouse->context = context;
port8_init( &mouse->command_port, 0x64 );
port8_init( &mouse->data_port, 0x60 );
@@ -185,7 +186,7 @@ uint32_t mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
}
event.cursor_x = mouse->cursor_x;
event.cursor_y = mouse->cursor_y;
- mouse->handler( &event, mouse->context );
+ mouse->handler( &event, mouse->base.context );
}
}
mouse->buttons = mouse->buf[0];
@@ -222,7 +223,7 @@ uint32_t mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
event.cursor_x = mouse->cursor_x;
event.cursor_y = mouse->cursor_y;
- mouse->handler( &event, mouse->context );
+ mouse->handler( &event, mouse->base.context );
}
break;
diff --git a/src/drivers/hdi/ps2/mouse.h b/src/drivers/hdi/ps2/mouse.h
index e6ac326..b87efa5 100644
--- a/src/drivers/hdi/ps2/mouse.h
+++ b/src/drivers/hdi/ps2/mouse.h
@@ -47,14 +47,13 @@ typedef struct {
int32_t cursor_x;
int32_t cursor_y;
mouse_event_handler_t handler;
- void *context;
} 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, void *context );
+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_activate( void *obj );
void mouse_deactivate( void *obj );
void mouse_deinit( void *obj );
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c
index a8836fd..3db41ad 100644
--- a/src/drivers/video/vga.c
+++ b/src/drivers/video/vga.c
@@ -41,12 +41,12 @@ void vga_init( vga_t *vga, interrupt_t *interrupt, void *context )
void vga_activate( void *obj )
{
- puts( "Activating driver for VGA video card.." );
+ puts( "Activating driver for generic VGA video card.." );
}
void vga_deactivate( void *obj )
{
- puts( "Dectivating driver for VGA video card.." );
+ puts( "Dectivating driver for generic VGA video card.." );
}
void vga_deinit( void *obj )
diff --git a/src/hardware/pci.c b/src/hardware/pci.c
index 84249f9..0945a9a 100644
--- a/src/hardware/pci.c
+++ b/src/hardware/pci.c
@@ -65,7 +65,7 @@ void pci_controller_write( pci_controller_t *controller, uint16_t bus, uint16_t
port32_write( &controller->data_port, data );
}
-void pci_controller_scan_and_register( pci_controller_t *controller, driver_manager_t *driver_manager, interrupt_t *interrupt )
+void pci_controller_scan_and_register( pci_controller_t *controller, driver_manager_t *driver_manager, interrupt_t *interrupt, void *context )
{
for( int bus = 0; bus < NOF_BUSES; bus++ ) {
for( int device = 0; device < NOF_DEVICES_PER_BUS; device++ ) {
@@ -103,7 +103,7 @@ void pci_controller_scan_and_register( pci_controller_t *controller, driver_mana
}
}
- driver_t *driver = pci_device_get_driver( &device_descriptor, interrupt );
+ driver_t *driver = pci_device_get_driver( &device_descriptor, interrupt, context );
if( driver ) {
driver_manager_add_driver( driver_manager, driver );
}
@@ -157,7 +157,7 @@ void pci_base_address_register_init( pci_base_address_register_t *base_address_r
}
}
-driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_t *interrupt )
+driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context )
{
driver_t *driver = NULL;
@@ -167,7 +167,7 @@ driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_
switch( descriptor->device_id ) {
case 0x8139: // RTL8139
driver = (driver_t *)malloc( sizeof( rtl8139_t ) );
- rtl8139_init( (rtl8139_t *)driver, interrupt, NULL );
+ rtl8139_init( (rtl8139_t *)driver, interrupt, context );
break;
}
break;
@@ -188,7 +188,7 @@ driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_
// cannot load dynamically a VGA driver here!
// for now, let's put it directly into kernel.c
// for testing
- // vga_t *vga = malloc( sizeof( vga_t ) );
+ // vga_t *vga = malloc( sizeof( vga_t ), interrupt, context );
break;
}
break;
diff --git a/src/hardware/pci.h b/src/hardware/pci.h
index ddbc990..fcc957e 100644
--- a/src/hardware/pci.h
+++ b/src/hardware/pci.h
@@ -38,12 +38,12 @@ void pci_controller_init( pci_controller_t *controller );
uint16_t pci_controller_read( pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function, uint32_t offset );
void pci_controller_write( pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function, uint32_t offset, uint32_t data );
-void pci_controller_scan_and_register( pci_controller_t *controller, driver_manager_t *driver_manager, interrupt_t *interrupt );
+void pci_controller_scan_and_register( pci_controller_t *controller, driver_manager_t *driver_manager, interrupt_t *interrupt, void *context );
void pci_device_descriptor_init( pci_device_descriptor_t *descriptor, pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function );
void pci_base_address_register_init( pci_base_address_register_t *base_address_register, pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function, uint16_t bar );
-driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_t *interrupt );
+driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context );
#endif // PCI_H
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 7d38269..d38929c 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -124,14 +124,14 @@ void kernel_main( void )
// hard-wired drivers
global_context.keyboard = (keyboard_t *)malloc( sizeof( keyboard_t ) );
- keyboard_init( global_context.keyboard, &handle_keyboard_event, (void *)&global_context );
+ 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, (void *)&global_context );
+ 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 );
@@ -147,11 +147,11 @@ void kernel_main( void )
puts( "Detecting devices via PCI.." );
pci_controller_t pci_controller;
pci_controller_init( &pci_controller );
- pci_controller_scan_and_register( &pci_controller, &global_context.driver_manager, &interrupt );
+ pci_controller_scan_and_register( &pci_controller, &global_context.driver_manager, &interrupt, &global_context );
// TODO: merge with the text mode vga_text_t object
global_context.vga = (vga_t *)malloc( sizeof( vga_t ) );
- vga_init( global_context.vga, &interrupt, NULL );
+ vga_init( global_context.vga, &interrupt, &global_context );
driver_manager_add_driver( &global_context.driver_manager, (driver_t *)global_context.vga );
puts( "Activating drivers" );