aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/arm/ks8695net.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/arm/ks8695net.c')
-rw-r--r--drivers/net/arm/ks8695net.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/net/arm/ks8695net.c b/drivers/net/arm/ks8695net.c
index be256b34cea8..8ca639127dbc 100644
--- a/drivers/net/arm/ks8695net.c
+++ b/drivers/net/arm/ks8695net.c
@@ -327,25 +327,24 @@ ks8695_refill_rxbuffers(struct ks8695_priv *ksp)
327 */ 327 */
328static void 328static void
329ks8695_init_partial_multicast(struct ks8695_priv *ksp, 329ks8695_init_partial_multicast(struct ks8695_priv *ksp,
330 struct dev_mc_list *addr, 330 struct net_device *ndev)
331 int nr_addr)
332{ 331{
333 u32 low, high; 332 u32 low, high;
334 int i; 333 int i;
334 struct dev_mc_list *dmi;
335 335
336 for (i = 0; i < nr_addr; i++, addr = addr->next) { 336 i = 0;
337 /* Ran out of addresses? */ 337 netdev_for_each_mc_addr(dmi, ndev) {
338 if (!addr)
339 break;
340 /* Ran out of space in chip? */ 338 /* Ran out of space in chip? */
341 BUG_ON(i == KS8695_NR_ADDRESSES); 339 BUG_ON(i == KS8695_NR_ADDRESSES);
342 340
343 low = (addr->dmi_addr[2] << 24) | (addr->dmi_addr[3] << 16) | 341 low = (dmi->dmi_addr[2] << 24) | (dmi->dmi_addr[3] << 16) |
344 (addr->dmi_addr[4] << 8) | (addr->dmi_addr[5]); 342 (dmi->dmi_addr[4] << 8) | (dmi->dmi_addr[5]);
345 high = (addr->dmi_addr[0] << 8) | (addr->dmi_addr[1]); 343 high = (dmi->dmi_addr[0] << 8) | (dmi->dmi_addr[1]);
346 344
347 ks8695_writereg(ksp, KS8695_AAL_(i), low); 345 ks8695_writereg(ksp, KS8695_AAL_(i), low);
348 ks8695_writereg(ksp, KS8695_AAH_(i), AAH_E | high); 346 ks8695_writereg(ksp, KS8695_AAH_(i), AAH_E | high);
347 i++;
349 } 348 }
350 349
351 /* Clear the remaining Additional Station Addresses */ 350 /* Clear the remaining Additional Station Addresses */
@@ -1207,7 +1206,7 @@ ks8695_set_multicast(struct net_device *ndev)
1207 if (ndev->flags & IFF_ALLMULTI) { 1206 if (ndev->flags & IFF_ALLMULTI) {
1208 /* enable all multicast mode */ 1207 /* enable all multicast mode */
1209 ctrl |= DRXC_RM; 1208 ctrl |= DRXC_RM;
1210 } else if (ndev->mc_count > KS8695_NR_ADDRESSES) { 1209 } else if (netdev_mc_count(ndev) > KS8695_NR_ADDRESSES) {
1211 /* more specific multicast addresses than can be 1210 /* more specific multicast addresses than can be
1212 * handled in hardware 1211 * handled in hardware
1213 */ 1212 */
@@ -1215,8 +1214,7 @@ ks8695_set_multicast(struct net_device *ndev)
1215 } else { 1214 } else {
1216 /* enable specific multicasts */ 1215 /* enable specific multicasts */
1217 ctrl &= ~DRXC_RM; 1216 ctrl &= ~DRXC_RM;
1218 ks8695_init_partial_multicast(ksp, ndev->mc_list, 1217 ks8695_init_partial_multicast(ksp, ndev);
1219 ndev->mc_count);
1220 } 1218 }
1221 1219
1222 ks8695_writereg(ksp, KS8695_DRXC, ctrl); 1220 ks8695_writereg(ksp, KS8695_DRXC, ctrl);
@@ -1335,7 +1333,6 @@ ks8695_stop(struct net_device *ndev)
1335 1333
1336 netif_stop_queue(ndev); 1334 netif_stop_queue(ndev);
1337 napi_disable(&ksp->napi); 1335 napi_disable(&ksp->napi);
1338 netif_carrier_off(ndev);
1339 1336
1340 ks8695_shutdown(ksp); 1337 ks8695_shutdown(ksp);
1341 1338