From 21c1989527191fa3739984a167d7a1cf939cfd6b Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 15 Jul 2017 21:14:10 +0200 Subject: started to make driver construtors similar (keyboard, mouse) passing context around to pci scanning function for driver initialization --- src/drivers/hdi/ps2/keyboard.c | 7 ++++--- src/drivers/hdi/ps2/keyboard.h | 3 +-- src/drivers/hdi/ps2/mouse.c | 9 +++++---- src/drivers/hdi/ps2/mouse.h | 3 +-- src/drivers/video/vga.c | 4 ++-- src/hardware/pci.c | 10 +++++----- src/hardware/pci.h | 4 ++-- src/kernel/kernel.c | 8 ++++---- 8 files changed, 24 insertions(+), 24 deletions(-) (limited to 'src') 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" ); -- cgit v1.2.3-54-g00ecf