aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sonic.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/sonic.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/sonic.c')
-rw-r--r--drivers/net/sonic.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c
index 9599ce77ef85..287c251075e5 100644
--- a/drivers/net/sonic.c
+++ b/drivers/net/sonic.c
@@ -531,7 +531,7 @@ static void sonic_multicast_list(struct net_device *dev)
531{ 531{
532 struct sonic_local *lp = netdev_priv(dev); 532 struct sonic_local *lp = netdev_priv(dev);
533 unsigned int rcr; 533 unsigned int rcr;
534 struct dev_mc_list *dmi = dev->mc_list; 534 struct dev_mc_list *dmi;
535 unsigned char *addr; 535 unsigned char *addr;
536 int i; 536 int i;
537 537
@@ -541,19 +541,22 @@ static void sonic_multicast_list(struct net_device *dev)
541 if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ 541 if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */
542 rcr |= SONIC_RCR_PRO; 542 rcr |= SONIC_RCR_PRO;
543 } else { 543 } else {
544 if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 15)) { 544 if ((dev->flags & IFF_ALLMULTI) ||
545 (netdev_mc_count(dev) > 15)) {
545 rcr |= SONIC_RCR_AMC; 546 rcr |= SONIC_RCR_AMC;
546 } else { 547 } else {
547 if (sonic_debug > 2) 548 if (sonic_debug > 2)
548 printk("sonic_multicast_list: mc_count %d\n", dev->mc_count); 549 printk("sonic_multicast_list: mc_count %d\n",
550 netdev_mc_count(dev));
549 sonic_set_cam_enable(dev, 1); /* always enable our own address */ 551 sonic_set_cam_enable(dev, 1); /* always enable our own address */
550 for (i = 1; i <= dev->mc_count; i++) { 552 i = 1;
553 netdev_for_each_mc_addr(dmi, dev) {
551 addr = dmi->dmi_addr; 554 addr = dmi->dmi_addr;
552 dmi = dmi->next;
553 sonic_cda_put(dev, i, SONIC_CD_CAP0, addr[1] << 8 | addr[0]); 555 sonic_cda_put(dev, i, SONIC_CD_CAP0, addr[1] << 8 | addr[0]);
554 sonic_cda_put(dev, i, SONIC_CD_CAP1, addr[3] << 8 | addr[2]); 556 sonic_cda_put(dev, i, SONIC_CD_CAP1, addr[3] << 8 | addr[2]);
555 sonic_cda_put(dev, i, SONIC_CD_CAP2, addr[5] << 8 | addr[4]); 557 sonic_cda_put(dev, i, SONIC_CD_CAP2, addr[5] << 8 | addr[4]);
556 sonic_set_cam_enable(dev, sonic_get_cam_enable(dev) | (1 << i)); 558 sonic_set_cam_enable(dev, sonic_get_cam_enable(dev) | (1 << i));
559 i++;
557 } 560 }
558 SONIC_WRITE(SONIC_CDC, 16); 561 SONIC_WRITE(SONIC_CDC, 16);
559 /* issue Load CAM command */ 562 /* issue Load CAM command */