summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-08-08 21:06:42 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-08-08 21:06:42 +0200
commit235551b84395233770f525714dee257ffb0e4842 (patch)
treeef61b795afdcb1ef7406ac8bfe8fa1522a981de9 /src
parentcb2acdaf3d1ee158f41a7e2617ebaaadfeef53da (diff)
downloadabaos-235551b84395233770f525714dee257ffb0e4842.tar.gz
abaos-235551b84395233770f525714dee257ffb0e4842.tar.bz2
sending sort of an ARP reply over the rtl8139 driver
Diffstat (limited to 'src')
-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;
}