summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/driver.c9
-rw-r--r--src/drivers/driver.h4
-rw-r--r--src/drivers/hdi/ps2/keyboard.c1
-rw-r--r--src/drivers/hdi/ps2/mouse.c1
-rw-r--r--src/drivers/net/rtl8139.c47
-rw-r--r--src/drivers/net/rtl8139.h20
-rw-r--r--src/drivers/video/vga.c1
7 files changed, 83 insertions, 0 deletions
diff --git a/src/drivers/driver.c b/src/drivers/driver.c
index aac2e36..18428dc 100644
--- a/src/drivers/driver.c
+++ b/src/drivers/driver.c
@@ -5,6 +5,7 @@
#include "stdio.h"
static driver_vtable_t const driver_vtable = {
+ driver_register_interrupt_handler,
driver_activate,
driver_deactivate,
driver_deinit,
@@ -18,6 +19,14 @@ void driver_init( driver_t *driver )
driver->vtable = &driver_vtable;
}
+void driver_register_interrupt_handler( void *obj, interrupt_handler_func_t handler, void *context )
+{
+ driver_t *driver = (driver_t *)obj;
+
+ driver->handler = handler;
+ driver->context = context;
+}
+
void driver_activate( void *obj )
{
}
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 0f1a2b4..d538f14 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -4,6 +4,7 @@
#include "interrupts.h"
typedef struct {
+ void (*register_interrupt_handler)( void *obj, interrupt_handler_func_t handler, void *context );
void (*activate)( void *obj );
void (*deactivate)( void *obj );
void (*deinit)( void *obj );
@@ -12,9 +13,12 @@ typedef struct {
typedef struct {
driver_vtable_t const *vtable;
+ interrupt_handler_func_t handler;
+ void *context;
} driver_t;
void driver_init( driver_t *driver );
+void driver_register_interrupt_handler( void *obj, interrupt_handler_func_t handler, void *context );
void driver_activate( void *obj );
void driver_deactivate( void *obj );
void driver_deinit( void *obj );
diff --git a/src/drivers/hdi/ps2/keyboard.c b/src/drivers/hdi/ps2/keyboard.c
index ccae3e7..df4edd7 100644
--- a/src/drivers/hdi/ps2/keyboard.c
+++ b/src/drivers/hdi/ps2/keyboard.c
@@ -66,6 +66,7 @@ static void read_ack( keyboard_t *keyboard )
static keyboard_vtable_t const keyboard_vtable = {
{
+ driver_register_interrupt_handler,
keyboard_activate,
keyboard_deactivate,
keyboard_deinit,
diff --git a/src/drivers/hdi/ps2/mouse.c b/src/drivers/hdi/ps2/mouse.c
index 1421729..bfda08f 100644
--- a/src/drivers/hdi/ps2/mouse.c
+++ b/src/drivers/hdi/ps2/mouse.c
@@ -78,6 +78,7 @@ static void set_sample_rate( mouse_t *mouse, uint8_t samples )
static mouse_vtable_t const mouse_vtable = {
{
+ driver_register_interrupt_handler,
mouse_activate,
mouse_deactivate,
mouse_deinit,
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
new file mode 100644
index 0000000..139f228
--- /dev/null
+++ b/src/drivers/net/rtl8139.c
@@ -0,0 +1,47 @@
+#include "rtl8139.h"
+
+#include "string.h"
+#include "stdio.h"
+
+#undef DEBUG
+
+static rtl8139_vtable_t const rtl8139_vtable = {
+ {
+ driver_register_interrupt_handler,
+ rtl8139_activate,
+ rtl8139_deactivate,
+ rtl8139_deinit,
+ rtl8139_print_info
+ }
+};
+
+void rtl8139_init( rtl8139_t *rtl8139 )
+{
+ memset( rtl8139, 0, sizeof( rtl8139_t ) );
+
+ ((driver_t *)rtl8139)->vtable = (driver_vtable_t *)&rtl8139_vtable;
+}
+
+void rtl8139_activate( void *obj )
+{
+ puts( "Activating driver for Realtek 8139 network card.." );
+
+ rtl8139_t *rtl8139 = obj;
+}
+
+void rtl8139_deactivate( void *obj )
+{
+ puts( "Dectivating driver for Realtek 8139 network card.." );
+
+ rtl8139_t *rtl8139 = obj;
+}
+
+void rtl8139_deinit( void *obj )
+{
+ // nothing to do
+}
+
+void rtl8139_print_info( void *obj )
+{
+ puts( "Realtek 8139 network card driver" );
+}
diff --git a/src/drivers/net/rtl8139.h b/src/drivers/net/rtl8139.h
new file mode 100644
index 0000000..fd3becc
--- /dev/null
+++ b/src/drivers/net/rtl8139.h
@@ -0,0 +1,20 @@
+#ifndef RTL8139_H
+#define RTL8139_H
+
+#include "driver.h"
+
+typedef struct {
+ driver_t base;
+} rtl8139_t;
+
+typedef struct {
+ driver_vtable_t base;
+} rtl8139_vtable_t;
+
+void rtl8139_init( rtl8139_t *rtl8139 );
+void rtl8139_activate( void *obj );
+void rtl8139_deactivate( void *obj );
+void rtl8139_deinit( void *obj );
+void rtl8139_print_info( void *obj );
+
+#endif // RTL8139_H
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c
index fd5bb10..5f9065e 100644
--- a/src/drivers/video/vga.c
+++ b/src/drivers/video/vga.c
@@ -11,6 +11,7 @@
static vga_vtable_t const vga_vtable = {
{
+ driver_register_interrupt_handler,
vga_activate,
vga_deactivate,
vga_deinit,