summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarty Connor2007-12-17 19:07:29 +0100
committerMarty Connor2007-12-17 19:07:29 +0100
commitff476c04e9386a21d8136afe88167df370ad929d (patch)
treeb255c8fc3b1a606a217d80c4316abd5d66d60fc8
parentKill off the now-obsolete *_fill_nic() functions. (diff)
downloadipxe-ff476c04e9386a21d8136afe88167df370ad929d.tar.gz
ipxe-ff476c04e9386a21d8136afe88167df370ad929d.tar.xz
ipxe-ff476c04e9386a21d8136afe88167df370ad929d.zip
Fix e1000 receive tail pointer (RDT) handling
e1000 should now work in VMware.
-rw-r--r--src/drivers/net/e1000/e1000.c12
-rw-r--r--src/drivers/net/e1000/e1000.h2
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;