From 818d61794e7a3d4503acc9e922c134dfd1407476 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 22 Jul 2017 22:18:23 +0200 Subject: started to code RTL8139 network driver, for now setting io_base and IRQ --- src/drivers/net/rtl8139.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'src/drivers/net/rtl8139.c') diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c index 4ae61e3..f895ff8 100644 --- a/src/drivers/net/rtl8139.c +++ b/src/drivers/net/rtl8139.c @@ -3,7 +3,16 @@ #include "string.h" #include "stdio.h" -#undef DEBUG +#define DEBUG + +/* +Offset (from IO base) Size Name +0x08 8 MAR0-7 +0x30 4 RBSTART +0x37 1 CMD +0x3C 2 IMR +0x3E 2 ISR +*/ static rtl8139_vtable_t const rtl8139_vtable = { { @@ -14,12 +23,27 @@ static rtl8139_vtable_t const rtl8139_vtable = { } }; -void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context ) +#define REG_MAC0 0 +#define REG_MAC4 4 + +void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context ) { memset( rtl8139, 0, sizeof( rtl8139_t ) ); network_init( (network_t *)rtl8139, interrupt, context ); + puts( "Initializing driver for Realtek 8139 network card.." ); +#ifdef DEBUG + printf( "using I/O base 0x%X\n", descriptor->port_base ); + printf( "using interrupt %d\n", descriptor->interrupt ); +#endif + + port32_init( &rtl8139->MAC0_port, descriptor->port_base + REG_MAC0 ); + port16_init( &rtl8139->MAC4_port, descriptor->port_base + REG_MAC4 ); + + interrupt_handler_init( &rtl8139->interrupt_handler, IRQ_BASE + descriptor->interrupt, interrupt, rtl8139_handle_interrupt, rtl8139 ); + interrupts_register_interrupt_handler( rtl8139->interrupt_handler ); + ((driver_t *)rtl8139)->vtable = (driver_vtable_t *)&rtl8139_vtable; } @@ -42,6 +66,17 @@ void rtl8139_deinit( void *obj ) // nothing to do } +uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) +{ + rtl8139_t *rtl8139 = (rtl8139_t *)handler->driver; + +#ifdef DEBUG + printf( "RTL INTERRUPT\n" ); +#endif + + return esp; +} + void rtl8139_print_info( void *obj ) { puts( "Realtek 8139 network card driver" ); -- cgit v1.2.3-54-g00ecf