Commit 3b4e4982 authored by Roger Luethi's avatar Roger Luethi Committed by Linus Torvalds

[PATCH] via-rhine 1.18-2.5: Fix Rhine-I regression

This patch addresses a minor regression reported by Rhine-I users (leading
to occasional Tx timeouts).

I also merged some cosmetic changes.
parent 9e3f02a1
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
/* /*
Written 1998-2001 by Donald Becker. Written 1998-2001 by Donald Becker.
Current Maintainer: Roger Luethi <rl@hellgate.ch>
This software may be used and distributed according to the terms of This software may be used and distributed according to the terms of
the GNU General Public License (GPL), incorporated herein by reference. the GNU General Public License (GPL), incorporated herein by reference.
Drivers based on or derived from this code fall under the GPL and must Drivers based on or derived from this code fall under the GPL and must
...@@ -9,8 +11,9 @@ ...@@ -9,8 +11,9 @@
a complete program and may only be used when the entire operating a complete program and may only be used when the entire operating
system is licensed under the GPL. system is licensed under the GPL.
This driver is designed for the VIA VT86C100A Rhine-I. This driver is designed for the VIA VT86C100A Rhine-I.
It also works with the 6102 Rhine-II, and 6105/6105M Rhine-III. It also works with the Rhine-II (6102) and Rhine-III (6105/6105L/6105LOM
and management NIC 6105M).
The author may be reached as becker@scyld.com, or C/O The author may be reached as becker@scyld.com, or C/O
Scyld Computing Corporation Scyld Computing Corporation
...@@ -115,11 +118,15 @@ ...@@ -115,11 +118,15 @@
- Force flushing for PCI posted writes - Force flushing for PCI posted writes
- More reset code changes - More reset code changes
LK1.1.18 (Roger Luethi)
- No filtering multicast in promisc mode (Edward Peng)
- Fix for Rhine-I Tx timeouts
*/ */
#define DRV_NAME "via-rhine" #define DRV_NAME "via-rhine"
#define DRV_VERSION "1.1.17" #define DRV_VERSION "1.1.18-2.5"
#define DRV_RELDATE "March-1-2003" #define DRV_RELDATE "July-4-2003"
/* A few user-configurable values. /* A few user-configurable values.
...@@ -386,17 +393,17 @@ static struct via_rhine_chip_info via_rhine_chip_info[] __devinitdata = ...@@ -386,17 +393,17 @@ static struct via_rhine_chip_info via_rhine_chip_info[] __devinitdata =
{ "VIA VT6102 Rhine-II", RHINE_IOTYPE, 256, { "VIA VT6102 Rhine-II", RHINE_IOTYPE, 256,
CanHaveMII | HasWOL }, CanHaveMII | HasWOL },
{ "VIA VT6105 Rhine-III", RHINE_IOTYPE, 256, { "VIA VT6105 Rhine-III", RHINE_IOTYPE, 256,
CanHaveMII | HasWOL }, CanHaveMII | HasWOL },
{ "VIA VT6105M Rhine-III", RHINE_IOTYPE, 256, { "VIA VT6105M Rhine-III", RHINE_IOTYPE, 256,
CanHaveMII | HasWOL }, CanHaveMII | HasWOL },
}; };
static struct pci_device_id via_rhine_pci_tbl[] __devinitdata = static struct pci_device_id via_rhine_pci_tbl[] __devinitdata =
{ {
{0x1106, 0x3043, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT86C100A}, {0x1106, 0x3043, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT86C100A},
{0x1106, 0x3065, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6102}, {0x1106, 0x3065, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6102},
{0x1106, 0x3106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6105}, {0x1106, 0x3106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6105}, /* 6105{,L,LOM} */
{0x1106, 0x3053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6105M}, {0x1106, 0x3053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VT6105M},
{0,} /* terminate list */ {0,} /* terminate list */
}; };
MODULE_DEVICE_TABLE(pci, via_rhine_pci_tbl); MODULE_DEVICE_TABLE(pci, via_rhine_pci_tbl);
...@@ -441,7 +448,7 @@ enum intr_status_bits { ...@@ -441,7 +448,7 @@ enum intr_status_bits {
IntrRxWakeUp=0x8000, IntrRxWakeUp=0x8000,
IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260, IntrNormalSummary=0x0003, IntrAbnormalSummary=0xC260,
IntrTxDescRace=0x080000, /* mapped from IntrStatus2 */ IntrTxDescRace=0x080000, /* mapped from IntrStatus2 */
IntrTxErrSummary=0x082210, IntrTxErrSummary=0x082218,
}; };
/* The Rx and Tx buffer descriptors. */ /* The Rx and Tx buffer descriptors. */
...@@ -1655,11 +1662,18 @@ static void via_rhine_error(struct net_device *dev, int intr_status) ...@@ -1655,11 +1662,18 @@ static void via_rhine_error(struct net_device *dev, int intr_status)
printk(KERN_INFO "%s: Tx descriptor write-back race.\n", printk(KERN_INFO "%s: Tx descriptor write-back race.\n",
dev->name); dev->name);
} }
if (intr_status & ( IntrTxAborted | IntrTxUnderrun | IntrTxDescRace )) if ((intr_status & IntrTxError) && ~( IntrTxAborted | IntrTxUnderrun |
IntrTxDescRace )) {
if (debug > 2)
printk(KERN_INFO "%s: Unspecified error.\n",
dev->name);
}
if (intr_status & ( IntrTxAborted | IntrTxUnderrun | IntrTxDescRace |
IntrTxError ))
via_rhine_restart_tx(dev); via_rhine_restart_tx(dev);
if (intr_status & ~( IntrLinkChange | IntrStatsMax | IntrTxUnderrun | if (intr_status & ~( IntrLinkChange | IntrStatsMax | IntrTxUnderrun |
IntrTxError | IntrTxAborted | IntrNormalSummary | IntrTxError | IntrTxAborted | IntrNormalSummary |
IntrTxDescRace )) { IntrTxDescRace )) {
if (debug > 1) if (debug > 1)
printk(KERN_ERR "%s: Something Wicked happened! %8.8x.\n", printk(KERN_ERR "%s: Something Wicked happened! %8.8x.\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment