summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile10
-rw-r--r--src/drivers/driver.c6
-rw-r--r--src/drivers/net/network.c43
-rw-r--r--src/drivers/net/network.h20
-rw-r--r--src/drivers/net/rtl8139.c2
-rw-r--r--src/drivers/net/rtl8139.h6
6 files changed, 78 insertions, 9 deletions
diff --git a/src/Makefile b/src/Makefile
index 1696e6c..9ee5ba7 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/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/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 \
@@ -45,8 +45,9 @@ kernel.elf: kernel/entry.o kernel/kernel.o kernel/kernel_asm.o kernel/console.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/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/vga.o drivers/video/vga_font.o \
drivers/net/rtl8139.o \
@@ -114,6 +115,9 @@ drivers/hdi/ps2/ps2mouse.o: drivers/hdi/ps2/ps2mouse.c drivers/hdi/ps2/ps2mouse.
drivers/video/vga.o: drivers/video/vga.c drivers/video/vga.h
$(CC) $(CFLAGS) -c -o drivers/video/vga.o drivers/video/vga.c
+drivers/network/network.o: drivers/network/network.c drivers/network/network.h
+ $(CC) $(CFLAGS) -c -o drivers/network/network.o drivers/network/network.c
+
drivers/network/rtl8139.o: drivers/network/rtl8139.c drivers/network/rtl8139.h
$(CC) $(CFLAGS) -c -o drivers/network/rtl8139.o drivers/network/rtl8139.c
diff --git a/src/drivers/driver.c b/src/drivers/driver.c
index 829262e..0bd8059 100644
--- a/src/drivers/driver.c
+++ b/src/drivers/driver.c
@@ -2,7 +2,6 @@
#include "kernel.h"
#include "string.h"
-#include "stdio.h"
#include "stdlib.h"
static driver_vtable_t const driver_vtable = {
@@ -25,19 +24,22 @@ void driver_init( driver_t *driver, driver_type_t type, interrupt_t *interrupt,
void driver_activate( void *obj )
{
+ kernel_panic( "Activating a generic driver should not be called directly." );
}
void driver_deactivate( void *obj )
{
+ kernel_panic( "Deactivating a generic driver should not be called directly." );
}
void driver_deinit( void *obj )
{
+ // nothing to be done
}
void driver_print_info( void *obj )
{
- puts( "Unknown driver" );
+ kernel_panic( "Printing info of a generic driver should not be called directly." );
}
void driver_manager_init( driver_manager_t *manager )
diff --git a/src/drivers/net/network.c b/src/drivers/net/network.c
new file mode 100644
index 0000000..c60148f
--- /dev/null
+++ b/src/drivers/net/network.c
@@ -0,0 +1,43 @@
+#include "network.h"
+
+#include "string.h"
+#include "kernel.h"
+
+#undef DEBUG
+
+static network_vtable_t const network_vtable = {
+ {
+ network_activate,
+ network_deactivate,
+ network_deinit,
+ network_print_info
+ }
+};
+
+void network_init( network_t *network, interrupt_t *interrupt, void *context )
+{
+ memset( network, 0, sizeof( network_t ) );
+
+ driver_init( (driver_t *)network, DRIVER_TYPE_NETWORK, interrupt, context );
+
+ ((driver_t *)network)->vtable = (driver_vtable_t *)&network_vtable;
+}
+
+void network_activate( void *obj )
+{
+ kernel_panic( "Activating generic netowrk driver should not be called directly." );
+}
+
+void network_deactivate( void *obj )
+{
+ kernel_panic( "Deactivating generic netowrk driver should not be called directly." );
+}
+
+void network_deinit( void *obj )
+{
+ kernel_panic( "Printing info of generic network driver should not be called directly." );
+}
+
+void network_print_info( void *obj )
+{
+}
diff --git a/src/drivers/net/network.h b/src/drivers/net/network.h
new file mode 100644
index 0000000..524bb05
--- /dev/null
+++ b/src/drivers/net/network.h
@@ -0,0 +1,20 @@
+#ifndef NETWORK_H
+#define NETWORK_H
+
+#include "driver.h"
+
+typedef struct {
+ driver_t base;
+} network_t;
+
+typedef struct {
+ driver_vtable_t base;
+} 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 );
+
+#endif // NETWORK_H
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index a325823..4ae61e3 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -18,7 +18,7 @@ void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context )
{
memset( rtl8139, 0, sizeof( rtl8139_t ) );
- driver_init( (driver_t *)rtl8139, DRIVER_TYPE_NETWORK, interrupt, context );
+ network_init( (network_t *)rtl8139, interrupt, context );
((driver_t *)rtl8139)->vtable = (driver_vtable_t *)&rtl8139_vtable;
}
diff --git a/src/drivers/net/rtl8139.h b/src/drivers/net/rtl8139.h
index 1bb899c..a255d65 100644
--- a/src/drivers/net/rtl8139.h
+++ b/src/drivers/net/rtl8139.h
@@ -1,14 +1,14 @@
#ifndef RTL8139_H
#define RTL8139_H
-#include "driver.h"
+#include "network.h"
typedef struct {
- driver_t base;
+ network_t base;
} rtl8139_t;
typedef struct {
- driver_vtable_t base;
+ network_vtable_t base;
} rtl8139_vtable_t;
void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context );