summaryrefslogtreecommitdiff
path: root/src/drivers/net/rtl8139.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net/rtl8139.c')
-rw-r--r--src/drivers/net/rtl8139.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index e6898d4..4f32815 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -89,12 +89,13 @@ static rtl8139_vtable_t const rtl8139_vtable = {
// receive buffer, set to 8k + header (16) + wrap (2k)
#define RECEIVE_BUFFER_SIZE 8192 + 16 + 2048
-void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context )
+void rtl8139_init( rtl8139_t *rtl8139, pci_controller_t *pci, pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context )
{
memset( rtl8139, 0, sizeof( rtl8139_t ) );
network_init( (network_t *)rtl8139, interrupt, context );
+ rtl8139->pci = pci;
rtl8139->pci_descriptor = *descriptor;
puts( "Initializing driver for Realtek 8139 network card.." );
@@ -184,6 +185,10 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte
// reset missed packet counter
port32_write( &rtl8139->MPC_port, 0 );
+ // enable bus mastering for DMA transfers (without this the receive
+ // buffer remains empty!)
+ pci_enable_bus_mastering( rtl8139->pci, &rtl8139->pci_descriptor );
+
interrupt_handler_init( &rtl8139->interrupt_handler, IRQ_BASE + descriptor->interrupt, interrupt, rtl8139_handle_interrupt, rtl8139 );
interrupts_register_interrupt_handler( rtl8139->interrupt_handler );