diff options
Diffstat (limited to 'src/drivers/net')
-rw-r--r-- | src/drivers/net/network.c | 28 | ||||
-rw-r--r-- | src/drivers/net/network.h | 4 | ||||
-rw-r--r-- | src/drivers/net/rtl8139.c | 32 | ||||
-rw-r--r-- | src/drivers/net/rtl8139.h | 3 |
4 files changed, 27 insertions, 40 deletions
diff --git a/src/drivers/net/network.c b/src/drivers/net/network.c index fe7ecc1..46a3295 100644 --- a/src/drivers/net/network.c +++ b/src/drivers/net/network.c @@ -7,10 +7,10 @@ static network_vtable_t const network_vtable = { { - network_activate, - network_deactivate, - network_deinit, - network_print_info + driver_activate, + driver_deactivate, + driver_deinit, + driver_print_info } }; @@ -23,26 +23,6 @@ void network_init( network_t *network, interrupt_t *interrupt, void *context ) ((driver_t *)network)->vtable = (driver_vtable_t *)&network_vtable; } -void network_activate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void network_deactivate( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - -void network_deinit( void *obj ) -{ - // nothing to be done -} - -void network_print_info( void *obj ) -{ - kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ ); -} - char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ) { snprintf( buf, buflen, "%X:%X:%X:%X:%X:%X", diff --git a/src/drivers/net/network.h b/src/drivers/net/network.h index 0621ebf..8ec17cb 100644 --- a/src/drivers/net/network.h +++ b/src/drivers/net/network.h @@ -20,10 +20,6 @@ typedef struct { } network_vtable_t; void network_init( network_t *network, interrupt_t *interrupt, void *context ); -void network_activate( void *obj ); -void network_deactivate( void *obj ); -void network_deinit( void *obj ); -void network_print_info( void *obj ); char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen ); diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c index 297f89d..0f561b2 100644 --- a/src/drivers/net/rtl8139.c +++ b/src/drivers/net/rtl8139.c @@ -19,6 +19,7 @@ static rtl8139_vtable_t const rtl8139_vtable = { rtl8139_activate, rtl8139_deactivate, rtl8139_deinit, + rtl8139_print_name, rtl8139_print_info } }; @@ -70,6 +71,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte network_init( (network_t *)rtl8139, interrupt, context ); + rtl8139->pci_descriptor = *descriptor; + puts( "Initializing driver for Realtek 8139 network card.." ); for( int i = 0; i < NOF_MAC_REGISTERS; i++ ) { @@ -93,8 +96,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte port8_write( &rtl8139->CMD_port, CMD_RECEIVER_ENABLE | CMD_TRANSMITTER_ENABLE ); // get model - uint32_t model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM ); - switch( model_id ) { + rtl8139->model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM ); + switch( rtl8139->model_id ) { case TCR_MODEL_VERSION_RTL8139: rtl8139->model = "RTL8139"; @@ -152,15 +155,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte */ -#ifdef DEBUG - char buf[20]; - char buf2[30]; - snprintf( buf2, 30, "unknown submodel 0x%X", model_id ); - network_mac_to_string( rtl8139->base.mac_address, buf, 20 ); - printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n", - ( rtl8139->model != NULL ) ? rtl8139->model : buf2, - descriptor->port_base, descriptor->interrupt, buf ); -#endif + rtl8139_print_info( rtl8139 ); interrupt_handler_init( &rtl8139->interrupt_handler, IRQ_BASE + descriptor->interrupt, interrupt, rtl8139_handle_interrupt, rtl8139 ); interrupts_register_interrupt_handler( rtl8139->interrupt_handler ); @@ -198,7 +193,20 @@ uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) return esp; } -void rtl8139_print_info( void *obj ) +void rtl8139_print_name( void *obj ) { puts( "Realtek 8139 network card driver" ); } + +void rtl8139_print_info( void *obj ) +{ + rtl8139_t *rtl8139 = (rtl8139_t *)obj; + + char buf[20]; + char buf2[30]; + snprintf( buf2, 30, "unknown submodel 0x%X", rtl8139->model_id ); + network_mac_to_string( rtl8139->base.mac_address, buf, 20 ); + printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n", + ( rtl8139->model != NULL ) ? rtl8139->model : buf2, + rtl8139->pci_descriptor.port_base, rtl8139->pci_descriptor.interrupt, buf ); +} diff --git a/src/drivers/net/rtl8139.h b/src/drivers/net/rtl8139.h index 034b85b..5743205 100644 --- a/src/drivers/net/rtl8139.h +++ b/src/drivers/net/rtl8139.h @@ -13,6 +13,8 @@ typedef struct { port8_t CMD_port; port32_t TCR_port; port32_t RCR_port; + pci_device_descriptor_t pci_descriptor; + uint32_t model_id; const char *model; interrupt_handler_t interrupt_handler; } rtl8139_t; @@ -25,6 +27,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte void rtl8139_activate( void *obj ); void rtl8139_deactivate( void *obj ); void rtl8139_deinit( void *obj ); +void rtl8139_print_name( void *obj ); void rtl8139_print_info( void *obj ); uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); |