summaryrefslogtreecommitdiff
path: root/src/hardware/pci.c
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 17:38:09 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-15 17:38:09 +0200
commit76b381c5d30f32c3018a134d96f8a5c3ad677cfa (patch)
treebc151c2f2a8e07e0b08f4827ff24202088c20c0b /src/hardware/pci.c
parent5631e68852081bb4e4eaa6e3bb3a53a4d024dff2 (diff)
downloadabaos-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/pci.c')
-rw-r--r--src/hardware/pci.c19
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;
}