diff options
Diffstat (limited to 'src/drivers/net/rtl8139.c')
-rw-r--r-- | src/drivers/net/rtl8139.c | 7 |
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 ); |