diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2005-06-27 11:33:14 -0700 |
---|---|---|
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) | |
download | talos-op-linux-d25f5a6774c3c567b11f8637a787603a62d102b1.tar.gz talos-op-linux-d25f5a6774c3c567b11f8637a787603a62d102b1.zip |
[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) if (status & IS_XA2_F) skge_tx_intr(hw->dev[1]); + if (status & IS_PA_TO_RX1) { + struct skge_port *skge = netdev_priv(hw->dev[0]); + ++skge->net_stats.rx_over_errors; + skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX1); + } + + if (status & IS_PA_TO_RX2) { + struct skge_port *skge = netdev_priv(hw->dev[1]); + ++skge->net_stats.rx_over_errors; + skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX2); + } + + if (status & IS_PA_TO_TX1) + skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX1); + + if (status & IS_PA_TO_TX2) + skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX2); + if (status & IS_MAC1) skge_mac_intr(hw, 0); |