patch-2.2.4 linux/drivers/net/a2065.c
Next file: linux/drivers/net/acenic.c
Previous file: linux/drivers/net/Space.c
Back to the patch index
Back to the overall index
- Lines: 61
- Date:
Sun Mar 21 07:22:00 1999
- Orig file:
v2.2.3/linux/drivers/net/a2065.c
- Orig date:
Wed Mar 10 15:29:46 1999
diff -u --recursive --new-file v2.2.3/linux/drivers/net/a2065.c linux/drivers/net/a2065.c
@@ -135,6 +135,7 @@
struct Linux_SBus_DMA *ledma; /* if set this points to ledma and arch=4m */
int burst_sizes; /* ledma SBus burst sizes */
#endif
+ struct timer_list multicast_timer;
};
#define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
@@ -527,6 +528,7 @@
dev->start = 0;
dev->tbusy = 1;
+ del_timer(&lp->multicast_timer);
/* Stop the card */
ll->rap = LE_CSR0;
@@ -706,12 +708,20 @@
volatile struct lance_init_block *ib = lp->init_block;
volatile struct lance_regs *ll = lp->ll;
- while (dev->tbusy)
- schedule();
+ if (!dev->start)
+ return;
+
+ if (dev->tbusy) {
+ mod_timer(&lp->multicast_timer, jiffies + 2);
+ return;
+ }
set_bit (0, (void *) &dev->tbusy);
- while (lp->tx_old != lp->tx_new)
- schedule();
+ if (lp->tx_old != lp->tx_new) {
+ mod_timer(&lp->multicast_timer, jiffies + 4);
+ dev->tbusy = 0;
+ return;
+ }
ll->rap = LE_CSR0;
ll->rdp = LE_C0_STOP;
@@ -726,6 +736,7 @@
load_csrs (lp);
init_restart_lance (lp);
dev->tbusy = 0;
+ mark_bh(NET_BH);
}
@@ -795,6 +806,11 @@
dev->dma = 0;
ether_setup(dev);
+ init_timer(&priv->multicast_timer);
+ priv->multicast_timer.data = (unsigned long) dev;
+ priv->multicast_timer.function =
+ (void (*)(unsigned long)) &lance_set_multicast;
+
zorro_config_board(key, 0);
return(0);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)