summaryrefslogtreecommitdiff
path: root/src/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/video')
-rw-r--r--src/drivers/video/vga.c2
-rw-r--r--src/drivers/video/video.c44
-rw-r--r--src/drivers/video/video.h20
3 files changed, 65 insertions, 1 deletions
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