diff options
| author | Jiri Pirko <jpirko@redhat.com> | 2010-02-17 19:42:54 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-02-18 17:47:49 -0500 |
| commit | 5508590c193661bc1484ad7b952af5fceacea40d (patch) | |
| tree | 8b7d1655f63034725127b9456afa5bad4bb6e83a | |
| parent | 2a0d18f97cc15d57ad0c93259a3df4cb72c5a28b (diff) | |
net: convert multiple drivers to use netdev_for_each_mc_addr, part2
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/s2io.c | 5 | ||||
| -rw-r--r-- | drivers/net/sb1250-mac.c | 6 | ||||
| -rw-r--r-- | drivers/net/sc92031.c | 2 | ||||
| -rw-r--r-- | drivers/net/sfc/efx.c | 6 | ||||
| -rw-r--r-- | drivers/net/sis190.c | 4 | ||||
| -rw-r--r-- | drivers/net/sis900.c | 5 | ||||
| -rw-r--r-- | drivers/net/skfp/skfddi.c | 10 | ||||
| -rw-r--r-- | drivers/net/skge.c | 10 | ||||
| -rw-r--r-- | drivers/net/sky2.c | 5 | ||||
| -rw-r--r-- | drivers/net/smsc9420.c | 5 | ||||
| -rw-r--r-- | drivers/net/sonic.c | 7 | ||||
| -rw-r--r-- | drivers/net/spider_net.c | 2 | ||||
| -rw-r--r-- | drivers/net/starfire.c | 4 | ||||
| -rw-r--r-- | drivers/net/stmmac/dwmac100.c | 4 | ||||
| -rw-r--r-- | drivers/net/stmmac/dwmac1000_core.c | 4 | ||||
| -rw-r--r-- | drivers/net/sun3_82586.c | 8 | ||||
| -rw-r--r-- | drivers/net/sunbmac.c | 5 | ||||
| -rw-r--r-- | drivers/net/sundance.c | 3 | ||||
| -rw-r--r-- | drivers/net/sungem.c | 10 | ||||
| -rw-r--r-- | drivers/net/sunhme.c | 20 | ||||
| -rw-r--r-- | drivers/net/sunlance.c | 6 | ||||
| -rw-r--r-- | drivers/net/sunqe.c | 9 | ||||
| -rw-r--r-- | drivers/net/sunvnet.c | 2 |
23 files changed, 55 insertions, 87 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 102be16e9b52..43bc66aa8405 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
| @@ -5092,8 +5092,8 @@ static void s2io_set_multicast(struct net_device *dev) | |||
| 5092 | } | 5092 | } |
| 5093 | 5093 | ||
| 5094 | /* Create the new Rx filter list and update the same in H/W. */ | 5094 | /* Create the new Rx filter list and update the same in H/W. */ |
| 5095 | for (i = 0, mclist = dev->mc_list; i < netdev_mc_count(dev); | 5095 | i = 0; |
| 5096 | i++, mclist = mclist->next) { | 5096 | netdev_for_each_mc_addr(mclist, dev) { |
| 5097 | memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr, | 5097 | memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr, |
| 5098 | ETH_ALEN); | 5098 | ETH_ALEN); |
| 5099 | mac_addr = 0; | 5099 | mac_addr = 0; |
| @@ -5121,6 +5121,7 @@ static void s2io_set_multicast(struct net_device *dev) | |||
| 5121 | dev->name); | 5121 | dev->name); |
| 5122 | return; | 5122 | return; |
| 5123 | } | 5123 | } |
| 5124 | i++; | ||
| 5124 | } | 5125 | } |
| 5125 | } | 5126 | } |
| 5126 | } | 5127 | } |
diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c index 564d4d7f855b..9944e5d662c0 100644 --- a/drivers/net/sb1250-mac.c +++ b/drivers/net/sb1250-mac.c | |||
| @@ -2161,13 +2161,13 @@ static void sbmac_setmulti(struct sbmac_softc *sc) | |||
| 2161 | * XXX if the table overflows */ | 2161 | * XXX if the table overflows */ |
| 2162 | 2162 | ||
| 2163 | idx = 1; /* skip station address */ | 2163 | idx = 1; /* skip station address */ |
| 2164 | mclist = dev->mc_list; | 2164 | netdev_for_each_mc_addr(mclist, dev) { |
| 2165 | while (mclist && (idx < MAC_ADDR_COUNT)) { | 2165 | if (idx == MAC_ADDR_COUNT) |
| 2166 | break; | ||
| 2166 | reg = sbmac_addr2reg(mclist->dmi_addr); | 2167 | reg = sbmac_addr2reg(mclist->dmi_addr); |
| 2167 | port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t)); | 2168 | port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t)); |
| 2168 | __raw_writeq(reg, port); | 2169 | __raw_writeq(reg, port); |
| 2169 | idx++; | 2170 | idx++; |
| 2170 | mclist = mclist->next; | ||
| 2171 | } | 2171 | } |
| 2172 | 2172 | ||
| 2173 | /* | 2173 | /* |
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index 00ff8995ad69..d87c4787fffa 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
| @@ -435,7 +435,7 @@ static void _sc92031_set_mar(struct net_device *dev) | |||
| 435 | else if (dev->flags & IFF_MULTICAST) { | 435 | else if (dev->flags & IFF_MULTICAST) { |
| 436 | struct dev_mc_list *mc_list; | 436 | struct dev_mc_list *mc_list; |
| 437 | 437 | ||
| 438 | for (mc_list = dev->mc_list; mc_list; mc_list = mc_list->next) { | 438 | netdev_for_each_mc_addr(mc_list, dev) { |
| 439 | u32 crc; | 439 | u32 crc; |
| 440 | unsigned bit = 0; | 440 | unsigned bit = 0; |
| 441 | 441 | ||
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index dc58d9fd0f32..88f2fb193abe 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
| @@ -1602,11 +1602,10 @@ static int efx_set_mac_address(struct net_device *net_dev, void *data) | |||
| 1602 | static void efx_set_multicast_list(struct net_device *net_dev) | 1602 | static void efx_set_multicast_list(struct net_device *net_dev) |
| 1603 | { | 1603 | { |
| 1604 | struct efx_nic *efx = netdev_priv(net_dev); | 1604 | struct efx_nic *efx = netdev_priv(net_dev); |
| 1605 | struct dev_mc_list *mc_list = net_dev->mc_list; | 1605 | struct dev_mc_list *mc_list; |
| 1606 | union efx_multicast_hash *mc_hash = &efx->multicast_hash; | 1606 | union efx_multicast_hash *mc_hash = &efx->multicast_hash; |
| 1607 | u32 crc; | 1607 | u32 crc; |
| 1608 | int bit; | 1608 | int bit; |
| 1609 | int i; | ||
| 1610 | 1609 | ||
| 1611 | efx->promiscuous = !!(net_dev->flags & IFF_PROMISC); | 1610 | efx->promiscuous = !!(net_dev->flags & IFF_PROMISC); |
| 1612 | 1611 | ||
| @@ -1615,11 +1614,10 @@ static void efx_set_multicast_list(struct net_device *net_dev) | |||
| 1615 | memset(mc_hash, 0xff, sizeof(*mc_hash)); | 1614 | memset(mc_hash, 0xff, sizeof(*mc_hash)); |
| 1616 | } else { | 1615 | } else { |
| 1617 | memset(mc_hash, 0x00, sizeof(*mc_hash)); | 1616 | memset(mc_hash, 0x00, sizeof(*mc_hash)); |
| 1618 | for (i = 0; i < netdev_mc_count(net_dev); i++) { | 1617 | netdev_for_each_mc_addr(mc_list, net_dev) { |
| 1619 | crc = ether_crc_le(ETH_ALEN, mc_list->dmi_addr); | 1618 | crc = ether_crc_le(ETH_ALEN, mc_list->dmi_addr); |
| 1620 | bit = crc & (EFX_MCAST_HASH_ENTRIES - 1); | 1619 | bit = crc & (EFX_MCAST_HASH_ENTRIES - 1); |
| 1621 | set_bit_le(bit, mc_hash->byte); | 1620 | set_bit_le(bit, mc_hash->byte); |
| 1622 | mc_list = mc_list->next; | ||
| 1623 | } | 1621 | } |
| 1624 | 1622 | ||
| 1625 | /* Broadcast packets go through the multicast hash filter. | 1623 | /* Broadcast packets go through the multicast hash filter. |
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c index bf2ffbb913ff..ead1d31308f8 100644 --- a/drivers/net/sis190.c +++ b/drivers/net/sis190.c | |||
| @@ -849,12 +849,10 @@ static void sis190_set_rx_mode(struct net_device *dev) | |||
| 849 | mc_filter[1] = mc_filter[0] = 0xffffffff; | 849 | mc_filter[1] = mc_filter[0] = 0xffffffff; |
| 850 | } else { | 850 | } else { |
| 851 | struct dev_mc_list *mclist; | 851 | struct dev_mc_list *mclist; |
| 852 | unsigned int i; | ||
| 853 | 852 | ||
| 854 | rx_mode = AcceptBroadcast | AcceptMyPhys; | 853 | rx_mode = AcceptBroadcast | AcceptMyPhys; |
| 855 | mc_filter[1] = mc_filter[0] = 0; | 854 | mc_filter[1] = mc_filter[0] = 0; |
| 856 | for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev); | 855 | netdev_for_each_mc_addr(mclist, dev) { |
| 857 | i++, mclist = mclist->next) { | ||
| 858 | int bit_nr = | 856 | int bit_nr = |
| 859 | ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; | 857 | ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; |
| 860 | mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); | 858 | mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); |
diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c index 32ae87c09f5e..cc0c731c4f09 100644 --- a/drivers/net/sis900.c +++ b/drivers/net/sis900.c | |||
| @@ -2300,9 +2300,8 @@ static void set_rx_mode(struct net_device *net_dev) | |||
| 2300 | * packets */ | 2300 | * packets */ |
| 2301 | struct dev_mc_list *mclist; | 2301 | struct dev_mc_list *mclist; |
| 2302 | rx_mode = RFAAB; | 2302 | rx_mode = RFAAB; |
| 2303 | for (i = 0, mclist = net_dev->mc_list; | 2303 | |
| 2304 | mclist && i < netdev_mc_count(net_dev); | 2304 | netdev_for_each_mc_addr(mclist, net_dev) { |
| 2305 | i++, mclist = mclist->next) { | ||
| 2306 | unsigned int bit_nr = | 2305 | unsigned int bit_nr = |
| 2307 | sis900_mcast_bitnr(mclist->dmi_addr, sis_priv->chipset_rev); | 2306 | sis900_mcast_bitnr(mclist->dmi_addr, sis_priv->chipset_rev); |
| 2308 | mc_filter[bit_nr >> 4] |= (1 << (bit_nr & 0xf)); | 2307 | mc_filter[bit_nr >> 4] |= (1 << (bit_nr & 0xf)); |
diff --git a/drivers/net/skfp/skfddi.c b/drivers/net/skfp/skfddi.c index 346adfae986f..1921a54ea995 100644 --- a/drivers/net/skfp/skfddi.c +++ b/drivers/net/skfp/skfddi.c | |||
| @@ -852,8 +852,7 @@ static void skfp_ctl_set_multicast_list(struct net_device *dev) | |||
| 852 | static void skfp_ctl_set_multicast_list_wo_lock(struct net_device *dev) | 852 | static void skfp_ctl_set_multicast_list_wo_lock(struct net_device *dev) |
| 853 | { | 853 | { |
| 854 | struct s_smc *smc = netdev_priv(dev); | 854 | struct s_smc *smc = netdev_priv(dev); |
| 855 | struct dev_mc_list *dmi; /* ptr to multicast addr entry */ | 855 | struct dev_mc_list *dmi; |
| 856 | int i; | ||
| 857 | 856 | ||
| 858 | /* Enable promiscuous mode, if necessary */ | 857 | /* Enable promiscuous mode, if necessary */ |
| 859 | if (dev->flags & IFF_PROMISC) { | 858 | if (dev->flags & IFF_PROMISC) { |
| @@ -877,17 +876,14 @@ static void skfp_ctl_set_multicast_list_wo_lock(struct net_device *dev) | |||
| 877 | /* use exact filtering */ | 876 | /* use exact filtering */ |
| 878 | 877 | ||
| 879 | // point to first multicast addr | 878 | // point to first multicast addr |
| 880 | dmi = dev->mc_list; | 879 | netdev_for_each_mc_addr(dmi, dev) { |
| 881 | |||
| 882 | for (i = 0; i < netdev_mc_count(dev); i++) { | ||
| 883 | mac_add_multicast(smc, | 880 | mac_add_multicast(smc, |
| 884 | (struct fddi_addr *)dmi->dmi_addr, | 881 | (struct fddi_addr *)dmi->dmi_addr, |
| 885 | 1); | 882 | 1); |
| 886 | 883 | ||
| 887 | pr_debug(KERN_INFO "ENABLE MC ADDRESS: %pMF\n", | 884 | pr_debug(KERN_INFO "ENABLE MC ADDRESS: %pMF\n", |
| 888 | dmi->dmi_addr); | 885 | dmi->dmi_addr); |
| 889 | dmi = dmi->next; | 886 | } |
| 890 | } // for | ||
| 891 | 887 | ||
| 892 | } else { // more MC addresses than HW supports | 888 | } else { // more MC addresses than HW supports |
| 893 | 889 | ||
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 720af1c7854b..d0058e5bb6ae 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
| @@ -2917,8 +2917,7 @@ static void genesis_set_multicast(struct net_device *dev) | |||
| 2917 | struct skge_port *skge = netdev_priv(dev); | 2917 | struct skge_port *skge = netdev_priv(dev); |
| 2918 | struct skge_hw *hw = skge->hw; | 2918 | struct skge_hw *hw = skge->hw; |
| 2919 | int port = skge->port; | 2919 | int port = skge->port; |
| 2920 | int i, count = netdev_mc_count(dev); | 2920 | struct dev_mc_list *list; |
| 2921 | struct dev_mc_list *list = dev->mc_list; | ||
| 2922 | u32 mode; | 2921 | u32 mode; |
| 2923 | u8 filter[8]; | 2922 | u8 filter[8]; |
| 2924 | 2923 | ||
| @@ -2938,7 +2937,7 @@ static void genesis_set_multicast(struct net_device *dev) | |||
| 2938 | skge->flow_status == FLOW_STAT_SYMMETRIC) | 2937 | skge->flow_status == FLOW_STAT_SYMMETRIC) |
| 2939 | genesis_add_filter(filter, pause_mc_addr); | 2938 | genesis_add_filter(filter, pause_mc_addr); |
| 2940 | 2939 | ||
| 2941 | for (i = 0; list && i < count; i++, list = list->next) | 2940 | netdev_for_each_mc_addr(list, dev) |
| 2942 | genesis_add_filter(filter, list->dmi_addr); | 2941 | genesis_add_filter(filter, list->dmi_addr); |
| 2943 | } | 2942 | } |
| 2944 | 2943 | ||
| @@ -2957,7 +2956,7 @@ static void yukon_set_multicast(struct net_device *dev) | |||
| 2957 | struct skge_port *skge = netdev_priv(dev); | 2956 | struct skge_port *skge = netdev_priv(dev); |
| 2958 | struct skge_hw *hw = skge->hw; | 2957 | struct skge_hw *hw = skge->hw; |
| 2959 | int port = skge->port; | 2958 | int port = skge->port; |
| 2960 | struct dev_mc_list *list = dev->mc_list; | 2959 | struct dev_mc_list *list; |
| 2961 | int rx_pause = (skge->flow_status == FLOW_STAT_REM_SEND || | 2960 | int rx_pause = (skge->flow_status == FLOW_STAT_REM_SEND || |
| 2962 | skge->flow_status == FLOW_STAT_SYMMETRIC); | 2961 | skge->flow_status == FLOW_STAT_SYMMETRIC); |
| 2963 | u16 reg; | 2962 | u16 reg; |
| @@ -2975,13 +2974,12 @@ static void yukon_set_multicast(struct net_device *dev) | |||
| 2975 | else if (netdev_mc_empty(dev) && !rx_pause)/* no multicast */ | 2974 | else if (netdev_mc_empty(dev) && !rx_pause)/* no multicast */ |
| 2976 | reg &= ~GM_RXCR_MCF_ENA; | 2975 | reg &= ~GM_RXCR_MCF_ENA; |
| 2977 | else { | 2976 | else { |
| 2978 | int i; | ||
| 2979 | reg |= GM_RXCR_MCF_ENA; | 2977 | reg |= GM_RXCR_MCF_ENA; |
| 2980 | 2978 | ||
| 2981 | if (rx_pause) | 2979 | if (rx_pause) |
| 2982 | yukon_add_filter(filter, pause_mc_addr); | 2980 | yukon_add_filter(filter, pause_mc_addr); |
| 2983 | 2981 | ||
| 2984 | for (i = 0; list && i < netdev_mc_count(dev); i++, list = list->next) | 2982 | netdev_for_each_mc_addr(list, dev) |
| 2985 | yukon_add_filter(filter, list->dmi_addr); | 2983 | yukon_add_filter(filter, list->dmi_addr); |
| 2986 | } | 2984 | } |
| 2987 | 2985 | ||
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index d1e98e2170ce..653bdd76ef46 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -3621,7 +3621,7 @@ static void sky2_set_multicast(struct net_device *dev) | |||
| 3621 | struct sky2_port *sky2 = netdev_priv(dev); | 3621 | struct sky2_port *sky2 = netdev_priv(dev); |
| 3622 | struct sky2_hw *hw = sky2->hw; | 3622 | struct sky2_hw *hw = sky2->hw; |
| 3623 | unsigned port = sky2->port; | 3623 | unsigned port = sky2->port; |
| 3624 | struct dev_mc_list *list = dev->mc_list; | 3624 | struct dev_mc_list *list; |
| 3625 | u16 reg; | 3625 | u16 reg; |
| 3626 | u8 filter[8]; | 3626 | u8 filter[8]; |
| 3627 | int rx_pause; | 3627 | int rx_pause; |
| @@ -3640,13 +3640,12 @@ static void sky2_set_multicast(struct net_device *dev) | |||
| 3640 | else if (netdev_mc_empty(dev) && !rx_pause) | 3640 | else if (netdev_mc_empty(dev) && !rx_pause) |
| 3641 | reg &= ~GM_RXCR_MCF_ENA; | 3641 | reg &= ~GM_RXCR_MCF_ENA; |
| 3642 | else { | 3642 | else { |
| 3643 | int i; | ||
| 3644 | reg |= GM_RXCR_MCF_ENA; | 3643 | reg |= GM_RXCR_MCF_ENA; |
| 3645 | 3644 | ||
| 3646 | if (rx_pause) | 3645 | if (rx_pause) |
| 3647 | sky2_add_filter(filter, pause_mc_addr); | 3646 | sky2_add_filter(filter, pause_mc_addr); |
| 3648 | 3647 | ||
| 3649 | for (i = 0; list && i < netdev_mc_count(dev); i++, list = list->next) | 3648 | netdev_for_each_mc_addr(list, dev) |
| 3650 | sky2_add_filter(filter, list->dmi_addr); | 3649 | sky2_add_filter(filter, list->dmi_addr); |
| 3651 | } | 3650 | } |
| 3652 | 3651 | ||
diff --git a/drivers/net/smsc9420.c b/drivers/net/smsc9420.c index 2bd3c986559a..30110a11d737 100644 --- a/drivers/net/smsc9420.c +++ b/drivers/net/smsc9420.c | |||
| @@ -1063,11 +1063,11 @@ static void smsc9420_set_multicast_list(struct net_device *dev) | |||
| 1063 | mac_cr |= MAC_CR_MCPAS_; | 1063 | mac_cr |= MAC_CR_MCPAS_; |
| 1064 | mac_cr &= (~MAC_CR_HPFILT_); | 1064 | mac_cr &= (~MAC_CR_HPFILT_); |
| 1065 | } else if (!netdev_mc_empty(dev)) { | 1065 | } else if (!netdev_mc_empty(dev)) { |
| 1066 | struct dev_mc_list *mc_list = dev->mc_list; | 1066 | struct dev_mc_list *mc_list; |
| 1067 | u32 hash_lo = 0, hash_hi = 0; | 1067 | u32 hash_lo = 0, hash_hi = 0; |
| 1068 | 1068 | ||
| 1069 | smsc_dbg(HW, "Multicast filter enabled"); | 1069 | smsc_dbg(HW, "Multicast filter enabled"); |
| 1070 | while (mc_list) { | 1070 | netdev_for_each_mc_addr(mc_list, dev) { |
| 1071 | u32 bit_num = smsc9420_hash(mc_list->dmi_addr); | 1071 | u32 bit_num = smsc9420_hash(mc_list->dmi_addr); |
| 1072 | u32 mask = 1 << (bit_num & 0x1F); | 1072 | u32 mask = 1 << (bit_num & 0x1F); |
| 1073 | 1073 | ||
| @@ -1076,7 +1076,6 @@ static void smsc9420_set_multicast_list(struct net_device *dev) | |||
| 1076 | else | 1076 | else |
| 1077 | hash_lo |= mask; | 1077 | hash_lo |= mask; |
| 1078 | 1078 | ||
| 1079 | mc_list = mc_list->next; | ||
| 1080 | } | 1079 | } |
| 1081 | smsc9420_reg_write(pd, HASHH, hash_hi); | 1080 | smsc9420_reg_write(pd, HASHH, hash_hi); |
| 1082 | smsc9420_reg_write(pd, HASHL, hash_lo); | 1081 | smsc9420_reg_write(pd, HASHL, hash_lo); |
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c index bd8bc66f2e00..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 | ||
| @@ -549,13 +549,14 @@ static void sonic_multicast_list(struct net_device *dev) | |||
| 549 | printk("sonic_multicast_list: mc_count %d\n", | 549 | printk("sonic_multicast_list: mc_count %d\n", |
| 550 | netdev_mc_count(dev)); | 550 | netdev_mc_count(dev)); |
| 551 | sonic_set_cam_enable(dev, 1); /* always enable our own address */ | 551 | sonic_set_cam_enable(dev, 1); /* always enable our own address */ |
| 552 | for (i = 1; i <= netdev_mc_count(dev); i++) { | 552 | i = 1; |
| 553 | netdev_for_each_mc_addr(dmi, dev) { | ||
| 553 | addr = dmi->dmi_addr; | 554 | addr = dmi->dmi_addr; |
| 554 | dmi = dmi->next; | ||
| 555 | 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]); |
| 556 | 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]); |
| 557 | 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]); |
| 558 | 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++; | ||
| 559 | } | 560 | } |
| 560 | SONIC_WRITE(SONIC_CDC, 16); | 561 | SONIC_WRITE(SONIC_CDC, 16); |
| 561 | /* issue Load CAM command */ | 562 | /* issue Load CAM command */ |
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index 16191998ac67..2f8a8c32021e 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
| @@ -646,7 +646,7 @@ spider_net_set_multi(struct net_device *netdev) | |||
| 646 | hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */ | 646 | hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */ |
| 647 | set_bit(0xfd, bitmask); | 647 | set_bit(0xfd, bitmask); |
| 648 | 648 | ||
| 649 | for (mc = netdev->mc_list; mc; mc = mc->next) { | 649 | netdev_for_each_mc_addr(mc, netdev) { |
| 650 | hash = spider_net_get_multicast_hash(netdev, mc->dmi_addr); | 650 | hash = spider_net_get_multicast_hash(netdev, mc->dmi_addr); |
| 651 | set_bit(hash, bitmask); | 651 | set_bit(hash, bitmask); |
| 652 | } | 652 | } |
diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 58bc7ac086cf..0f405ef51858 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c | |||
| @@ -1804,14 +1804,14 @@ static void set_rx_mode(struct net_device *dev) | |||
| 1804 | /* Use the 16 element perfect filter, skip first two entries. */ | 1804 | /* Use the 16 element perfect filter, skip first two entries. */ |
| 1805 | void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; | 1805 | void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16; |
| 1806 | __be16 *eaddrs; | 1806 | __be16 *eaddrs; |
| 1807 | for (i = 2, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev) + 2; | 1807 | netdev_for_each_mc_addr(mclist, dev) { |
| 1808 | i++, mclist = mclist->next) { | ||
| 1809 | eaddrs = (__be16 *)mclist->dmi_addr; | 1808 | eaddrs = (__be16 *)mclist->dmi_addr; |
| 1810 | writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; | 1809 | writew(be16_to_cpu(eaddrs[2]), filter_addr); filter_addr += 4; |
| 1811 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; | 1810 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; |
| 1812 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; | 1811 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; |
| 1813 | } | 1812 | } |
| 1814 | eaddrs = (__be16 *)dev->dev_addr; | 1813 | eaddrs = (__be16 *)dev->dev_addr; |
| 1814 | i = netdev_mc_count(dev) + 2; | ||
| 1815 | while (i++ < 16) { | 1815 | while (i++ < 16) { |
| 1816 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; | 1816 | writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; |
| 1817 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; | 1817 | writew(be16_to_cpu(eaddrs[1]), filter_addr); filter_addr += 4; |
diff --git a/drivers/net/stmmac/dwmac100.c b/drivers/net/stmmac/dwmac100.c index 576b256ee388..803b0373d843 100644 --- a/drivers/net/stmmac/dwmac100.c +++ b/drivers/net/stmmac/dwmac100.c | |||
| @@ -315,7 +315,6 @@ static void dwmac100_set_filter(struct net_device *dev) | |||
| 315 | value &= ~(MAC_CONTROL_PM | MAC_CONTROL_PR | MAC_CONTROL_IF | | 315 | value &= ~(MAC_CONTROL_PM | MAC_CONTROL_PR | MAC_CONTROL_IF | |
| 316 | MAC_CONTROL_HO | MAC_CONTROL_HP); | 316 | MAC_CONTROL_HO | MAC_CONTROL_HP); |
| 317 | } else { | 317 | } else { |
| 318 | int i; | ||
| 319 | u32 mc_filter[2]; | 318 | u32 mc_filter[2]; |
| 320 | struct dev_mc_list *mclist; | 319 | struct dev_mc_list *mclist; |
| 321 | 320 | ||
| @@ -326,8 +325,7 @@ static void dwmac100_set_filter(struct net_device *dev) | |||
| 326 | MAC_CONTROL_IF | MAC_CONTROL_HO); | 325 | MAC_CONTROL_IF | MAC_CONTROL_HO); |
| 327 | 326 | ||
| 328 | memset(mc_filter, 0, sizeof(mc_filter)); | 327 | memset(mc_filter, 0, sizeof(mc_filter)); |
| 329 | for (i = 0, mclist = dev->mc_list; | 328 | netdev_for_each_mc_addr(mclist, dev) { |
| 330 | mclist && i < netdev_mc_count(dev); i++, mclist = mclist->next) { | ||
| 331 | /* The upper 6 bits of the calculated CRC are used to | 329 | /* The upper 6 bits of the calculated CRC are used to |
| 332 | * index the contens of the hash table */ | 330 | * index the contens of the hash table */ |
| 333 | int bit_nr = | 331 | int bit_nr = |
diff --git a/drivers/net/stmmac/dwmac1000_core.c b/drivers/net/stmmac/dwmac1000_core.c index 90dbb4f41ef3..a6538ae4694c 100644 --- a/drivers/net/stmmac/dwmac1000_core.c +++ b/drivers/net/stmmac/dwmac1000_core.c | |||
| @@ -93,7 +93,6 @@ static void dwmac1000_set_filter(struct net_device *dev) | |||
| 93 | writel(0xffffffff, ioaddr + GMAC_HASH_HIGH); | 93 | writel(0xffffffff, ioaddr + GMAC_HASH_HIGH); |
| 94 | writel(0xffffffff, ioaddr + GMAC_HASH_LOW); | 94 | writel(0xffffffff, ioaddr + GMAC_HASH_LOW); |
| 95 | } else if (!netdev_mc_empty(dev)) { | 95 | } else if (!netdev_mc_empty(dev)) { |
| 96 | int i; | ||
| 97 | u32 mc_filter[2]; | 96 | u32 mc_filter[2]; |
| 98 | struct dev_mc_list *mclist; | 97 | struct dev_mc_list *mclist; |
| 99 | 98 | ||
| @@ -101,8 +100,7 @@ static void dwmac1000_set_filter(struct net_device *dev) | |||
| 101 | value = GMAC_FRAME_FILTER_HMC; | 100 | value = GMAC_FRAME_FILTER_HMC; |
| 102 | 101 | ||
| 103 | memset(mc_filter, 0, sizeof(mc_filter)); | 102 | memset(mc_filter, 0, sizeof(mc_filter)); |
| 104 | for (i = 0, mclist = dev->mc_list; | 103 | netdev_for_each_mc_addr(mclist, dev) { |
| 105 | mclist && i < netdev_mc_count(dev); i++, mclist = mclist->next) { | ||
| 106 | /* The upper 6 bits of the calculated CRC are used to | 104 | /* The upper 6 bits of the calculated CRC are used to |
| 107 | index the contens of the hash table */ | 105 | index the contens of the hash table */ |
| 108 | int bit_nr = | 106 | int bit_nr = |
diff --git a/drivers/net/sun3_82586.c b/drivers/net/sun3_82586.c index efedc252e4be..2f6a760e5f21 100644 --- a/drivers/net/sun3_82586.c +++ b/drivers/net/sun3_82586.c | |||
| @@ -413,7 +413,7 @@ static int init586(struct net_device *dev) | |||
| 413 | volatile struct iasetup_cmd_struct *ias_cmd; | 413 | volatile struct iasetup_cmd_struct *ias_cmd; |
| 414 | volatile struct tdr_cmd_struct *tdr_cmd; | 414 | volatile struct tdr_cmd_struct *tdr_cmd; |
| 415 | volatile struct mcsetup_cmd_struct *mc_cmd; | 415 | volatile struct mcsetup_cmd_struct *mc_cmd; |
| 416 | struct dev_mc_list *dmi=dev->mc_list; | 416 | struct dev_mc_list *dmi; |
| 417 | int num_addrs=netdev_mc_count(dev); | 417 | int num_addrs=netdev_mc_count(dev); |
| 418 | 418 | ||
| 419 | ptr = (void *) ((char *)p->scb + sizeof(struct scb_struct)); | 419 | ptr = (void *) ((char *)p->scb + sizeof(struct scb_struct)); |
| @@ -536,8 +536,10 @@ static int init586(struct net_device *dev) | |||
| 536 | mc_cmd->cmd_link = 0xffff; | 536 | mc_cmd->cmd_link = 0xffff; |
| 537 | mc_cmd->mc_cnt = swab16(num_addrs * 6); | 537 | mc_cmd->mc_cnt = swab16(num_addrs * 6); |
| 538 | 538 | ||
| 539 | for(i=0;i<num_addrs;i++,dmi=dmi->next) | 539 | i = 0; |
| 540 | memcpy((char *) mc_cmd->mc_list[i], dmi->dmi_addr,6); | 540 | netdev_for_each_mc_addr(dmi, dev) |
| 541 | memcpy((char *) mc_cmd->mc_list[i++], | ||
| 542 | dmi->dmi_addr, ETH_ALEN); | ||
| 541 | 543 | ||
| 542 | p->scb->cbl_offset = make16(mc_cmd); | 544 | p->scb->cbl_offset = make16(mc_cmd); |
| 543 | p->scb->cmd_cuc = CUC_START; | 545 | p->scb->cmd_cuc = CUC_START; |
diff --git a/drivers/net/sunbmac.c b/drivers/net/sunbmac.c index dfea56fa39e3..a0bd361d5eca 100644 --- a/drivers/net/sunbmac.c +++ b/drivers/net/sunbmac.c | |||
| @@ -999,7 +999,7 @@ static void bigmac_set_multicast(struct net_device *dev) | |||
| 999 | { | 999 | { |
| 1000 | struct bigmac *bp = netdev_priv(dev); | 1000 | struct bigmac *bp = netdev_priv(dev); |
| 1001 | void __iomem *bregs = bp->bregs; | 1001 | void __iomem *bregs = bp->bregs; |
| 1002 | struct dev_mc_list *dmi = dev->mc_list; | 1002 | struct dev_mc_list *dmi; |
| 1003 | char *addrs; | 1003 | char *addrs; |
| 1004 | int i; | 1004 | int i; |
| 1005 | u32 tmp, crc; | 1005 | u32 tmp, crc; |
| @@ -1028,9 +1028,8 @@ static void bigmac_set_multicast(struct net_device *dev) | |||
| 1028 | for (i = 0; i < 4; i++) | 1028 | for (i = 0; i < 4; i++) |
| 1029 | hash_table[i] = 0; | 1029 | hash_table[i] = 0; |
| 1030 | 1030 | ||
| 1031 | for (i = 0; i < netdev_mc_count(dev); i++) { | 1031 | netdev_for_each_mc_addr(dmi, dev) { |
| 1032 | addrs = dmi->dmi_addr; | 1032 | addrs = dmi->dmi_addr; |
| 1033 | dmi = dmi->next; | ||
| 1034 | 1033 | ||
| 1035 | if (!(*addrs & 1)) | 1034 | if (!(*addrs & 1)) |
| 1036 | continue; | 1035 | continue; |
diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c index 4171259590b2..a855934dfc3b 100644 --- a/drivers/net/sundance.c +++ b/drivers/net/sundance.c | |||
| @@ -1528,8 +1528,7 @@ static void set_rx_mode(struct net_device *dev) | |||
| 1528 | int index; | 1528 | int index; |
| 1529 | int crc; | 1529 | int crc; |
| 1530 | memset (mc_filter, 0, sizeof (mc_filter)); | 1530 | memset (mc_filter, 0, sizeof (mc_filter)); |
| 1531 | for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev); | 1531 | netdev_for_each_mc_addr(mclist, dev) { |
| 1532 | i++, mclist = mclist->next) { | ||
| 1533 | crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr); | 1532 | crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr); |
| 1534 | for (index=0, bit=0; bit < 6; bit++, crc <<= 1) | 1533 | for (index=0, bit=0; bit < 6; bit++, crc <<= 1) |
| 1535 | if (crc & 0x80000000) index |= 1 << bit; | 1534 | if (crc & 0x80000000) index |= 1 << bit; |
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index d497ec053953..4344017bfaef 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c | |||
| @@ -1846,17 +1846,13 @@ static u32 gem_setup_multicast(struct gem *gp) | |||
| 1846 | } else { | 1846 | } else { |
| 1847 | u16 hash_table[16]; | 1847 | u16 hash_table[16]; |
| 1848 | u32 crc; | 1848 | u32 crc; |
| 1849 | struct dev_mc_list *dmi = gp->dev->mc_list; | 1849 | struct dev_mc_list *dmi; |
| 1850 | int i; | 1850 | int i; |
| 1851 | 1851 | ||
| 1852 | for (i = 0; i < 16; i++) | 1852 | memset(hash_table, 0, sizeof(hash_table)); |
| 1853 | hash_table[i] = 0; | 1853 | netdev_for_each_mc_addr(dmi, gp->dev) { |
| 1854 | |||
| 1855 | for (i = 0; i < netdev_mc_count(gp->dev); i++) { | ||
| 1856 | char *addrs = dmi->dmi_addr; | 1854 | char *addrs = dmi->dmi_addr; |
| 1857 | 1855 | ||
| 1858 | dmi = dmi->next; | ||
| 1859 | |||
| 1860 | if (!(*addrs & 1)) | 1856 | if (!(*addrs & 1)) |
| 1861 | continue; | 1857 | continue; |
| 1862 | 1858 | ||
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 905df35ff78a..b17dbb11bd67 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c | |||
| @@ -1523,17 +1523,13 @@ static int happy_meal_init(struct happy_meal *hp) | |||
| 1523 | hme_write32(hp, bregs + BMAC_HTABLE3, 0xffff); | 1523 | hme_write32(hp, bregs + BMAC_HTABLE3, 0xffff); |
| 1524 | } else if ((hp->dev->flags & IFF_PROMISC) == 0) { | 1524 | } else if ((hp->dev->flags & IFF_PROMISC) == 0) { |
| 1525 | u16 hash_table[4]; | 1525 | u16 hash_table[4]; |
| 1526 | struct dev_mc_list *dmi = hp->dev->mc_list; | 1526 | struct dev_mc_list *dmi; |
| 1527 | char *addrs; | 1527 | char *addrs; |
| 1528 | int i; | ||
| 1529 | u32 crc; | 1528 | u32 crc; |
| 1530 | 1529 | ||
| 1531 | for (i = 0; i < 4; i++) | 1530 | memset(hash_table, 0, sizeof(hash_table)); |
| 1532 | hash_table[i] = 0; | 1531 | netdev_for_each_mc_addr(dmi, hp->dev) { |
| 1533 | |||
| 1534 | for (i = 0; i < netdev_mc_count(hp->dev); i++) { | ||
| 1535 | addrs = dmi->dmi_addr; | 1532 | addrs = dmi->dmi_addr; |
| 1536 | dmi = dmi->next; | ||
| 1537 | 1533 | ||
| 1538 | if (!(*addrs & 1)) | 1534 | if (!(*addrs & 1)) |
| 1539 | continue; | 1535 | continue; |
| @@ -2366,9 +2362,8 @@ static void happy_meal_set_multicast(struct net_device *dev) | |||
| 2366 | { | 2362 | { |
| 2367 | struct happy_meal *hp = netdev_priv(dev); | 2363 | struct happy_meal *hp = netdev_priv(dev); |
| 2368 | void __iomem *bregs = hp->bigmacregs; | 2364 | void __iomem *bregs = hp->bigmacregs; |
| 2369 | struct dev_mc_list *dmi = dev->mc_list; | 2365 | struct dev_mc_list *dmi; |
| 2370 | char *addrs; | 2366 | char *addrs; |
| 2371 | int i; | ||
| 2372 | u32 crc; | 2367 | u32 crc; |
| 2373 | 2368 | ||
| 2374 | spin_lock_irq(&hp->happy_lock); | 2369 | spin_lock_irq(&hp->happy_lock); |
| @@ -2384,12 +2379,9 @@ static void happy_meal_set_multicast(struct net_device *dev) | |||
| 2384 | } else { | 2379 | } else { |
| 2385 | u16 hash_table[4]; | 2380 | u16 hash_table[4]; |
| 2386 | 2381 | ||
| 2387 | for (i = 0; i < 4; i++) | 2382 | memset(hash_table, 0, sizeof(hash_table)); |
| 2388 | hash_table[i] = 0; | 2383 | netdev_for_each_mc_addr(dmi, dev) { |
| 2389 | |||
| 2390 | for (i = 0; i < netdev_mc_count(dev); i++) { | ||
| 2391 | addrs = dmi->dmi_addr; | 2384 | addrs = dmi->dmi_addr; |
| 2392 | dmi = dmi->next; | ||
| 2393 | 2385 | ||
| 2394 | if (!(*addrs & 1)) | 2386 | if (!(*addrs & 1)) |
| 2395 | continue; | 2387 | continue; |
diff --git a/drivers/net/sunlance.c b/drivers/net/sunlance.c index cf9d5bb9e1e9..d7c73f478ef5 100644 --- a/drivers/net/sunlance.c +++ b/drivers/net/sunlance.c | |||
| @@ -1170,9 +1170,8 @@ static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 1170 | static void lance_load_multicast(struct net_device *dev) | 1170 | static void lance_load_multicast(struct net_device *dev) |
| 1171 | { | 1171 | { |
| 1172 | struct lance_private *lp = netdev_priv(dev); | 1172 | struct lance_private *lp = netdev_priv(dev); |
| 1173 | struct dev_mc_list *dmi = dev->mc_list; | 1173 | struct dev_mc_list *dmi; |
| 1174 | char *addrs; | 1174 | char *addrs; |
| 1175 | int i; | ||
| 1176 | u32 crc; | 1175 | u32 crc; |
| 1177 | u32 val; | 1176 | u32 val; |
| 1178 | 1177 | ||
| @@ -1196,9 +1195,8 @@ static void lance_load_multicast(struct net_device *dev) | |||
| 1196 | return; | 1195 | return; |
| 1197 | 1196 | ||
| 1198 | /* Add addresses */ | 1197 | /* Add addresses */ |
| 1199 | for (i = 0; i < netdev_mc_count(dev); i++) { | 1198 | netdev_for_each_mc_addr(dmi, dev) { |
| 1200 | addrs = dmi->dmi_addr; | 1199 | addrs = dmi->dmi_addr; |
| 1201 | dmi = dmi->next; | ||
| 1202 | 1200 | ||
| 1203 | /* multicast address? */ | 1201 | /* multicast address? */ |
| 1204 | if (!(*addrs & 1)) | 1202 | if (!(*addrs & 1)) |
diff --git a/drivers/net/sunqe.c b/drivers/net/sunqe.c index 3bc35d86ed66..be637dce944c 100644 --- a/drivers/net/sunqe.c +++ b/drivers/net/sunqe.c | |||
| @@ -627,7 +627,7 @@ static int qe_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 627 | static void qe_set_multicast(struct net_device *dev) | 627 | static void qe_set_multicast(struct net_device *dev) |
| 628 | { | 628 | { |
| 629 | struct sunqe *qep = netdev_priv(dev); | 629 | struct sunqe *qep = netdev_priv(dev); |
| 630 | struct dev_mc_list *dmi = dev->mc_list; | 630 | struct dev_mc_list *dmi; |
| 631 | u8 new_mconfig = qep->mconfig; | 631 | u8 new_mconfig = qep->mconfig; |
| 632 | char *addrs; | 632 | char *addrs; |
| 633 | int i; | 633 | int i; |
| @@ -650,12 +650,9 @@ static void qe_set_multicast(struct net_device *dev) | |||
| 650 | u16 hash_table[4]; | 650 | u16 hash_table[4]; |
| 651 | u8 *hbytes = (unsigned char *) &hash_table[0]; | 651 | u8 *hbytes = (unsigned char *) &hash_table[0]; |
| 652 | 652 | ||
| 653 | for (i = 0; i < 4; i++) | 653 | memset(hash_table, 0, sizeof(hash_table)); |
| 654 | hash_table[i] = 0; | 654 | netdev_for_each_mc_addr(dmi, dev) { |
| 655 | |||
| 656 | for (i = 0; i < netdev_mc_count(dev); i++) { | ||
| 657 | addrs = dmi->dmi_addr; | 655 | addrs = dmi->dmi_addr; |
| 658 | dmi = dmi->next; | ||
| 659 | 656 | ||
| 660 | if (!(*addrs & 1)) | 657 | if (!(*addrs & 1)) |
| 661 | continue; | 658 | continue; |
diff --git a/drivers/net/sunvnet.c b/drivers/net/sunvnet.c index d65764ea1d83..6b1b7cea7f6b 100644 --- a/drivers/net/sunvnet.c +++ b/drivers/net/sunvnet.c | |||
| @@ -765,7 +765,7 @@ static void __update_mc_list(struct vnet *vp, struct net_device *dev) | |||
| 765 | { | 765 | { |
| 766 | struct dev_addr_list *p; | 766 | struct dev_addr_list *p; |
| 767 | 767 | ||
| 768 | for (p = dev->mc_list; p; p = p->next) { | 768 | netdev_for_each_mc_addr(p, dev) { |
| 769 | struct vnet_mcast_entry *m; | 769 | struct vnet_mcast_entry *m; |
| 770 | 770 | ||
| 771 | m = __vnet_mc_find(vp, p->dmi_addr); | 771 | m = __vnet_mc_find(vp, p->dmi_addr); |
