summaryrefslogtreecommitdiff
path: root/drivers/net/r8169.c
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2006-05-14 12:31:17 +0200
committerFrancois Romieu <romieu@electric-eye.fr.zoreil.com>2006-07-26 23:23:13 +0200
commit9dccf61112e6755f4e6f154c1794bab3c509bc71 (patch)
tree38c1549ccdcb617fadd5824030995c465f80710f /drivers/net/r8169.c
parenta2b98a697fa4e7564f78905b83db122824916cf9 (diff)
downloadlwn-9dccf61112e6755f4e6f154c1794bab3c509bc71.tar.gz
lwn-9dccf61112e6755f4e6f154c1794bab3c509bc71.zip
r8169: RX fifo overflow recovery
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Diffstat (limited to 'drivers/net/r8169.c')
-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 {
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,
@@ -2465,6 +2466,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];