diff options
-rw-r--r-- | drivers/net/depca.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/net/depca.c b/drivers/net/depca.c index f87f6e3dc721..5113eef755b9 100644 --- a/drivers/net/depca.c +++ b/drivers/net/depca.c | |||
@@ -1252,24 +1252,22 @@ static void set_multicast_list(struct net_device *dev) | |||
1252 | struct depca_private *lp = (struct depca_private *) dev->priv; | 1252 | struct depca_private *lp = (struct depca_private *) dev->priv; |
1253 | u_long ioaddr = dev->base_addr; | 1253 | u_long ioaddr = dev->base_addr; |
1254 | 1254 | ||
1255 | if (dev) { | 1255 | netif_stop_queue(dev); |
1256 | netif_stop_queue(dev); | 1256 | while (lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ |
1257 | while (lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ | ||
1258 | |||
1259 | STOP_DEPCA; /* Temporarily stop the depca. */ | ||
1260 | depca_init_ring(dev); /* Initialize the descriptor rings */ | ||
1261 | 1257 | ||
1262 | if (dev->flags & IFF_PROMISC) { /* Set promiscuous mode */ | 1258 | STOP_DEPCA; /* Temporarily stop the depca. */ |
1263 | lp->init_block.mode |= PROM; | 1259 | depca_init_ring(dev); /* Initialize the descriptor rings */ |
1264 | } else { | ||
1265 | SetMulticastFilter(dev); | ||
1266 | lp->init_block.mode &= ~PROM; /* Unset promiscuous mode */ | ||
1267 | } | ||
1268 | 1260 | ||
1269 | LoadCSRs(dev); /* Reload CSR3 */ | 1261 | if (dev->flags & IFF_PROMISC) { /* Set promiscuous mode */ |
1270 | InitRestartDepca(dev); /* Resume normal operation. */ | 1262 | lp->init_block.mode |= PROM; |
1271 | netif_start_queue(dev); /* Unlock the TX ring */ | 1263 | } else { |
1264 | SetMulticastFilter(dev); | ||
1265 | lp->init_block.mode &= ~PROM; /* Unset promiscuous mode */ | ||
1272 | } | 1266 | } |
1267 | |||
1268 | LoadCSRs(dev); /* Reload CSR3 */ | ||
1269 | InitRestartDepca(dev); /* Resume normal operation. */ | ||
1270 | netif_start_queue(dev); /* Unlock the TX ring */ | ||
1273 | } | 1271 | } |
1274 | 1272 | ||
1275 | /* | 1273 | /* |