summaryrefslogtreecommitdiff
path: root/src/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net')
-rw-r--r--src/drivers/net/network.c28
-rw-r--r--src/drivers/net/network.h4
-rw-r--r--src/drivers/net/rtl8139.c32
-rw-r--r--src/drivers/net/rtl8139.h3
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 );