diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-15 17:38:09 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-15 17:38:09 +0200 |
commit | 76b381c5d30f32c3018a134d96f8a5c3ad677cfa (patch) | |
tree | bc151c2f2a8e07e0b08f4827ff24202088c20c0b /src/hardware | |
parent | 5631e68852081bb4e4eaa6e3bb3a53a4d024dff2 (diff) | |
download | abaos-76b381c5d30f32c3018a134d96f8a5c3ad677cfa.tar.gz abaos-76b381c5d30f32c3018a134d96f8a5c3ad677cfa.tar.bz2 |
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
Diffstat (limited to 'src/hardware')
-rw-r--r-- | src/hardware/pci.c | 19 |
1 files changed, 13 insertions, 6 deletions
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; } |