diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2005-06-27 14:33:14 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-06-27 18:05:07 -0400 |
commit | d25f5a6774c3c567b11f8637a787603a62d102b1 (patch) | |
tree | 30bb7fd421f93590de9a98eec4e135d4e0c67f34 /drivers/net/skge.c | |
parent | 7e676d9136d89d0cdf661de4b9a5f8955af94e03 (diff) |
[PATCH] skge: handle Tx/Rx arbiter timeout
Need to handle receive and transmit packet arbiter timeouts.
Transmit arbiter timeouts happens when Gigabit sends to 100Mbit port
on same switch and pause occurs.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r-- | drivers/net/skge.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 290d6aa92383..9f24714260be 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -2731,6 +2731,24 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
2731 | if (status & IS_XA2_F) | 2731 | if (status & IS_XA2_F) |
2732 | skge_tx_intr(hw->dev[1]); | 2732 | skge_tx_intr(hw->dev[1]); |
2733 | 2733 | ||
2734 | if (status & IS_PA_TO_RX1) { | ||
2735 | struct skge_port *skge = netdev_priv(hw->dev[0]); | ||
2736 | ++skge->net_stats.rx_over_errors; | ||
2737 | skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX1); | ||
2738 | } | ||
2739 | |||
2740 | if (status & IS_PA_TO_RX2) { | ||
2741 | struct skge_port *skge = netdev_priv(hw->dev[1]); | ||
2742 | ++skge->net_stats.rx_over_errors; | ||
2743 | skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX2); | ||
2744 | } | ||
2745 | |||
2746 | if (status & IS_PA_TO_TX1) | ||
2747 | skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX1); | ||
2748 | |||
2749 | if (status & IS_PA_TO_TX2) | ||
2750 | skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX2); | ||
2751 | |||
2734 | if (status & IS_MAC1) | 2752 | if (status & IS_MAC1) |
2735 | skge_mac_intr(hw, 0); | 2753 | skge_mac_intr(hw, 0); |
2736 | 2754 | ||