aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/sky2.c53
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