diff options
author | Francois Romieu <romieu@fr.zoreil.com> | 2006-12-17 22:11:16 +0100 |
---|---|---|
committer | Adrian Bunk <bunk@stusta.de> | 2006-12-17 22:11:16 +0100 |
commit | 0263245a8ca0dd71240734d0e1da46fbd4fcab84 (patch) | |
tree | 9933230eb1ffae8826a160cb6ef671a1ea715c26 | |
parent | 5871db7738d0e2152c5ed35cef10029f2f26e05f (diff) |
r8169: RX fifo overflow recovery
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
-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 8cc0d0bbdf5..68e009bfbdd 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -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]; |