From 7a58673a4eb00f386dcea252d3015b32847fbc17 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Mon, 24 Jul 2017 07:10:19 +0200 Subject: added print_name method to all drivers removed superfluos empty methods in abstract drivers moved printing of info to method in rtl8139 driver --- src/drivers/driver.c | 7 +++++++ src/drivers/driver.h | 2 ++ src/drivers/hdi/keyboard.c | 28 ++++------------------------ src/drivers/hdi/keyboard.h | 1 + src/drivers/hdi/mouse.c | 29 +++++------------------------ src/drivers/hdi/mouse.h | 4 ---- src/drivers/hdi/ps2/ps2keyboard.c | 8 +++++++- src/drivers/hdi/ps2/ps2keyboard.h | 1 + src/drivers/hdi/ps2/ps2mouse.c | 10 ++++++++-- src/drivers/hdi/ps2/ps2mouse.h | 1 + src/drivers/net/network.c | 28 ++++------------------------ src/drivers/net/network.h | 4 ---- src/drivers/net/rtl8139.c | 32 ++++++++++++++++++++------------ src/drivers/net/rtl8139.h | 3 +++ src/drivers/video/vga.c | 8 +++++++- src/drivers/video/vga.h | 1 + src/drivers/video/video.c | 29 +++++------------------------ src/drivers/video/video.h | 4 ---- 18 files changed, 76 insertions(+), 124 deletions(-) diff --git a/src/drivers/driver.c b/src/drivers/driver.c index b38c11e..c7ec1db 100644 --- a/src/drivers/driver.c +++ b/src/drivers/driver.c @@ -8,6 +8,7 @@ static driver_vtable_t const driver_vtable = { driver_activate, driver_deactivate, driver_deinit, + driver_print_name, driver_print_info }; @@ -37,6 +38,11 @@ void driver_deinit( void *obj ) // nothing to be done } +void driver_print_name( void *obj ) +{ + kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); +} + void driver_print_info( void *obj ) { kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); @@ -96,6 +102,7 @@ void driver_manager_print_info_all( driver_manager_t *manager ) { for( int i = 0; i < manager->nof_drivers; i++ ) { driver_t *driver = (driver_t *)manager->driver[i]; + driver->vtable->print_name( driver ); driver->vtable->print_info( driver ); } } diff --git a/src/drivers/driver.h b/src/drivers/driver.h index f39103d..7404ebb 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -7,6 +7,7 @@ typedef struct { void (*activate)( void *obj ); void (*deactivate)( void *obj ); void (*deinit)( void *obj ); + void (*print_name)( void *obj ); void (*print_info)( void *obj ); } driver_vtable_t; @@ -28,6 +29,7 @@ void driver_init( driver_t *driver, driver_type_t type, interrupt_t *interrupt, void driver_activate( void *obj ); void driver_deactivate( void *obj ); void driver_deinit( void *obj ); +void driver_print_name( void *obj ); void driver_print_info( void *obj ); #define MAX_NOF_DRIVERS 256 diff --git a/src/drivers/hdi/keyboard.c b/src/drivers/hdi/keyboard.c index 9b9c337..c96b554 100644 --- a/src/drivers/hdi/keyboard.c +++ b/src/drivers/hdi/keyboard.c @@ -5,10 +5,10 @@ static keyboard_vtable_t const keyboard_vtable = { { - keyboard_activate, - keyboard_deactivate, - keyboard_deinit, - keyboard_print_info + driver_activate, + driver_deactivate, + driver_deinit, + driver_print_info } }; @@ -22,23 +22,3 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, inte ((driver_t *)keyboard)->vtable = (driver_vtable_t *)&keyboard_vtable; } - -void keyboard_deinit( void *obj ) -{ - // nothing to be done -} - -void keyboard_activate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void keyboard_deactivate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void keyboard_print_info( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} diff --git a/src/drivers/hdi/keyboard.h b/src/drivers/hdi/keyboard.h index aab7383..4577a61 100644 --- a/src/drivers/hdi/keyboard.h +++ b/src/drivers/hdi/keyboard.h @@ -50,6 +50,7 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, inte void keyboard_activate( void *obj ); void keyboard_deactivate( void *obj ); void keyboard_deinit( void *obj ); +void keyboard_print_name( void *obj ); void keyboard_print_info( void *obj ); #endif // KEYBOARD_H diff --git a/src/drivers/hdi/mouse.c b/src/drivers/hdi/mouse.c index a0b62f9..c48dba6 100644 --- a/src/drivers/hdi/mouse.c +++ b/src/drivers/hdi/mouse.c @@ -5,10 +5,11 @@ static mouse_vtable_t const mouse_vtable = { { - mouse_activate, - mouse_deactivate, - mouse_deinit, - mouse_print_info + driver_activate, + driver_deactivate, + driver_deinit, + driver_print_name, + driver_print_info }, mouse_set_resolution, mouse_set_position @@ -25,26 +26,6 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *int ((driver_t *)mouse)->vtable = (driver_vtable_t *)&mouse_vtable; } -void mouse_deinit( void *obj ) -{ - // nothing to be done -} - -void mouse_activate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void mouse_deactivate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void mouse_print_info( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - void mouse_set_resolution( void *obj, const uint32_t res_x, const uint32_t res_y ) { mouse_t *mouse = (mouse_t *)obj; diff --git a/src/drivers/hdi/mouse.h b/src/drivers/hdi/mouse.h index 5b3d08f..e89fa5e 100644 --- a/src/drivers/hdi/mouse.h +++ b/src/drivers/hdi/mouse.h @@ -42,10 +42,6 @@ typedef struct { } mouse_vtable_t; 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 ); -void mouse_print_info( void *obj ); void mouse_set_resolution( void *obj, const uint32_t x, const uint32_t y ); void mouse_set_position( void *obj, const uint32_t x, const uint32_t y ); diff --git a/src/drivers/hdi/ps2/ps2keyboard.c b/src/drivers/hdi/ps2/ps2keyboard.c index 4151c56..6fa6caa 100644 --- a/src/drivers/hdi/ps2/ps2keyboard.c +++ b/src/drivers/hdi/ps2/ps2keyboard.c @@ -69,6 +69,7 @@ static keyboard_vtable_t const ps2keyboard_vtable = { ps2keyboard_activate, ps2keyboard_deactivate, ps2keyboard_deinit, + ps2keyboard_print_name, ps2keyboard_print_info } }; @@ -325,7 +326,12 @@ uint32_t ps2keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t es return esp; } -void ps2keyboard_print_info( void *obj ) +void ps2keyboard_print_name( void *obj ) { puts( "PS/2 keyboard driver" ); } + +void ps2keyboard_print_info( void *obj ) +{ + // TODO print type of keyboard, IRQ, etc. +} diff --git a/src/drivers/hdi/ps2/ps2keyboard.h b/src/drivers/hdi/ps2/ps2keyboard.h index a5b66ca..a0650e3 100644 --- a/src/drivers/hdi/ps2/ps2keyboard.h +++ b/src/drivers/hdi/ps2/ps2keyboard.h @@ -26,6 +26,7 @@ void ps2keyboard_init( ps2keyboard_t *ps2keyboard, keyboard_event_handler_t hand void ps2keyboard_activate( void *obj ); void ps2keyboard_deactivate( void *obj ); void ps2keyboard_deinit( void *obj ); +void ps2keyboard_print_name( void *obj ); void ps2keyboard_print_info( void *obj ); uint32_t ps2keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); diff --git a/src/drivers/hdi/ps2/ps2mouse.c b/src/drivers/hdi/ps2/ps2mouse.c index 9f0fcae..766e737 100644 --- a/src/drivers/hdi/ps2/ps2mouse.c +++ b/src/drivers/hdi/ps2/ps2mouse.c @@ -81,7 +81,8 @@ static ps2mouse_vtable_t const ps2mouse_vtable = { { ps2mouse_activate, ps2mouse_deactivate, - mouse_deinit, + driver_deinit, + ps2mouse_print_name, ps2mouse_print_info }, mouse_set_resolution, @@ -239,8 +240,13 @@ uint32_t ps2mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) return esp; } -void ps2mouse_print_info( void *obj ) +void ps2mouse_print_name( void *obj ) { puts( "PS/2 mouse driver" ); } +void ps2mouse_print_info( void *obj ) +{ + // TODO: print IRQ, mouse type, wheel, buttons, etc. +} + diff --git a/src/drivers/hdi/ps2/ps2mouse.h b/src/drivers/hdi/ps2/ps2mouse.h index 4c59089..581b8d2 100644 --- a/src/drivers/hdi/ps2/ps2mouse.h +++ b/src/drivers/hdi/ps2/ps2mouse.h @@ -28,6 +28,7 @@ typedef struct { void ps2mouse_init( ps2mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *interrupt, void *context ); void ps2mouse_activate( void *obj ); void ps2mouse_deactivate( void *obj ); +void ps2mouse_print_name( void *obj ); void ps2mouse_print_info( void *obj ); uint32_t ps2mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); diff --git a/src/drivers/net/network.c b/src/drivers/net/network.c index fe7ecc1..46a3295 100644 --- a/src/drivers/net/network.c +++ b/src/drivers/net/network.c @@ -7,10 +7,10 @@ static network_vtable_t const network_vtable = { { - network_activate, - network_deactivate, - network_deinit, - network_print_info + driver_activate, + driver_deactivate, + driver_deinit, + driver_print_info } }; @@ -23,26 +23,6 @@ void network_init( network_t *network, interrupt_t *interrupt, void *context ) ((driver_t *)network)->vtable = (driver_vtable_t *)&network_vtable; } -void network_activate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void network_deactivate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void network_deinit( void *obj ) -{ - // nothing to be done -} - -void network_print_info( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ) { snprintf( buf, buflen, "%X:%X:%X:%X:%X:%X", diff --git a/src/drivers/net/network.h b/src/drivers/net/network.h index 0621ebf..8ec17cb 100644 --- a/src/drivers/net/network.h +++ b/src/drivers/net/network.h @@ -20,10 +20,6 @@ typedef struct { } network_vtable_t; void network_init( network_t *network, interrupt_t *interrupt, void *context ); -void network_activate( void *obj ); -void network_deactivate( void *obj ); -void network_deinit( void *obj ); -void network_print_info( void *obj ); char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ); diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c index 297f89d..0f561b2 100644 --- a/src/drivers/net/rtl8139.c +++ b/src/drivers/net/rtl8139.c @@ -19,6 +19,7 @@ static rtl8139_vtable_t const rtl8139_vtable = { rtl8139_activate, rtl8139_deactivate, rtl8139_deinit, + rtl8139_print_name, rtl8139_print_info } }; @@ -70,6 +71,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte network_init( (network_t *)rtl8139, interrupt, context ); + rtl8139->pci_descriptor = *descriptor; + puts( "Initializing driver for Realtek 8139 network card.." ); for( int i = 0; i < NOF_MAC_REGISTERS; i++ ) { @@ -93,8 +96,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte port8_write( &rtl8139->CMD_port, CMD_RECEIVER_ENABLE | CMD_TRANSMITTER_ENABLE ); // get model - uint32_t model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM ); - switch( model_id ) { + rtl8139->model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM ); + switch( rtl8139->model_id ) { case TCR_MODEL_VERSION_RTL8139: rtl8139->model = "RTL8139"; @@ -152,15 +155,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte */ -#ifdef DEBUG - char buf[20]; - char buf2[30]; - snprintf( buf2, 30, "unknown submodel 0x%X", model_id ); - network_mac_to_string( rtl8139->base.mac_address, buf, 20 ); - printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n", - ( rtl8139->model != NULL ) ? rtl8139->model : buf2, - descriptor->port_base, descriptor->interrupt, buf ); -#endif + rtl8139_print_info( rtl8139 ); interrupt_handler_init( &rtl8139->interrupt_handler, IRQ_BASE + descriptor->interrupt, interrupt, rtl8139_handle_interrupt, rtl8139 ); interrupts_register_interrupt_handler( rtl8139->interrupt_handler ); @@ -198,7 +193,20 @@ uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) return esp; } -void rtl8139_print_info( void *obj ) +void rtl8139_print_name( void *obj ) { puts( "Realtek 8139 network card driver" ); } + +void rtl8139_print_info( void *obj ) +{ + rtl8139_t *rtl8139 = (rtl8139_t *)obj; + + char buf[20]; + char buf2[30]; + snprintf( buf2, 30, "unknown submodel 0x%X", rtl8139->model_id ); + network_mac_to_string( rtl8139->base.mac_address, buf, 20 ); + printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n", + ( rtl8139->model != NULL ) ? rtl8139->model : buf2, + rtl8139->pci_descriptor.port_base, rtl8139->pci_descriptor.interrupt, buf ); +} diff --git a/src/drivers/net/rtl8139.h b/src/drivers/net/rtl8139.h index 034b85b..5743205 100644 --- a/src/drivers/net/rtl8139.h +++ b/src/drivers/net/rtl8139.h @@ -13,6 +13,8 @@ typedef struct { port8_t CMD_port; port32_t TCR_port; port32_t RCR_port; + pci_device_descriptor_t pci_descriptor; + uint32_t model_id; const char *model; interrupt_handler_t interrupt_handler; } rtl8139_t; @@ -25,6 +27,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte void rtl8139_activate( void *obj ); void rtl8139_deactivate( void *obj ); void rtl8139_deinit( void *obj ); +void rtl8139_print_name( void *obj ); void rtl8139_print_info( void *obj ); uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c index 670df02..3ce0e86 100644 --- a/src/drivers/video/vga.c +++ b/src/drivers/video/vga.c @@ -15,6 +15,7 @@ static vga_vtable_t const vga_vtable = { vga_activate, vga_deactivate, vga_deinit, + vga_print_name, vga_print_info }, video_register_mode, @@ -146,11 +147,16 @@ void vga_deinit( void *obj ) } } -void vga_print_info( void *obj ) +void vga_print_name( void *obj ) { puts( "Generic VGA video driver" ); } +void vga_print_info( void *obj ) +{ + // TODO: print avaiable modes, colors, resolutions +} + static void write_registers( vga_t *vga, uint8_t *regs ) { // misc diff --git a/src/drivers/video/vga.h b/src/drivers/video/vga.h index faafd8e..26b66cd 100644 --- a/src/drivers/video/vga.h +++ b/src/drivers/video/vga.h @@ -48,6 +48,7 @@ void vga_init( vga_t *vga, interrupt_t *interrupt, void *context ); void vga_activate( void *obj ); void vga_deactivate( void *obj ); void vga_deinit( void *obj ); +void vga_print_name( void *obj ); void vga_print_info( void *obj ); bool vga_switch_mode( void *obj, const video_mode_t *mode ); diff --git a/src/drivers/video/video.c b/src/drivers/video/video.c index 064a1f6..6169714 100644 --- a/src/drivers/video/video.c +++ b/src/drivers/video/video.c @@ -7,10 +7,11 @@ static video_vtable_t const video_vtable = { { - video_activate, - video_deactivate, - video_deinit, - video_print_info + driver_activate, + driver_deactivate, + driver_deinit, + driver_print_name, + driver_print_info } }; @@ -25,26 +26,6 @@ void video_init( video_t *video, interrupt_t *interrupt, void *context ) ((driver_t *)video)->vtable = (driver_vtable_t *)&video_vtable; } -void video_activate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void video_deactivate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void video_deinit( void *obj ) -{ - // nothing to be done -} - -void video_print_info( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - video_mode_t video_make_mode( const video_mode_type_t mode_type, const int x, const int y, const int color_depth ) { video_mode_t mode; diff --git a/src/drivers/video/video.h b/src/drivers/video/video.h index 8cfebb3..037d703 100644 --- a/src/drivers/video/video.h +++ b/src/drivers/video/video.h @@ -48,10 +48,6 @@ typedef struct { } video_vtable_t; void video_init( video_t *video, interrupt_t *interrupt, void *context ); -void video_activate( void *obj ); -void video_deactivate( void *obj ); -void video_deinit( void *obj ); -void video_print_info( void *obj ); video_mode_t video_make_mode( const video_mode_type_t mode_type, const int x, const int y, const int color_depth ); -- cgit v1.2.3-54-g00ecf