summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/rtl8139.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index ad6ccfe..7731475 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -335,7 +335,6 @@ uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
printf( "rtl8139: INTERRUPT: %X\n", isr );
#endif
-
if( isr & ISR_RECEIVE_OK ) {
// TODO: manual says, we should reset the ISR bit first,
// then go into a read loop?
@@ -370,6 +369,8 @@ void rtl8139_print_info( void *obj )
void rtl8139_write( void *obj, network_buffer_t buf )
{
+ rtl8139_t *rtl8139 = (rtl8139_t *)obj;
+
#ifdef DEBUG
printf( "rtl8139: sending data of length %d\n", buf.length );
printf( "rtl8139: " );
@@ -378,4 +379,11 @@ void rtl8139_write( void *obj, network_buffer_t buf )
}
puts( "" );
#endif
+
+ memcpy( rtl8139->transmit_buffer[rtl8139->transmit_buffer_idx], buf.data, buf.length );
+
+ port32_write( &rtl8139->TSD_port[rtl8139->transmit_buffer_idx], buf.length & 0xFFF );
+
+ rtl8139->transmit_buffer_idx += 1;
+ rtl8139->transmit_buffer_idx %= NOF_TRANSMIT_BUFFERS;
}