From 949836a663eb652702fee79fd44b9c3f6863f920 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 20 Jul 2017 10:24:27 +0200 Subject: added a virtual network driver interface, made the dummy RTL8139 driver a specialization of it (nothing is functional there yet) --- src/drivers/driver.c | 6 ++++-- src/drivers/net/network.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/drivers/net/network.h | 20 ++++++++++++++++++++ src/drivers/net/rtl8139.c | 2 +- src/drivers/net/rtl8139.h | 6 +++--- 5 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 src/drivers/net/network.c create mode 100644 src/drivers/net/network.h (limited to 'src/drivers') 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 ); -- cgit v1.2.3-54-g00ecf