diff options
author | Francois Romieu <romieu@fr.zoreil.com> | 2006-05-14 06:31:17 -0400 |
---|---|---|
committer | Francois Romieu <romieu@electric-eye.fr.zoreil.com> | 2006-07-26 17:23:13 -0400 |
commit | 9dccf61112e6755f4e6f154c1794bab3c509bc71 (patch) | |
tree | 38c1549ccdcb617fadd5824030995c465f80710f | |
parent | a2b98a697fa4e7564f78905b83db122824916cf9 (diff) |
r8169: RX fifo overflow recovery
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
-rw-r--r-- | drivers/net/r8169.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index e8786c4fcac2..ea4f9f7bd071 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -257,10 +257,11 @@ enum RTL8169_register_content { | |||
257 | RxOK = 0x01, | 257 | RxOK = 0x01, |
258 | 258 | ||
259 | /* RxStatusDesc */ | 259 | /* RxStatusDesc */ |
260 | RxRES = 0x00200000, | 260 | RxFOVF = (1 << 23), |
261 | RxCRC = 0x00080000, | 261 | RxRWT = (1 << 22), |
262 | RxRUNT = 0x00100000, | 262 | RxRES = (1 << 21), |
263 | RxRWT = 0x00400000, | 263 | RxRUNT = (1 << 20), |
264 | RxCRC = (1 << 19), | ||
264 | 265 | ||
265 | /* ChipCmdBits */ | 266 | /* ChipCmdBits */ |
266 | CmdReset = 0x10, | 267 | CmdReset = 0x10, |
@@ -2465,6 +2466,10 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp, | |||
2465 | tp->stats.rx_length_errors++; | 2466 | tp->stats.rx_length_errors++; |
2466 | if (status & RxCRC) | 2467 | if (status & RxCRC) |
2467 | tp->stats.rx_crc_errors++; | 2468 | tp->stats.rx_crc_errors++; |
2469 | if (status & RxFOVF) { | ||
2470 | rtl8169_schedule_work(dev, rtl8169_reset_task); | ||
2471 | tp->stats.rx_fifo_errors++; | ||
2472 | } | ||
2468 | rtl8169_mark_to_asic(desc, tp->rx_buf_sz); | 2473 | rtl8169_mark_to_asic(desc, tp->rx_buf_sz); |
2469 | } else { | 2474 | } else { |
2470 | struct sk_buff *skb = tp->Rx_skbuff[entry]; | 2475 | struct sk_buff *skb = tp->Rx_skbuff[entry]; |