summaryrefslogtreecommitdiff
path: root/cleopatre
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre')
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
index f340e45d87..800f5f9034 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
@@ -591,9 +591,24 @@ static void synop3504_set_multicast(struct net_device *dev)
#ifndef CONFIG_SYNOP3504_NO_TX_TIMEOUT
static void synop3504_tx_timeout(struct net_device *dev)
{
- dev->stats.tx_errors++;
- dev->trans_start = jiffies;
- printk (KERN_WARNING DRV_NAME" %s: Transmit timed out\n",dev->name);
+ struct net_priv *priv = (struct net_priv *)dev->priv;
+ Synopsys *synop = &priv->synop;
+
+ dev->stats.tx_errors++;
+ dev->trans_start = jiffies;
+ printk (KERN_WARNING DRV_NAME" %s: Transmit timed out\n",dev->name);
+
+ //Reset TX descriptors.
+ SynopsysDisableInt(synop);
+ SynopsysStopTx(synop);
+
+ synop3504_txdesc_reset(dev);
+
+ SynopsysStartTx(synop);
+ SynopsysEnableInt(synop);
+
+ //The ring is empty, the queue can be awaken.
+ netif_wake_queue(dev);
}// synop3504_tx_timeout
#endif