summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile8
-rw-r--r--src/drivers/driver.h2
-rw-r--r--src/drivers/net/network.c7
-rw-r--r--src/drivers/video/vga.c2
-rw-r--r--src/drivers/video/video.c44
-rw-r--r--src/drivers/video/video.h20
-rw-r--r--src/kernel/kernel.c2
7 files changed, 77 insertions, 8 deletions
diff --git a/src/Makefile b/src/Makefile
index 9ee5ba7..0f26944 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -36,7 +36,7 @@ kernel.bin: kernel.elf
kernel.sym: kernel.elf
$(OBJCOPY) --only-keep-debug kernel.elf kernel.sym
-kernel.elf: kernel/entry.o kernel/kernel.o kernel/kernel_asm.o kernel/console.o kernel/vgatext.o kernel/serial.o kernel/memorymanagement.o kernel/tasks.o hardware/port.o hardware/port_asm.o hardware/interrupts.o hardware/interrupts_asm.o hardware/pci.o drivers/driver.o drivers/hdi/mouse.o drivers/hdi/keyboard.o drivers/hdi/ps2/ps2keyboard.o drivers/hdi/ps2/ps2mouse.o drivers/video/vga.o drivers/video/vga_font.o drivers/net/network.o drivers/net/rtl8139.o gui/widget.o gui/composite_widget.o gui/window.o gui/desktop.o gui/text_widget.o libc/string.o libc/stdlib.o libc/stdio.o libc/setjmp.o
+kernel.elf: kernel/entry.o kernel/kernel.o kernel/kernel_asm.o kernel/console.o kernel/vgatext.o kernel/serial.o kernel/memorymanagement.o kernel/tasks.o hardware/port.o hardware/port_asm.o hardware/interrupts.o hardware/interrupts_asm.o hardware/pci.o drivers/driver.o drivers/hdi/mouse.o drivers/hdi/keyboard.o drivers/hdi/ps2/ps2keyboard.o drivers/hdi/ps2/ps2mouse.o drivers/video/video.o drivers/video/vga.o drivers/video/vga_font.o drivers/net/network.o drivers/net/rtl8139.o gui/widget.o gui/composite_widget.o gui/window.o gui/desktop.o gui/text_widget.o libc/string.o libc/stdlib.o libc/stdio.o libc/setjmp.o
$(LD) -o kernel.elf -N -n -Ttext 0x8800 -e kernel_entry --oformat elf32-i386 \
kernel/entry.o \
kernel/kernel.o kernel/kernel_asm.o \
@@ -47,9 +47,10 @@ kernel.elf: kernel/entry.o kernel/kernel.o kernel/kernel_asm.o kernel/console.o
hardware/pci.o \
drivers/driver.o \
drivers/hdi/mouse.o drivers/hdi/keyboard.o \
- drivers/net/network.o \
drivers/hdi/ps2/ps2keyboard.o drivers/hdi/ps2/ps2mouse.o \
+ drivers/video/video.o \
drivers/video/vga.o drivers/video/vga_font.o \
+ drivers/net/network.o \
drivers/net/rtl8139.o \
libc/string.o libc/stdlib.o libc/stdio.o libc/setjmp.o \
gui/widget.o gui/composite_widget.o gui/window.o \
@@ -112,6 +113,9 @@ drivers/hdi/ps2/ps2keyboard.o: drivers/hdi/ps2/ps2keyboard.c drivers/hdi/ps2/ps2
drivers/hdi/ps2/ps2mouse.o: drivers/hdi/ps2/ps2mouse.c drivers/hdi/ps2/ps2mouse.h
$(CC) $(CFLAGS) -c -o drivers/hdi/ps2/ps2mouse.o drivers/hdi/ps2/ps2mouse.c
+drivers/video/video.o: drivers/video/video.c drivers/video/video.h
+ $(CC) $(CFLAGS) -c -o drivers/video/video.o drivers/video/video.c
+
drivers/video/vga.o: drivers/video/vga.c drivers/video/vga.h
$(CC) $(CFLAGS) -c -o drivers/video/vga.o drivers/video/vga.c
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
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 91d9988..4f68f18 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -148,7 +148,7 @@ void kernel_main( void )
// TODO: merge with the text mode vga_text_t object
// TODO: introduce a graphics driver type, don't cast diretly here
// TODO: also, what to do if there is more than one driver?
- global_context.vga = (vga_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_GRAPHICS );
+ global_context.vga = (vga_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_VIDEO );
puts( "Activating drivers" );
driver_manager_activate_all( &global_context.driver_manager );