From 76b381c5d30f32c3018a134d96f8a5c3ad677cfa Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 15 Jul 2017 17:38:09 +0200 Subject: added a dummy RTL8139 network driver added register interrupt handler methods to drivers (but I'm pretty unsure about them) setting network in qemu startup and using RTL8139 emulation drivers --- src/drivers/driver.c | 9 ++++++++ src/drivers/driver.h | 4 ++++ src/drivers/hdi/ps2/keyboard.c | 1 + src/drivers/hdi/ps2/mouse.c | 1 + src/drivers/net/rtl8139.c | 47 ++++++++++++++++++++++++++++++++++++++++++ src/drivers/net/rtl8139.h | 20 ++++++++++++++++++ src/drivers/video/vga.c | 1 + 7 files changed, 83 insertions(+) create mode 100644 src/drivers/net/rtl8139.c create mode 100644 src/drivers/net/rtl8139.h (limited to 'src/drivers') 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, -- cgit v1.2.3-54-g00ecf