diff options
| -rw-r--r-- | drivers/net/sky2.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 76da74fbe859..552aca76b283 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -2105,45 +2105,42 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
| 2105 | int work_done = 0; | 2105 | int work_done = 0; |
| 2106 | u32 status = sky2_read32(hw, B0_Y2_SP_EISR); | 2106 | u32 status = sky2_read32(hw, B0_Y2_SP_EISR); |
| 2107 | 2107 | ||
| 2108 | if (unlikely(status & ~Y2_IS_STAT_BMU)) { | 2108 | if (status & Y2_IS_HW_ERR) |
| 2109 | if (status & Y2_IS_HW_ERR) | 2109 | sky2_hw_intr(hw); |
| 2110 | sky2_hw_intr(hw); | ||
| 2111 | 2110 | ||
| 2112 | if (status & Y2_IS_IRQ_PHY1) | 2111 | if (status & Y2_IS_IRQ_PHY1) |
| 2113 | sky2_phy_intr(hw, 0); | 2112 | sky2_phy_intr(hw, 0); |
| 2114 | 2113 | ||
| 2115 | if (status & Y2_IS_IRQ_PHY2) | 2114 | if (status & Y2_IS_IRQ_PHY2) |
| 2116 | sky2_phy_intr(hw, 1); | 2115 | sky2_phy_intr(hw, 1); |
| 2117 | 2116 | ||
| 2118 | if (status & Y2_IS_IRQ_MAC1) | 2117 | if (status & Y2_IS_IRQ_MAC1) |
| 2119 | sky2_mac_intr(hw, 0); | 2118 | sky2_mac_intr(hw, 0); |
| 2120 | 2119 | ||
| 2121 | if (status & Y2_IS_IRQ_MAC2) | 2120 | if (status & Y2_IS_IRQ_MAC2) |
| 2122 | sky2_mac_intr(hw, 1); | 2121 | sky2_mac_intr(hw, 1); |
| 2123 | 2122 | ||
| 2124 | if (status & Y2_IS_CHK_RX1) | 2123 | if (status & Y2_IS_CHK_RX1) |
| 2125 | sky2_descriptor_error(hw, 0, "receive", Y2_IS_CHK_RX1); | 2124 | sky2_descriptor_error(hw, 0, "receive", Y2_IS_CHK_RX1); |
| 2126 | 2125 | ||
| 2127 | if (status & Y2_IS_CHK_RX2) | 2126 | if (status & Y2_IS_CHK_RX2) |
| 2128 | sky2_descriptor_error(hw, 1, "receive", Y2_IS_CHK_RX2); | 2127 | sky2_descriptor_error(hw, 1, "receive", Y2_IS_CHK_RX2); |
| 2129 | 2128 | ||
| 2130 | if (status & Y2_IS_CHK_TXA1) | 2129 | if (status & Y2_IS_CHK_TXA1) |
| 2131 | sky2_descriptor_error(hw, 0, "transmit", Y2_IS_CHK_TXA1); | 2130 | sky2_descriptor_error(hw, 0, "transmit", Y2_IS_CHK_TXA1); |
| 2132 | 2131 | ||
| 2133 | if (status & Y2_IS_CHK_TXA2) | 2132 | if (status & Y2_IS_CHK_TXA2) |
| 2134 | sky2_descriptor_error(hw, 1, "transmit", Y2_IS_CHK_TXA2); | 2133 | sky2_descriptor_error(hw, 1, "transmit", Y2_IS_CHK_TXA2); |
| 2135 | } | ||
| 2136 | 2134 | ||
| 2137 | if (status & Y2_IS_STAT_BMU) { | 2135 | if (status & Y2_IS_STAT_BMU) |
| 2138 | work_done = sky2_status_intr(hw, work_limit); | 2136 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); |
| 2139 | *budget -= work_done; | ||
| 2140 | dev0->quota -= work_done; | ||
| 2141 | 2137 | ||
| 2142 | if (work_done >= work_limit) | 2138 | work_done = sky2_status_intr(hw, work_limit); |
| 2143 | return 1; | 2139 | *budget -= work_done; |
| 2140 | dev0->quota -= work_done; | ||
| 2144 | 2141 | ||
| 2145 | sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); | 2142 | if (work_done >= work_limit) |
| 2146 | } | 2143 | return 1; |
| 2147 | 2144 | ||
| 2148 | mod_timer(&hw->idle_timer, jiffies + HZ); | 2145 | mod_timer(&hw->idle_timer, jiffies + HZ); |
| 2149 | 2146 | ||
