diff options
author | Marty Connor <mdc@etherboot.org> | 2007-12-17 13:07:29 -0500 |
---|---|---|
committer | Marty Connor <mdc@etherboot.org> | 2007-12-17 13:07:29 -0500 |
commit | ff476c04e9386a21d8136afe88167df370ad929d (patch) | |
tree | b255c8fc3b1a606a217d80c4316abd5d66d60fc8 | |
parent | bea8787a03fb24ca7367595766bcde46439ba1d3 (diff) | |
download | ipxe-ff476c04e9386a21d8136afe88167df370ad929d.tar.gz |
Fix e1000 receive tail pointer (RDT) handling
e1000 should now work in VMware.
-rw-r--r-- | src/drivers/net/e1000/e1000.c | 12 | ||||
-rw-r--r-- | src/drivers/net/e1000/e1000.h | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/drivers/net/e1000/e1000.c b/src/drivers/net/e1000/e1000.c index 44054a46..739217cf 100644 --- a/src/drivers/net/e1000/e1000.c +++ b/src/drivers/net/e1000/e1000.c @@ -365,7 +365,7 @@ e1000_configure_rx ( struct e1000_adapter *adapter ) rctl = E1000_READ_REG ( hw, RCTL ); E1000_WRITE_REG ( hw, RCTL, rctl & ~E1000_RCTL_EN ); - adapter->rx_tail = 0; + adapter->rx_curr = 0; /* Setup the HW Rx Head and Tail Descriptor Pointers and * the Base and Length of the Rx Descriptor Ring */ @@ -375,7 +375,7 @@ e1000_configure_rx ( struct e1000_adapter *adapter ) E1000_WRITE_REG ( hw, RDLEN, adapter->rx_ring_size ); E1000_WRITE_REG ( hw, RDH, 0 ); - E1000_WRITE_REG ( hw, RDT, NUM_TX_DESC ); + E1000_WRITE_REG ( hw, RDT, NUM_RX_DESC - 1 ); /* Enable Receives */ rctl = ( E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 | @@ -661,7 +661,7 @@ e1000_poll ( struct net_device *netdev ) */ while ( 1 ) { - i = adapter->rx_tail;; + i = adapter->rx_curr; rx_curr_desc = ( void * ) ( adapter->rx_base ) + ( i * sizeof ( *adapter->rx_base ) ); @@ -676,7 +676,7 @@ e1000_poll ( struct net_device *netdev ) rx_len = rx_curr_desc->length; - DBG ( "Received packet, rx_tail: %ld rx_status: %#08lx rx_len: %ld\n", + DBG ( "Received packet, rx_curr: %ld rx_status: %#08lx rx_len: %ld\n", i, rx_status, rx_len ); rx_err = rx_curr_desc->errors; @@ -707,9 +707,9 @@ e1000_poll ( struct net_device *netdev ) memset ( rx_curr_desc, 0, sizeof ( *rx_curr_desc ) ); rx_curr_desc->buffer_addr = tmp_buffer_addr; - E1000_WRITE_REG ( hw, RDT, adapter->rx_tail ); + E1000_WRITE_REG ( hw, RDT, adapter->rx_curr ); - adapter->rx_tail = ( adapter->rx_tail + 1 ) % NUM_RX_DESC; + adapter->rx_curr = ( adapter->rx_curr + 1 ) % NUM_RX_DESC; } } diff --git a/src/drivers/net/e1000/e1000.h b/src/drivers/net/e1000/e1000.h index 9d601902..b4bc1d87 100644 --- a/src/drivers/net/e1000/e1000.h +++ b/src/drivers/net/e1000/e1000.h @@ -271,7 +271,7 @@ struct e1000_adapter { uint32_t tx_tail; uint32_t tx_fill_ctr; - uint32_t rx_tail; + uint32_t rx_curr; uint32_t ioaddr; uint32_t irqno; |