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/hardware/pci.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/hardware') diff --git a/src/hardware/pci.c b/src/hardware/pci.c index 6aae01e..6c43448 100644 --- a/src/hardware/pci.c +++ b/src/hardware/pci.c @@ -2,8 +2,10 @@ #include "string.h" #include "stdio.h" +#include "stdlib.h" #include "drivers/video/vga.h" +#include "drivers/net/rtl8139.h" #define NOF_BUSES 8 #define NOF_DEVICES_PER_BUS 32 @@ -99,11 +101,11 @@ void pci_controller_scan_and_register( pci_controller_t *controller, driver_mana if( bar.type == BASE_ADDRESS_REGISTER_TYPE_IO && bar.addr ) { device_descriptor.port_base = (uint32_t)bar.addr; } + } - driver_t *driver = pci_device_get_driver( &device_descriptor, interrupt ); - if( driver ) { - driver_manager_add_driver( driver_manager, driver ); - } + driver_t *driver = pci_device_get_driver( &device_descriptor, interrupt ); + if( driver ) { + driver_manager_add_driver( driver_manager, driver ); } } } @@ -157,11 +159,15 @@ void pci_base_address_register_init( pci_base_address_register_t *base_address_r driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_t *interrupt ) { + driver_t *driver = NULL; + // find a specific device switch( descriptor->vendor_id ) { case 0x10ec: // Realtek Semiconductor switch( descriptor->device_id ) { - case 0x8029: // RTL-8029 + case 0x8139: // RTL8139 + driver = (driver_t *)malloc( sizeof( rtl8139_t ) ); + rtl8139_init( (rtl8139_t *)driver ); break; } break; @@ -190,5 +196,6 @@ driver_t *pci_device_get_driver( pci_device_descriptor_t *descriptor, interrupt_ default: // no driver found break; } - return NULL; + + return driver; } -- cgit v1.2.3-54-g00ecf