summaryrefslogtreecommitdiff
path: root/driver/e1000.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/e1000.c')
-rw-r--r--driver/e1000.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/driver/e1000.c b/driver/e1000.c
index 4c6b8de..4964dd1 100644
--- a/driver/e1000.c
+++ b/driver/e1000.c
@@ -411,20 +411,18 @@ void txinit()
void e1000_handleReceive()
{
- uint16_t old_cur;
- bool got_packet = false;
while((rx_descs[rx_cur]->status !=0))
{
- got_packet = true;
- klog("GOT FIRST PACKET WOOOOW");
- uint8_t *buf = (uint8_t *)(uint32_t)rx_descs[rx_cur]->addr_lo;
+ uint16_t old_cur;
+ uint8_t *buf = rx_descs[rx_cur]->addr_lo;
uint16_t len = rx_descs[rx_cur]->length;
- // Here you should inject the received packet into your network stack
- arp_incoming(&dev,buf);
+ // injecting the received packet into the network stack
+ net_incoming(&dev,buf);
- rx_descs[rx_cur]->status = 0;
+ rx_descs[rx_cur]->status = 0; // reset status
+
old_cur = rx_cur;
rx_cur = (rx_cur + 1) % E1000_NUM_RX_DESC;
writeCommand(REG_RDT, old_cur );
@@ -442,8 +440,7 @@ int e1000_sendPacket(const void * p_data, uint16_t p_len)
uint8_t old_cur = tx_cur;
tx_cur = (tx_cur + 1) % E1000_NUM_TX_DESC;
writeCommand(REG_TDT, tx_cur);
- while(!(tx_descs[old_cur]->status & 0xff));
- klog("SENT FIRST PACKET WOOOOW");
+ while(!(tx_descs[old_cur]->status & 0xff)); // TODO: seriously wait here!?!?!?
return 0;
}