]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
r8169: RX fifo overflow recovery
authorFrancois Romieu <romieu@fr.zoreil.com>
Sun, 17 Dec 2006 21:11:16 +0000 (22:11 +0100)
committerAdrian Bunk <bunk@stusta.de>
Sun, 17 Dec 2006 21:11:16 +0000 (22:11 +0100)
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
drivers/net/r8169.c

index 8cc0d0bbdf50f10143b6b64cac0afc54aaae944a..68e009bfbdda3b954e402eebd86639675688f64e 100644 (file)
@@ -256,10 +256,11 @@ enum RTL8169_register_content {
        RxOK = 0x01,
 
        /* RxStatusDesc */
-       RxRES = 0x00200000,
-       RxCRC = 0x00080000,
-       RxRUNT = 0x00100000,
-       RxRWT = 0x00400000,
+       RxFOVF  = (1 << 23),
+       RxRWT   = (1 << 22),
+       RxRES   = (1 << 21),
+       RxRUNT  = (1 << 20),
+       RxCRC   = (1 << 19),
 
        /* ChipCmdBits */
        CmdReset = 0x10,
@@ -2435,6 +2436,10 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp,
                                tp->stats.rx_length_errors++;
                        if (status & RxCRC)
                                tp->stats.rx_crc_errors++;
+                       if (status & RxFOVF) {
+                               rtl8169_schedule_work(dev, rtl8169_reset_task);
+                               tp->stats.rx_fifo_errors++;
+                       }
                        rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
                } else {
                        struct sk_buff *skb = tp->Rx_skbuff[entry];