diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-08-08 21:06:42 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-08-08 21:06:42 +0200 |
commit | 235551b84395233770f525714dee257ffb0e4842 (patch) | |
tree | ef61b795afdcb1ef7406ac8bfe8fa1522a981de9 /src | |
parent | cb2acdaf3d1ee158f41a7e2617ebaaadfeef53da (diff) | |
download | abaos-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.c | 10 |
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; } |