diff options
Diffstat (limited to 'drivers/net/typhoon.c')
-rw-r--r-- | drivers/net/typhoon.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c index 6e4f754c4baf..edabc49a49bc 100644 --- a/drivers/net/typhoon.c +++ b/drivers/net/typhoon.c | |||
@@ -924,17 +924,18 @@ typhoon_set_rx_mode(struct net_device *dev) | |||
924 | filter = TYPHOON_RX_FILTER_DIRECTED | TYPHOON_RX_FILTER_BROADCAST; | 924 | filter = TYPHOON_RX_FILTER_DIRECTED | TYPHOON_RX_FILTER_BROADCAST; |
925 | if(dev->flags & IFF_PROMISC) { | 925 | if(dev->flags & IFF_PROMISC) { |
926 | filter |= TYPHOON_RX_FILTER_PROMISCOUS; | 926 | filter |= TYPHOON_RX_FILTER_PROMISCOUS; |
927 | } else if((dev->mc_count > multicast_filter_limit) || | 927 | } else if ((netdev_mc_count(dev) > multicast_filter_limit) || |
928 | (dev->flags & IFF_ALLMULTI)) { | 928 | (dev->flags & IFF_ALLMULTI)) { |
929 | /* Too many to match, or accept all multicasts. */ | 929 | /* Too many to match, or accept all multicasts. */ |
930 | filter |= TYPHOON_RX_FILTER_ALL_MCAST; | 930 | filter |= TYPHOON_RX_FILTER_ALL_MCAST; |
931 | } else if(dev->mc_count) { | 931 | } else if (!netdev_mc_empty(dev)) { |
932 | struct dev_mc_list *mclist; | 932 | struct dev_mc_list *mclist; |
933 | int i; | 933 | int i; |
934 | 934 | ||
935 | memset(mc_filter, 0, sizeof(mc_filter)); | 935 | memset(mc_filter, 0, sizeof(mc_filter)); |
936 | for(i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; | 936 | for (i = 0, mclist = dev->mc_list; |
937 | i++, mclist = mclist->next) { | 937 | mclist && i < netdev_mc_count(dev); |
938 | i++, mclist = mclist->next) { | ||
938 | int bit = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; | 939 | int bit = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3f; |
939 | mc_filter[bit >> 5] |= 1 << (bit & 0x1f); | 940 | mc_filter[bit >> 5] |= 1 << (bit & 0x1f); |
940 | } | 941 | } |