aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2006-05-14 06:31:17 -0400
committerFrancois Romieu <romieu@electric-eye.fr.zoreil.com>2006-07-26 17:23:13 -0400
commit9dccf61112e6755f4e6f154c1794bab3c509bc71 (patch)
tree38c1549ccdcb617fadd5824030995c465f80710f
parenta2b98a697fa4e7564f78905b83db122824916cf9 (diff)
r8169: RX fifo overflow recovery
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
-rw-r--r--drivers/net/r8169.c13
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];