Commit 0ddf477b8a9b02412a6cabd51c486998811c7dd1

Authored by Jiri Pirko
Committed by David S. Miller
1 parent 3b9a7728d8

net: convert multiple drivers to use netdev_for_each_mc_addr, part3

Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 22 changed files with 50 additions and 74 deletions Side-by-side Diff

... ... @@ -595,9 +595,8 @@
595 595 struct lance_private *lp = netdev_priv(dev);
596 596 volatile struct lance_init_block *ib = lp->init_block;
597 597 volatile u16 *mcast_table = (u16 *)&ib->filter;
598   - struct dev_mc_list *dmi=dev->mc_list;
  598 + struct dev_mc_list *dmi;
599 599 char *addrs;
600   - int i;
601 600 u32 crc;
602 601  
603 602 /* set all multicast bits */
604 603  
... ... @@ -611,9 +610,8 @@
611 610 ib->filter [1] = 0;
612 611  
613 612 /* Add addresses */
614   - for (i = 0; i < netdev_mc_count(dev); i++){
  613 + netdev_for_each_mc_addr(dmi, dev) {
615 614 addrs = dmi->dmi_addr;
616   - dmi = dmi->next;
617 615  
618 616 /* multicast address? */
619 617 if (!(*addrs & 1))
... ... @@ -1550,13 +1550,16 @@
1550 1550 return;
1551 1551 cmd = &lp->mc_cmd;
1552 1552 cmd->cmd.command = CmdMulticastList;
1553   - cmd->mc_cnt = netdev_mc_count(dev) * 6;
  1553 + cmd->mc_cnt = cnt * ETH_ALEN;
1554 1554 cp = cmd->mc_addrs;
1555   - for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
1556   - memcpy(cp, dmi->dmi_addr, 6);
  1555 + netdev_for_each_mc_addr(dmi, dev) {
  1556 + if (!cnt--)
  1557 + break;
  1558 + memcpy(cp, dmi->dmi_addr, ETH_ALEN);
1557 1559 if (i596_debug > 1)
1558 1560 DEB(DEB_MULTI,printk(KERN_INFO "%s: Adding address %pM\n",
1559 1561 dev->name, cp));
  1562 + cp += ETH_ALEN;
1560 1563 }
1561 1564 i596_add_cmd(dev, &cmd->cmd);
1562 1565 }
... ... @@ -603,9 +603,8 @@
603 603 struct lance_private *lp = netdev_priv(dev);
604 604 volatile struct lance_init_block *ib = lp->init_block;
605 605 volatile u16 *mcast_table = (u16 *)&ib->filter;
606   - struct dev_mc_list *dmi=dev->mc_list;
  606 + struct dev_mc_list *dmi;
607 607 char *addrs;
608   - int i;
609 608 u32 crc;
610 609  
611 610 /* set all multicast bits */
612 611  
... ... @@ -619,9 +618,8 @@
619 618 ib->filter [1] = 0;
620 619  
621 620 /* Add addresses */
622   - for (i = 0; i < netdev_mc_count(dev); i++){
  621 + netdev_for_each_mc_addr(dmi, dev) {
623 622 addrs = dmi->dmi_addr;
624   - dmi = dmi->next;
625 623  
626 624 /* multicast address? */
627 625 if (!(*addrs & 1))
drivers/net/amd8111e.c
... ... @@ -1377,10 +1377,11 @@
1377 1377 */
1378 1378 static void amd8111e_set_multicast_list(struct net_device *dev)
1379 1379 {
1380   - struct dev_mc_list* mc_ptr;
  1380 + struct dev_mc_list *mc_ptr;
1381 1381 struct amd8111e_priv *lp = netdev_priv(dev);
1382 1382 u32 mc_filter[2] ;
1383   - int i,bit_num;
  1383 + int bit_num;
  1384 +
1384 1385 if(dev->flags & IFF_PROMISC){
1385 1386 writel( VAL2 | PROM, lp->mmio + CMD2);
1386 1387 return;
... ... @@ -1391,7 +1392,6 @@
1391 1392 netdev_mc_count(dev) > MAX_FILTER_SIZE) {
1392 1393 /* get all multicast packet */
1393 1394 mc_filter[1] = mc_filter[0] = 0xffffffff;
1394   - lp->mc_list = dev->mc_list;
1395 1395 lp->options |= OPTION_MULTICAST_ENABLE;
1396 1396 amd8111e_writeq(*(u64*)mc_filter,lp->mmio + LADRF);
1397 1397 return;
... ... @@ -1399,7 +1399,6 @@
1399 1399 if (netdev_mc_empty(dev)) {
1400 1400 /* get only own packets */
1401 1401 mc_filter[1] = mc_filter[0] = 0;
1402   - lp->mc_list = NULL;
1403 1402 lp->options &= ~OPTION_MULTICAST_ENABLE;
1404 1403 amd8111e_writeq(*(u64*)mc_filter,lp->mmio + LADRF);
1405 1404 /* disable promiscous mode */
1406 1405  
... ... @@ -1408,10 +1407,8 @@
1408 1407 }
1409 1408 /* load all the multicast addresses in the logic filter */
1410 1409 lp->options |= OPTION_MULTICAST_ENABLE;
1411   - lp->mc_list = dev->mc_list;
1412 1410 mc_filter[1] = mc_filter[0] = 0;
1413   - for (i = 0, mc_ptr = dev->mc_list; mc_ptr && i < netdev_mc_count(dev);
1414   - i++, mc_ptr = mc_ptr->next) {
  1411 + netdev_for_each_mc_addr(mc_ptr, dev) {
1415 1412 bit_num = (ether_crc_le(ETH_ALEN, mc_ptr->dmi_addr) >> 26) & 0x3f;
1416 1413 mc_filter[bit_num >> 5] |= 1 << (bit_num & 31);
1417 1414 }
drivers/net/amd8111e.h
... ... @@ -789,7 +789,6 @@
789 789 char opened;
790 790 struct net_device_stats stats;
791 791 unsigned int drv_rx_errors;
792   - struct dev_mc_list* mc_list;
793 792 struct amd8111e_coalesce_conf coal_conf;
794 793  
795 794 struct ipg_info ipg_data;
drivers/net/appletalk/ltpc.c
... ... @@ -1125,7 +1125,6 @@
1125 1125 printk(KERN_INFO "Apple/Farallon LocalTalk-PC card at %03x, DMA%d. Using polled mode.\n",io,dma);
1126 1126  
1127 1127 dev->netdev_ops = &ltpc_netdev;
1128   - dev->mc_list = NULL;
1129 1128 dev->base_addr = io;
1130 1129 dev->irq = irq;
1131 1130 dev->dma = dma;
drivers/net/at1700.c
... ... @@ -849,11 +849,9 @@
849 849 outb(1, ioaddr + RX_MODE); /* Ignore almost all multicasts. */
850 850 } else {
851 851 struct dev_mc_list *mclist;
852   - int i;
853 852  
854 853 memset(mc_filter, 0, sizeof(mc_filter));
855   - for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
856   - i++, mclist = mclist->next) {
  854 + netdev_for_each_mc_addr(mclist, dev) {
857 855 unsigned int bit =
858 856 ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 26;
859 857 mc_filter[bit >> 3] |= (1 << bit);
drivers/net/atl1c/atl1c_main.c
... ... @@ -377,7 +377,7 @@
377 377 AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
378 378  
379 379 /* comoute mc addresses' hash value ,and put it into hash table */
380   - for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
  380 + netdev_for_each_mc_addr(mc_ptr, netdev) {
381 381 hash_value = atl1c_hash_mc_addr(hw, mc_ptr->dmi_addr);
382 382 atl1c_hash_set(hw, hash_value);
383 383 }
drivers/net/atl1e/atl1e_main.c
... ... @@ -307,7 +307,7 @@
307 307 AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
308 308  
309 309 /* comoute mc addresses' hash value ,and put it into hash table */
310   - for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
  310 + netdev_for_each_mc_addr(mc_ptr, netdev) {
311 311 hash_value = atl1e_hash_mc_addr(hw, mc_ptr->dmi_addr);
312 312 atl1e_hash_set(hw, hash_value);
313 313 }
drivers/net/atlx/atl2.c
... ... @@ -157,7 +157,7 @@
157 157 ATL2_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0);
158 158  
159 159 /* comoute mc addresses' hash value ,and put it into hash table */
160   - for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
  160 + netdev_for_each_mc_addr(mc_ptr, netdev) {
161 161 hash_value = atl2_hash_mc_addr(hw, mc_ptr->dmi_addr);
162 162 atl2_hash_set(hw, hash_value);
163 163 }
drivers/net/atlx/atlx.c
... ... @@ -144,7 +144,7 @@
144 144 iowrite32(0, (hw->hw_addr + REG_RX_HASH_TABLE) + (1 << 2));
145 145  
146 146 /* compute mc addresses' hash value ,and put it into hash table */
147   - for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
  147 + netdev_for_each_mc_addr(mc_ptr, netdev) {
148 148 hash_value = atlx_hash_mc_addr(hw, mc_ptr->dmi_addr);
149 149 atlx_hash_set(hw, hash_value);
150 150 }
... ... @@ -886,9 +886,7 @@
886 886 struct dev_mc_list *mclist;
887 887  
888 888 memset(mc_filter, 0, sizeof(mc_filter));
889   - for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
890   - i++, mclist = mclist->next)
891   - {
  889 + netdev_for_each_mc_addr(mclist, dev) {
892 890 int filterbit = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f;
893 891 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
894 892 }
drivers/net/au1000_eth.c
... ... @@ -1018,16 +1018,13 @@
1018 1018 aup->mac->control &= ~MAC_PROMISCUOUS;
1019 1019 printk(KERN_INFO "%s: Pass all multicast\n", dev->name);
1020 1020 } else {
1021   - int i;
1022 1021 struct dev_mc_list *mclist;
1023 1022 u32 mc_filter[2]; /* Multicast hash filter */
1024 1023  
1025 1024 mc_filter[1] = mc_filter[0] = 0;
1026   - for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
1027   - i++, mclist = mclist->next) {
  1025 + netdev_for_each_mc_addr(mclist, dev)
1028 1026 set_bit(ether_crc(ETH_ALEN, mclist->dmi_addr)>>26,
1029 1027 (long *)mc_filter);
1030   - }
1031 1028 aup->mac->multi_hash_high = mc_filter[1];
1032 1029 aup->mac->multi_hash_low = mc_filter[0];
1033 1030 aup->mac->control &= ~MAC_PROMISCUOUS;
... ... @@ -1684,9 +1684,11 @@
1684 1684 int i, num_ents;
1685 1685  
1686 1686 num_ents = min_t(int, netdev_mc_count(dev), B44_MCAST_TABLE_SIZE);
1687   - mclist = dev->mc_list;
1688   - for (i = 0; mclist && i < num_ents; i++, mclist = mclist->next) {
1689   - __b44_cam_write(bp, mclist->dmi_addr, i + 1);
  1687 + i = 0;
  1688 + netdev_for_each_mc_addr(mclist, dev) {
  1689 + if (i == num_ents)
  1690 + break;
  1691 + __b44_cam_write(bp, mclist->dmi_addr, i++ + 1);
1690 1692 }
1691 1693 return i+1;
1692 1694 }
drivers/net/bcm63xx_enet.c
... ... @@ -631,16 +631,13 @@
631 631 return;
632 632 }
633 633  
634   - for (i = 0, mc_list = dev->mc_list;
635   - (mc_list != NULL) && (i < netdev_mc_count(dev)) && (i < 3);
636   - i++, mc_list = mc_list->next) {
  634 + i = 0;
  635 + netdev_for_each_mc_addr(mc_list, dev) {
637 636 u8 *dmi_addr;
638 637 u32 tmp;
639 638  
640   - /* filter non ethernet address */
641   - if (mc_list->dmi_addrlen != 6)
642   - continue;
643   -
  639 + if (i == 3)
  640 + break;
644 641 /* update perfect match registers */
645 642 dmi_addr = mc_list->dmi_addr;
646 643 tmp = (dmi_addr[2] << 24) | (dmi_addr[3] << 16) |
... ... @@ -649,7 +646,7 @@
649 646  
650 647 tmp = (dmi_addr[0] << 8 | dmi_addr[1]);
651 648 tmp |= ENET_PMH_DATAVALID_MASK;
652   - enet_writel(priv, tmp, ENET_PMH_REG(i + 1));
  649 + enet_writel(priv, tmp, ENET_PMH_REG(i++ + 1));
653 650 }
654 651  
655 652 for (; i < 3; i++) {
drivers/net/benet/be_cmds.c
... ... @@ -1134,8 +1134,7 @@
1134 1134 * (mc == NULL) => multicast promiscous
1135 1135 */
1136 1136 int be_cmd_multicast_set(struct be_adapter *adapter, u32 if_id,
1137   - struct dev_mc_list *mc_list, u32 mc_count,
1138   - struct be_dma_mem *mem)
  1137 + struct net_device *netdev, struct be_dma_mem *mem)
1139 1138 {
1140 1139 struct be_mcc_wrb *wrb;
1141 1140 struct be_cmd_req_mcast_mac_config *req = mem->va;
1142 1141  
1143 1142  
... ... @@ -1162,13 +1161,14 @@
1162 1161 OPCODE_COMMON_NTWK_MULTICAST_SET, sizeof(*req));
1163 1162  
1164 1163 req->interface_id = if_id;
1165   - if (mc_list) {
  1164 + if (netdev) {
1166 1165 int i;
1167 1166 struct dev_mc_list *mc;
1168 1167  
1169   - req->num_mac = cpu_to_le16(mc_count);
  1168 + req->num_mac = cpu_to_le16(netdev_mc_count(netdev));
1170 1169  
1171   - for (mc = mc_list, i = 0; mc; mc = mc->next, i++)
  1170 + i = 0;
  1171 + netdev_for_each_mc_addr(mc, netdev)
1172 1172 memcpy(req->mac[i].byte, mc->dmi_addr, ETH_ALEN);
1173 1173 } else {
1174 1174 req->promiscuous = 1;
drivers/net/benet/be_cmds.h
... ... @@ -912,8 +912,7 @@
912 912 extern int be_cmd_promiscuous_config(struct be_adapter *adapter,
913 913 u8 port_num, bool en);
914 914 extern int be_cmd_multicast_set(struct be_adapter *adapter, u32 if_id,
915   - struct dev_mc_list *mc_list, u32 mc_count,
916   - struct be_dma_mem *mem);
  915 + struct net_device *netdev, struct be_dma_mem *mem);
917 916 extern int be_cmd_set_flow_control(struct be_adapter *adapter,
918 917 u32 tx_fc, u32 rx_fc);
919 918 extern int be_cmd_get_flow_control(struct be_adapter *adapter,
drivers/net/benet/be_main.c
... ... @@ -577,13 +577,13 @@
577 577 /* Enable multicast promisc if num configured exceeds what we support */
578 578 if (netdev->flags & IFF_ALLMULTI ||
579 579 netdev_mc_count(netdev) > BE_MAX_MC) {
580   - be_cmd_multicast_set(adapter, adapter->if_handle, NULL, 0,
  580 + be_cmd_multicast_set(adapter, adapter->if_handle, NULL,
581 581 &adapter->mc_cmd_mem);
582 582 goto done;
583 583 }
584 584  
585   - be_cmd_multicast_set(adapter, adapter->if_handle, netdev->mc_list,
586   - netdev_mc_count(netdev), &adapter->mc_cmd_mem);
  585 + be_cmd_multicast_set(adapter, adapter->if_handle, netdev,
  586 + &adapter->mc_cmd_mem);
587 587 done:
588 588 return;
589 589 }
drivers/net/bfin_mac.c
... ... @@ -812,16 +812,14 @@
812 812 static void bfin_mac_multicast_hash(struct net_device *dev)
813 813 {
814 814 u32 emac_hashhi, emac_hashlo;
815   - struct dev_mc_list *dmi = dev->mc_list;
  815 + struct dev_mc_list *dmi;
816 816 char *addrs;
817   - int i;
818 817 u32 crc;
819 818  
820 819 emac_hashhi = emac_hashlo = 0;
821 820  
822   - for (i = 0; i < netdev_mc_count(dev); i++) {
  821 + netdev_for_each_mc_addr(dmi, dev) {
823 822 addrs = dmi->dmi_addr;
824   - dmi = dmi->next;
825 823  
826 824 /* skip non-multicast addresses */
827 825 if (!(*addrs & 1))
... ... @@ -1000,7 +1000,7 @@
1000 1000 rx_cfg = bmac_rx_on(dev, 0, 0);
1001 1001 XXDEBUG(("bmac: multi disabled, rx_cfg=%#08x\n", rx_cfg));
1002 1002 } else {
1003   - for (dmi=dev->mc_list; dmi!=NULL; dmi=dmi->next)
  1003 + netdev_for_each_mc_addr(dmi, dev)
1004 1004 bmac_addhash(bp, dmi->dmi_addr);
1005 1005 bmac_update_hash_table_mask(dev, bp);
1006 1006 rx_cfg = bmac_rx_on(dev, 1, 0);
... ... @@ -1015,7 +1015,7 @@
1015 1015  
1016 1016 static void bmac_set_multicast(struct net_device *dev)
1017 1017 {
1018   - struct dev_mc_list *dmi = dev->mc_list;
  1018 + struct dev_mc_list *dmi;
1019 1019 char *addrs;
1020 1020 int i;
1021 1021 unsigned short rx_cfg;
1022 1022  
... ... @@ -1039,9 +1039,8 @@
1039 1039  
1040 1040 for(i = 0; i < 4; i++) hash_table[i] = 0;
1041 1041  
1042   - for(i = 0; i < netdev_mc_count(dev); i++) {
  1042 + netdev_for_each_mc_addr(dmi, dev) {
1043 1043 addrs = dmi->dmi_addr;
1044   - dmi = dmi->next;
1045 1044  
1046 1045 if(!(*addrs & 1))
1047 1046 continue;
... ... @@ -3552,9 +3552,7 @@
3552 3552  
3553 3553 memset(mc_filter, 0, 4 * NUM_MC_HASH_REGISTERS);
3554 3554  
3555   - for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
3556   - i++, mclist = mclist->next) {
3557   -
  3555 + netdev_for_each_mc_addr(mclist, dev) {
3558 3556 crc = ether_crc_le(ETH_ALEN, mclist->dmi_addr);
3559 3557 bit = crc & 0xff;
3560 3558 regidx = (bit & 0xe0) >> 5;
drivers/net/bnx2x_main.c
... ... @@ -11483,10 +11483,8 @@
11483 11483 struct mac_configuration_cmd *config =
11484 11484 bnx2x_sp(bp, mcast_config);
11485 11485  
11486   - for (i = 0, mclist = dev->mc_list;
11487   - mclist && (i < netdev_mc_count(dev));
11488   - i++, mclist = mclist->next) {
11489   -
  11486 + i = 0;
  11487 + netdev_for_each_mc_addr(mclist, dev) {
11490 11488 config->config_table[i].
11491 11489 cam_entry.msb_mac_addr =
11492 11490 swab16(*(u16 *)&mclist->dmi_addr[0]);
... ... @@ -11514,6 +11512,7 @@
11514 11512 cam_entry.middle_mac_addr,
11515 11513 config->config_table[i].
11516 11514 cam_entry.lsb_mac_addr);
  11515 + i++;
11517 11516 }
11518 11517 old = config->hdr.length;
11519 11518 if (old > i) {
... ... @@ -11555,10 +11554,7 @@
11555 11554  
11556 11555 memset(mc_filter, 0, 4 * MC_HASH_SIZE);
11557 11556  
11558   - for (i = 0, mclist = dev->mc_list;
11559   - mclist && (i < netdev_mc_count(dev));
11560   - i++, mclist = mclist->next) {
11561   -
  11557 + netdev_for_each_mc_addr(mclist, dev) {
11562 11558 DP(NETIF_MSG_IFUP, "Adding mcast MAC: %pM\n",
11563 11559 mclist->dmi_addr);
11564 11560