From 3e9f594c7e06017b5d919d79530c39a58de8a3c7 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 20 Jul 2017 21:36:31 +0200 Subject: started to abstract video drivers --- src/drivers/driver.h | 2 +- src/drivers/net/network.c | 7 ++++--- src/drivers/video/vga.c | 2 +- src/drivers/video/video.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/drivers/video/video.h | 20 ++++++++++++++++++++ 5 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 src/drivers/video/video.c create mode 100644 src/drivers/video/video.h (limited to 'src/drivers') diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 4d5689e..f39103d 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -13,7 +13,7 @@ typedef struct { typedef enum { DRIVER_TYPE_KEYBOARD, DRIVER_TYPE_MOUSE, - DRIVER_TYPE_GRAPHICS, + DRIVER_TYPE_VIDEO, DRIVER_TYPE_NETWORK } driver_type_t; diff --git a/src/drivers/net/network.c b/src/drivers/net/network.c index c60148f..2de245b 100644 --- a/src/drivers/net/network.c +++ b/src/drivers/net/network.c @@ -25,19 +25,20 @@ void network_init( network_t *network, interrupt_t *interrupt, void *context ) void network_activate( void *obj ) { - kernel_panic( "Activating generic netowrk driver should not be called directly." ); + kernel_panic( "Activating generic network driver should not be called directly." ); } void network_deactivate( void *obj ) { - kernel_panic( "Deactivating generic netowrk driver should not be called directly." ); + kernel_panic( "Deactivating generic network driver should not be called directly." ); } void network_deinit( void *obj ) { - kernel_panic( "Printing info of generic network driver should not be called directly." ); + // nothing to be done } void network_print_info( void *obj ) { + kernel_panic( "Printing info of generic network driver should not be called directly." ); } diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c index b6a07a8..094a117 100644 --- a/src/drivers/video/vga.c +++ b/src/drivers/video/vga.c @@ -22,7 +22,7 @@ void vga_init( vga_t *vga, interrupt_t *interrupt, void *context ) { memset( vga, 0, sizeof( vga_t ) ); - driver_init( (driver_t *)vga, DRIVER_TYPE_GRAPHICS, interrupt, context ); + driver_init( (driver_t *)vga, DRIVER_TYPE_VIDEO, interrupt, context ); port8_init( &vga->misc_port, 0x3C2 ); port8_init( &vga->crtc_index_port, 0x3D4 ); diff --git a/src/drivers/video/video.c b/src/drivers/video/video.c new file mode 100644 index 0000000..eb12272 --- /dev/null +++ b/src/drivers/video/video.c @@ -0,0 +1,44 @@ +#include "video.h" + +#include "string.h" +#include "kernel.h" + +#undef DEBUG + +static video_vtable_t const video_vtable = { + { + video_activate, + video_deactivate, + video_deinit, + video_print_info + } +}; + +void video_init( video_t *video, interrupt_t *interrupt, void *context ) +{ + memset( video, 0, sizeof( video_t ) ); + + driver_init( (driver_t *)video, DRIVER_TYPE_VIDEO, interrupt, context ); + + ((driver_t *)video)->vtable = (driver_vtable_t *)&video_vtable; +} + +void video_activate( void *obj ) +{ + kernel_panic( "Activating generic video driver should not be called directly." ); +} + +void video_deactivate( void *obj ) +{ + kernel_panic( "Deactivating generic video driver should not be called directly." ); +} + +void video_deinit( void *obj ) +{ + // nothing to be done +} + +void video_print_info( void *obj ) +{ + kernel_panic( "Printing info of generic video driver should not be called directly." ); +} diff --git a/src/drivers/video/video.h b/src/drivers/video/video.h new file mode 100644 index 0000000..713aa4f --- /dev/null +++ b/src/drivers/video/video.h @@ -0,0 +1,20 @@ +#ifndef VIDEO_H +#define VIDEO_H + +#include "driver.h" + +typedef struct { + driver_t base; +} video_t; + +typedef struct { + driver_vtable_t base; +} 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 ); + +#endif // VIDEO_H -- cgit v1.2.3-54-g00ecf