summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-08-01 16:23:09 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-08-01 16:23:09 +0200
commitd86f301ecb8c773cde8afc646a8b7ae578b8a232 (patch)
treec97556261bd02ec2765522e5451a018fa18a25fc /src/kernel
parent0f6576eba813fdb30b619b9b0b5fa7a76c6cf636 (diff)
downloadabaos-d86f301ecb8c773cde8afc646a8b7ae578b8a232.tar.gz
abaos-d86f301ecb8c773cde8afc646a8b7ae578b8a232.tar.bz2
we can receive network events, but the receive buffer remains empty
this is because we must enable DMA transfering on the PCI bus (bus master enable)
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/kernel.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index c1f7cd1..486e04f 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -16,6 +16,7 @@
#include "video.h"
#include "pci.h"
#include "memorymanagement.h"
+#include "network.h"
#include "setjmp.h"
@@ -35,6 +36,7 @@ static jmp_buf panic_jmp_buf;
static void handle_keyboard_event( keyboard_event_t *event, void *context );
static void handle_mouse_event( mouse_event_t *event, void *context );
+static void handle_network_event( network_event_t *event, void *context );
typedef enum {
MODE_TEXT,
@@ -55,6 +57,7 @@ typedef struct {
window_t window2;
window_t window3;
text_widget_t widget3;
+ network_t *network;
} global_context_t;
static global_context_t global_context;
@@ -150,6 +153,14 @@ void kernel_main( void )
// TODO: also, what to do if there is more than one driver?
global_context.video = (video_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_VIDEO );
+ // network driver testing
+ global_context.network = (network_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_NETWORK );
+ if( global_context.network == NULL ) {
+ puts( "No suitable network driver found" );
+ } else {
+ ((network_vtable_t *)( global_context.network->base.vtable ))->register_handler( global_context.network, handle_network_event );
+ }
+
puts( "Activating drivers" );
driver_manager_activate_all( &global_context.driver_manager );
@@ -438,3 +449,8 @@ void __stack_chk_fail( void )
// make gcc happy on noreturn does return
for( ;; );
}
+
+void handle_network_event( network_event_t *event, void *context )
+{
+ puts( "NETWORK EVENT" );
+}