diff -r 815789678f26 -r adf0b6f46ecd devices/e1000/e1000_main-2.6.22-ethercat.c --- a/devices/e1000/e1000_main-2.6.22-ethercat.c Mon Dec 29 13:07:38 2008 +0000 +++ b/devices/e1000/e1000_main-2.6.22-ethercat.c Mon Dec 29 13:10:53 2008 +0000 @@ -24,6 +24,8 @@ e1000-devel Mailing List Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + vim: noexpandtab + *******************************************************************************/ #include "e1000-2.6.22-ethercat.h" @@ -540,8 +542,14 @@ * next_to_use != next_to_clean */ for (i = 0; i < adapter->num_rx_queues; i++) { struct e1000_rx_ring *ring = &adapter->rx_ring[i]; - adapter->alloc_rx_buf(adapter, ring, - E1000_DESC_UNUSED(ring)); + if (adapter->ecdev) { + /* fill rx ring completely! */ + adapter->alloc_rx_buf(adapter, ring, ring->count); + } else { + /* this one leaves the last ring element unallocated! */ + adapter->alloc_rx_buf(adapter, ring, + E1000_DESC_UNUSED(ring)); + } } adapter->tx_queue_len = netdev->tx_queue_len; @@ -2396,7 +2404,14 @@ /* No need to loop, because 82542 supports only 1 queue */ struct e1000_rx_ring *ring = &adapter->rx_ring[0]; e1000_configure_rx(adapter); - adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); + if (adapter->ecdev) { + /* fill rx ring completely! */ + adapter->alloc_rx_buf(adapter, ring, ring->count); + } else { + /* this one leaves the last ring element unallocated! */ + adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); + } + } } @@ -3836,12 +3851,12 @@ struct e1000_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; int i; + uint32_t icr = E1000_READ_REG(hw, ICR); + + if (adapter->ecdev) { #ifdef CONFIG_E1000_NAPI - int ec_work_done = 0; + int ec_work_done = 0; #endif - uint32_t icr = E1000_READ_REG(hw, ICR); - - if (adapter->ecdev) { for (i = 0; i < E1000_MAX_INTR; i++) #ifdef CONFIG_E1000_NAPI if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring, @@ -3916,9 +3931,6 @@ struct e1000_hw *hw = &adapter->hw; uint32_t rctl, icr = E1000_READ_REG(hw, ICR); int i; -#ifdef CONFIG_E1000_NAPI - int ec_work_done = 0; -#endif if (unlikely(!icr)) return IRQ_NONE; /* Not our interrupt */ @@ -3956,6 +3968,9 @@ } if (adapter->ecdev) { +#ifdef CONFIG_E1000_NAPI + int ec_work_done = 0; +#endif for (i = 0; i < E1000_MAX_INTR; i++) #ifdef CONFIG_E1000_NAPI if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring,