diff options
Diffstat (limited to 'drivers/net/sky2.c')
| -rw-r--r-- | drivers/net/sky2.c | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index bb185e5efa35..9729062d1fbb 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -1919,6 +1919,12 @@ static inline void sky2_tx_done(struct net_device *dev, u16 last) | |||
| 1919 | } | 1919 | } | 
| 1920 | } | 1920 | } | 
| 1921 | 1921 | ||
| 1922 | /* Is status ring empty or is there more to do? */ | ||
| 1923 | static inline int sky2_more_work(const struct sky2_hw *hw) | ||
| 1924 | { | ||
| 1925 | return (hw->st_idx != sky2_read16(hw, STAT_PUT_IDX)); | ||
| 1926 | } | ||
| 1927 | |||
| 1922 | /* Process status response ring */ | 1928 | /* Process status response ring */ | 
| 1923 | static int sky2_status_intr(struct sky2_hw *hw, int to_do) | 1929 | static int sky2_status_intr(struct sky2_hw *hw, int to_do) | 
| 1924 | { | 1930 | { | 
| @@ -2191,19 +2197,19 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
| 2191 | if (status & Y2_IS_CHK_TXA2) | 2197 | if (status & Y2_IS_CHK_TXA2) | 
| 2192 | sky2_descriptor_error(hw, 1, "transmit", Y2_IS_CHK_TXA2); | 2198 | sky2_descriptor_error(hw, 1, "transmit", Y2_IS_CHK_TXA2); | 
| 2193 | 2199 | ||
| 2194 | if (status & Y2_IS_STAT_BMU) | ||
| 2195 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); | ||
| 2196 | |||
| 2197 | work_done = sky2_status_intr(hw, work_limit); | 2200 | work_done = sky2_status_intr(hw, work_limit); | 
| 2198 | *budget -= work_done; | 2201 | *budget -= work_done; | 
| 2199 | dev0->quota -= work_done; | 2202 | dev0->quota -= work_done; | 
| 2200 | 2203 | ||
| 2201 | if (work_done >= work_limit) | 2204 | if (status & Y2_IS_STAT_BMU) | 
| 2205 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); | ||
| 2206 | |||
| 2207 | if (sky2_more_work(hw)) | ||
| 2202 | return 1; | 2208 | return 1; | 
| 2203 | 2209 | ||
| 2204 | netif_rx_complete(dev0); | 2210 | netif_rx_complete(dev0); | 
| 2205 | 2211 | ||
| 2206 | status = sky2_read32(hw, B0_Y2_SP_LISR); | 2212 | sky2_read32(hw, B0_Y2_SP_LISR); | 
| 2207 | return 0; | 2213 | return 0; | 
| 2208 | } | 2214 | } | 
| 2209 | 2215 | ||
