summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 20:50:39 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 20:50:39 +0200
commitcfc0bfa213a94a6dee80c15047026547847da91c (patch)
treed28dbf1b368777537e93fa526d66b98a789440c2
parent4be3058d96089d9e16983affbdf0d821b6e5adc3 (diff)
downloadabaos-cfc0bfa213a94a6dee80c15047026547847da91c.tar.gz
abaos-cfc0bfa213a94a6dee80c15047026547847da91c.tar.bz2
reworked driver init and vtable, taking the interrupt manager and the context
as parameters when creating a driver
-rw-r--r--doc/LINKS.TODO3
-rw-r--r--src/drivers/driver.c14
-rw-r--r--src/drivers/driver.h6
-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.c5
-rw-r--r--src/drivers/net/rtl8139.h2
-rw-r--r--src/drivers/video/vga.c5
-rw-r--r--src/drivers/video/vga.h2
-rw-r--r--src/hardware/pci.c2
-rw-r--r--src/kernel/kernel.c2
11 files changed, 19 insertions, 24 deletions
diff --git a/doc/LINKS.TODO b/doc/LINKS.TODO
index 968ff6d..f0224f2 100644
--- a/doc/LINKS.TODO
+++ b/doc/LINKS.TODO
@@ -105,3 +105,6 @@ https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system
Security:
http://wiki.osdev.org/Stack_Smashing_Protector
+
+Networking:
+http://wiki.osdev.org/RTL8139
diff --git a/src/drivers/driver.c b/src/drivers/driver.c
index c9633b8..fae54e7 100644
--- a/src/drivers/driver.c
+++ b/src/drivers/driver.c
@@ -6,26 +6,20 @@
#include "stdlib.h"
static driver_vtable_t const driver_vtable = {
- driver_register_interrupt_handler,
driver_activate,
driver_deactivate,
driver_deinit,
driver_print_info
};
-void driver_init( driver_t *driver )
+void driver_init( driver_t *driver, interrupt_t *interrupt, void *context )
{
memset( driver, 0, sizeof( driver_t ) );
- 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->interrupt = interrupt;
driver->context = context;
+
+ driver->vtable = &driver_vtable;
}
void driver_activate( void *obj )
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index d538f14..38dfe64 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -4,7 +4,6 @@
#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 );
@@ -13,12 +12,11 @@ typedef struct {
typedef struct {
driver_vtable_t const *vtable;
- interrupt_handler_func_t handler;
+ interrupt_t *interrupt;
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_init( driver_t *driver, interrupt_t *interrupt, 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 df4edd7..ccae3e7 100644
--- a/src/drivers/hdi/ps2/keyboard.c
+++ b/src/drivers/hdi/ps2/keyboard.c
@@ -66,7 +66,6 @@ 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 bfda08f..1421729 100644
--- a/src/drivers/hdi/ps2/mouse.c
+++ b/src/drivers/hdi/ps2/mouse.c
@@ -78,7 +78,6 @@ 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
index 139f228..a5c0cd6 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -7,7 +7,6 @@
static rtl8139_vtable_t const rtl8139_vtable = {
{
- driver_register_interrupt_handler,
rtl8139_activate,
rtl8139_deactivate,
rtl8139_deinit,
@@ -15,10 +14,12 @@ static rtl8139_vtable_t const rtl8139_vtable = {
}
};
-void rtl8139_init( rtl8139_t *rtl8139 )
+void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context )
{
memset( rtl8139, 0, sizeof( rtl8139_t ) );
+ driver_init( (driver_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 fd3becc..1bb899c 100644
--- a/src/drivers/net/rtl8139.h
+++ b/src/drivers/net/rtl8139.h
@@ -11,7 +11,7 @@ typedef struct {
driver_vtable_t base;
} rtl8139_vtable_t;
-void rtl8139_init( rtl8139_t *rtl8139 );
+void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context );
void rtl8139_activate( void *obj );
void rtl8139_deactivate( void *obj );
void rtl8139_deinit( void *obj );
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c
index 5f9065e..a8836fd 100644
--- a/src/drivers/video/vga.c
+++ b/src/drivers/video/vga.c
@@ -11,7 +11,6 @@
static vga_vtable_t const vga_vtable = {
{
- driver_register_interrupt_handler,
vga_activate,
vga_deactivate,
vga_deinit,
@@ -19,9 +18,11 @@ static vga_vtable_t const vga_vtable = {
}
};
-void vga_init( vga_t *vga )
+void vga_init( vga_t *vga, interrupt_t *interrupt, void *context )
{
memset( vga, 0, sizeof( vga_t ) );
+
+ driver_init( (driver_t *)vga, interrupt, context );
port8_init( &vga->misc_port, 0x3C2 );
port8_init( &vga->crtc_index_port, 0x3D4 );
diff --git a/src/drivers/video/vga.h b/src/drivers/video/vga.h
index 9a637a2..600180a 100644
--- a/src/drivers/video/vga.h
+++ b/src/drivers/video/vga.h
@@ -54,7 +54,7 @@ typedef struct {
driver_vtable_t base;
} vga_vtable_t;
-void vga_init( vga_t *vga );
+void vga_init( vga_t *vga, interrupt_t *interrupt, void *context );
void vga_activate( void *obj );
void vga_deactivate( void *obj );
void vga_deinit( void *obj );
diff --git a/src/hardware/pci.c b/src/hardware/pci.c
index 6c43448..84249f9 100644
--- a/src/hardware/pci.c
+++ b/src/hardware/pci.c
@@ -167,7 +167,7 @@ driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_
switch( descriptor->device_id ) {
case 0x8139: // RTL8139
driver = (driver_t *)malloc( sizeof( rtl8139_t ) );
- rtl8139_init( (rtl8139_t *)driver );
+ rtl8139_init( (rtl8139_t *)driver, interrupt, NULL );
break;
}
break;
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 00f614f..7d38269 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -151,7 +151,7 @@ void kernel_main( void )
// TODO: merge with the text mode vga_text_t object
global_context.vga = (vga_t *)malloc( sizeof( vga_t ) );
- vga_init( global_context.vga );
+ vga_init( global_context.vga, &interrupt, NULL );
driver_manager_add_driver( &global_context.driver_manager, (driver_t *)global_context.vga );
puts( "Activating drivers" );