mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 15:18:19 +00:00
net: convert multiple drivers to use netdev_for_each_mc_addr, part5 V2
removed some needless checks and also corrected bug in lp486e (dmi was passed instead of dmi->dmi_addr) Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
52c793f240
commit
f9dcbcc9e3
27 changed files with 82 additions and 105 deletions
|
@ -1997,7 +1997,6 @@ jme_set_multi(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
struct jme_adapter *jme = netdev_priv(netdev);
|
||||||
u32 mc_hash[2] = {};
|
u32 mc_hash[2] = {};
|
||||||
int i;
|
|
||||||
|
|
||||||
spin_lock_bh(&jme->rxmcs_lock);
|
spin_lock_bh(&jme->rxmcs_lock);
|
||||||
|
|
||||||
|
@ -2012,10 +2011,7 @@ jme_set_multi(struct net_device *netdev)
|
||||||
int bit_nr;
|
int bit_nr;
|
||||||
|
|
||||||
jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED;
|
jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED;
|
||||||
for (i = 0, mclist = netdev->mc_list;
|
netdev_for_each_mc_addr(mclist, netdev) {
|
||||||
mclist && i < netdev_mc_count(netdev);
|
|
||||||
++i, mclist = mclist->next) {
|
|
||||||
|
|
||||||
bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3F;
|
bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3F;
|
||||||
mc_hash[bit_nr >> 5] |= 1 << (bit_nr & 0x1F);
|
mc_hash[bit_nr >> 5] |= 1 << (bit_nr & 0x1F);
|
||||||
}
|
}
|
||||||
|
|
|
@ -482,7 +482,7 @@ static void korina_multicast_list(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct korina_private *lp = netdev_priv(dev);
|
struct korina_private *lp = netdev_priv(dev);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
u32 recognise = ETH_ARC_AB; /* always accept broadcasts */
|
u32 recognise = ETH_ARC_AB; /* always accept broadcasts */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -502,11 +502,9 @@ static void korina_multicast_list(struct net_device *dev)
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
hash_table[i] = 0;
|
hash_table[i] = 0;
|
||||||
|
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
char *addrs = dmi->dmi_addr;
|
char *addrs = dmi->dmi_addr;
|
||||||
|
|
||||||
dmi = dmi->next;
|
|
||||||
|
|
||||||
if (!(*addrs & 1))
|
if (!(*addrs & 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -966,13 +966,12 @@ static void ks8851_set_rx_mode(struct net_device *dev)
|
||||||
rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE |
|
rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE |
|
||||||
RXCR1_RXPAFMA | RXCR1_RXMAFMA);
|
RXCR1_RXPAFMA | RXCR1_RXMAFMA);
|
||||||
} else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) {
|
} else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) {
|
||||||
struct dev_mc_list *mcptr = dev->mc_list;
|
struct dev_mc_list *mcptr;
|
||||||
u32 crc;
|
u32 crc;
|
||||||
int i;
|
|
||||||
|
|
||||||
/* accept some multicast */
|
/* accept some multicast */
|
||||||
|
|
||||||
for (i = netdev_mc_count(dev); i > 0; i--) {
|
netdev_for_each_mc_addr(mcptr, dev) {
|
||||||
crc = ether_crc(ETH_ALEN, mcptr->dmi_addr);
|
crc = ether_crc(ETH_ALEN, mcptr->dmi_addr);
|
||||||
crc >>= (32 - 6); /* get top six bits */
|
crc >>= (32 - 6); /* get top six bits */
|
||||||
|
|
||||||
|
|
|
@ -1196,7 +1196,8 @@ static void ks_set_rx_mode(struct net_device *netdev)
|
||||||
if ((netdev->flags & IFF_MULTICAST) && netdev_mc_count(netdev)) {
|
if ((netdev->flags & IFF_MULTICAST) && netdev_mc_count(netdev)) {
|
||||||
if (netdev_mc_count(netdev) <= MAX_MCAST_LST) {
|
if (netdev_mc_count(netdev) <= MAX_MCAST_LST) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (ptr = netdev->mc_list; ptr; ptr = ptr->next) {
|
|
||||||
|
netdev_for_each_mc_addr(ptr, netdev) {
|
||||||
if (!(*ptr->dmi_addr & 1))
|
if (!(*ptr->dmi_addr & 1))
|
||||||
continue;
|
continue;
|
||||||
if (i >= MAX_MCAST_LST)
|
if (i >= MAX_MCAST_LST)
|
||||||
|
|
|
@ -5777,7 +5777,7 @@ static void netdev_set_rx_mode(struct net_device *dev)
|
||||||
if (hw_priv->hw.dev_count > 1)
|
if (hw_priv->hw.dev_count > 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((dev->flags & IFF_MULTICAST) && dev->mc_count) {
|
if ((dev->flags & IFF_MULTICAST) && !netdev_mc_empty(dev)) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
/* List too big to support so turn on all multicast mode. */
|
/* List too big to support so turn on all multicast mode. */
|
||||||
|
@ -5790,7 +5790,7 @@ static void netdev_set_rx_mode(struct net_device *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (mc_ptr = dev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
|
netdev_for_each_mc_addr(mc_ptr, dev) {
|
||||||
if (!(*mc_ptr->dmi_addr & 1))
|
if (!(*mc_ptr->dmi_addr & 1))
|
||||||
continue;
|
continue;
|
||||||
if (i >= MAX_MULTICAST_LIST)
|
if (i >= MAX_MULTICAST_LIST)
|
||||||
|
|
|
@ -1396,15 +1396,16 @@ static void set_multicast_list(struct net_device *dev)
|
||||||
cmd->cmd.command = SWAP16(CmdMulticastList);
|
cmd->cmd.command = SWAP16(CmdMulticastList);
|
||||||
cmd->mc_cnt = SWAP16(netdev_mc_count(dev) * 6);
|
cmd->mc_cnt = SWAP16(netdev_mc_count(dev) * 6);
|
||||||
cp = cmd->mc_addrs;
|
cp = cmd->mc_addrs;
|
||||||
for (dmi = dev->mc_list;
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
cnt && dmi != NULL;
|
if (!cnt--)
|
||||||
dmi = dmi->next, cnt--, cp += 6) {
|
break;
|
||||||
memcpy(cp, dmi->dmi_addr, 6);
|
memcpy(cp, dmi->dmi_addr, 6);
|
||||||
if (i596_debug > 1)
|
if (i596_debug > 1)
|
||||||
DEB(DEB_MULTI,
|
DEB(DEB_MULTI,
|
||||||
printk(KERN_DEBUG
|
printk(KERN_DEBUG
|
||||||
"%s: Adding address %pM\n",
|
"%s: Adding address %pM\n",
|
||||||
dev->name, cp));
|
dev->name, cp));
|
||||||
|
cp += 6;
|
||||||
}
|
}
|
||||||
DMA_WBACK_INV(dev, &dma->mc_cmd, sizeof(struct mc_cmd));
|
DMA_WBACK_INV(dev, &dma->mc_cmd, sizeof(struct mc_cmd));
|
||||||
i596_add_cmd(dev, &cmd->cmd);
|
i596_add_cmd(dev, &cmd->cmd);
|
||||||
|
|
|
@ -907,15 +907,8 @@ static inline void make_mc_bits(u8 *bits, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct dev_mc_list *dmi;
|
struct dev_mc_list *dmi;
|
||||||
|
|
||||||
for (dmi=dev->mc_list; dmi; dmi=dmi->next)
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
{
|
u32 crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
|
||||||
u32 crc;
|
|
||||||
if (dmi->dmi_addrlen != ETH_ALEN)
|
|
||||||
{
|
|
||||||
printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
|
|
||||||
/*
|
/*
|
||||||
* The 8390 uses the 6 most significant bits of the
|
* The 8390 uses the 6 most significant bits of the
|
||||||
* CRC to index the multicast table.
|
* CRC to index the multicast table.
|
||||||
|
@ -941,7 +934,7 @@ static void do_set_multicast_list(struct net_device *dev)
|
||||||
if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI)))
|
if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI)))
|
||||||
{
|
{
|
||||||
memset(ei_local->mcfilter, 0, 8);
|
memset(ei_local->mcfilter, 0, 8);
|
||||||
if (dev->mc_list)
|
if (!netdev_mc_empty(dev))
|
||||||
make_mc_bits(ei_local->mcfilter, dev);
|
make_mc_bits(ei_local->mcfilter, dev);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -975,7 +968,7 @@ static void do_set_multicast_list(struct net_device *dev)
|
||||||
|
|
||||||
if(dev->flags&IFF_PROMISC)
|
if(dev->flags&IFF_PROMISC)
|
||||||
ei_outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
|
ei_outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
|
||||||
else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
|
else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev))
|
||||||
ei_outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
|
ei_outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
|
||||||
else
|
else
|
||||||
ei_outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
|
ei_outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
|
||||||
|
|
|
@ -250,9 +250,10 @@ static void temac_set_multicast_list(struct net_device *ndev)
|
||||||
temac_indirect_out32(lp, XTE_AFM_OFFSET, XTE_AFM_EPPRM_MASK);
|
temac_indirect_out32(lp, XTE_AFM_OFFSET, XTE_AFM_EPPRM_MASK);
|
||||||
dev_info(&ndev->dev, "Promiscuous mode enabled.\n");
|
dev_info(&ndev->dev, "Promiscuous mode enabled.\n");
|
||||||
} else if (!netdev_mc_empty(ndev)) {
|
} else if (!netdev_mc_empty(ndev)) {
|
||||||
struct dev_mc_list *mclist = ndev->mc_list;
|
struct dev_mc_list *mclist;
|
||||||
for (i = 0; mclist && i < netdev_mc_count(ndev); i++) {
|
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
netdev_for_each_mc_addr(mclist, ndev) {
|
||||||
if (i >= MULTICAST_CAM_TABLE_NUM)
|
if (i >= MULTICAST_CAM_TABLE_NUM)
|
||||||
break;
|
break;
|
||||||
multi_addr_msw = ((mclist->dmi_addr[3] << 24) |
|
multi_addr_msw = ((mclist->dmi_addr[3] << 24) |
|
||||||
|
@ -265,7 +266,7 @@ static void temac_set_multicast_list(struct net_device *ndev)
|
||||||
(mclist->dmi_addr[4]) | (i << 16));
|
(mclist->dmi_addr[4]) | (i << 16));
|
||||||
temac_indirect_out32(lp, XTE_MAW1_OFFSET,
|
temac_indirect_out32(lp, XTE_MAW1_OFFSET,
|
||||||
multi_addr_lsw);
|
multi_addr_lsw);
|
||||||
mclist = mclist->next;
|
i++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val = temac_indirect_in32(lp, XTE_AFM_OFFSET);
|
val = temac_indirect_in32(lp, XTE_AFM_OFFSET);
|
||||||
|
|
|
@ -1267,8 +1267,8 @@ static void set_multicast_list(struct net_device *dev) {
|
||||||
cmd->command = CmdMulticastList;
|
cmd->command = CmdMulticastList;
|
||||||
*((unsigned short *) (cmd + 1)) = netdev_mc_count(dev) * 6;
|
*((unsigned short *) (cmd + 1)) = netdev_mc_count(dev) * 6;
|
||||||
cp = ((char *)(cmd + 1))+2;
|
cp = ((char *)(cmd + 1))+2;
|
||||||
for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
memcpy(cp, dmi,6);
|
memcpy(cp, dmi->dmi_addr, 6);
|
||||||
cp += 6;
|
cp += 6;
|
||||||
}
|
}
|
||||||
if (i596_debug & LOG_SRCDST)
|
if (i596_debug & LOG_SRCDST)
|
||||||
|
|
|
@ -568,9 +568,7 @@ static void set_multicast_list(struct net_device *dev)
|
||||||
if(dev->flags&IFF_PROMISC)
|
if(dev->flags&IFF_PROMISC)
|
||||||
{
|
{
|
||||||
lp->rx_mode = RX_ALL_ACCEPT;
|
lp->rx_mode = RX_ALL_ACCEPT;
|
||||||
}
|
} else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev)) {
|
||||||
else if((dev->flags&IFF_ALLMULTI)||dev->mc_list)
|
|
||||||
{
|
|
||||||
/* The multicast-accept list is initialized to accept-all, and we
|
/* The multicast-accept list is initialized to accept-all, and we
|
||||||
rely on higher-level filtering for now. */
|
rely on higher-level filtering for now. */
|
||||||
lp->rx_mode = RX_MULTCAST_ACCEPT;
|
lp->rx_mode = RX_MULTCAST_ACCEPT;
|
||||||
|
|
|
@ -884,15 +884,12 @@ static void macb_sethashtable(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct dev_mc_list *curr;
|
struct dev_mc_list *curr;
|
||||||
unsigned long mc_filter[2];
|
unsigned long mc_filter[2];
|
||||||
unsigned int i, bitnr;
|
unsigned int bitnr;
|
||||||
struct macb *bp = netdev_priv(dev);
|
struct macb *bp = netdev_priv(dev);
|
||||||
|
|
||||||
mc_filter[0] = mc_filter[1] = 0;
|
mc_filter[0] = mc_filter[1] = 0;
|
||||||
|
|
||||||
curr = dev->mc_list;
|
netdev_for_each_mc_addr(curr, dev) {
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++, curr = curr->next) {
|
|
||||||
if (!curr) break; /* unexpected end of list */
|
|
||||||
|
|
||||||
bitnr = hash_get_index(curr->dmi_addr);
|
bitnr = hash_get_index(curr->dmi_addr);
|
||||||
mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
|
mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
|
||||||
}
|
}
|
||||||
|
|
|
@ -588,7 +588,7 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct mace_data *mp = netdev_priv(dev);
|
struct mace_data *mp = netdev_priv(dev);
|
||||||
volatile struct mace __iomem *mb = mp->mace;
|
volatile struct mace __iomem *mb = mp->mace;
|
||||||
int i, j;
|
int i;
|
||||||
u32 crc;
|
u32 crc;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -598,7 +598,7 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
mp->maccc |= PROM;
|
mp->maccc |= PROM;
|
||||||
} else {
|
} else {
|
||||||
unsigned char multicast_filter[8];
|
unsigned char multicast_filter[8];
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
|
|
||||||
if (dev->flags & IFF_ALLMULTI) {
|
if (dev->flags & IFF_ALLMULTI) {
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
|
@ -606,11 +606,10 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
multicast_filter[i] = 0;
|
multicast_filter[i] = 0;
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
crc = ether_crc_le(6, dmi->dmi_addr);
|
crc = ether_crc_le(6, dmi->dmi_addr);
|
||||||
j = crc >> 26; /* bit number in multicast_filter */
|
i = crc >> 26; /* bit number in multicast_filter */
|
||||||
multicast_filter[j >> 3] |= 1 << (j & 7);
|
multicast_filter[i >> 3] |= 1 << (i & 7);
|
||||||
dmi = dmi->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -496,7 +496,7 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct mace_data *mp = netdev_priv(dev);
|
struct mace_data *mp = netdev_priv(dev);
|
||||||
volatile struct mace *mb = mp->mace;
|
volatile struct mace *mb = mp->mace;
|
||||||
int i, j;
|
int i;
|
||||||
u32 crc;
|
u32 crc;
|
||||||
u8 maccc;
|
u8 maccc;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -509,7 +509,7 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
mb->maccc |= PROM;
|
mb->maccc |= PROM;
|
||||||
} else {
|
} else {
|
||||||
unsigned char multicast_filter[8];
|
unsigned char multicast_filter[8];
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
|
|
||||||
if (dev->flags & IFF_ALLMULTI) {
|
if (dev->flags & IFF_ALLMULTI) {
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
|
@ -518,11 +518,11 @@ static void mace_set_multicast(struct net_device *dev)
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
multicast_filter[i] = 0;
|
multicast_filter[i] = 0;
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
crc = ether_crc_le(6, dmi->dmi_addr);
|
crc = ether_crc_le(6, dmi->dmi_addr);
|
||||||
j = crc >> 26; /* bit number in multicast_filter */
|
/* bit number in multicast_filter */
|
||||||
multicast_filter[j >> 3] |= 1 << (j & 7);
|
i = crc >> 26;
|
||||||
dmi = dmi->next;
|
multicast_filter[i >> 3] |= 1 << (i & 7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1794,7 +1794,7 @@ static void mv643xx_eth_program_multicast_filter(struct net_device *dev)
|
||||||
memset(mc_spec, 0, 0x100);
|
memset(mc_spec, 0, 0x100);
|
||||||
memset(mc_other, 0, 0x100);
|
memset(mc_other, 0, 0x100);
|
||||||
|
|
||||||
for (addr = dev->mc_list; addr != NULL; addr = addr->next) {
|
netdev_for_each_mc_addr(addr, dev) {
|
||||||
u8 *a = addr->da_addr;
|
u8 *a = addr->da_addr;
|
||||||
u32 *table;
|
u32 *table;
|
||||||
int entry;
|
int entry;
|
||||||
|
|
|
@ -3035,7 +3035,7 @@ static void myri10ge_set_multicast_list(struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Walk the multicast list, and add each address */
|
/* Walk the multicast list, and add each address */
|
||||||
for (mc_list = dev->mc_list; mc_list != NULL; mc_list = mc_list->next) {
|
netdev_for_each_mc_addr(mc_list, dev) {
|
||||||
memcpy(data, &mc_list->dmi_addr, 6);
|
memcpy(data, &mc_list->dmi_addr, 6);
|
||||||
cmd.data0 = ntohl(data[0]);
|
cmd.data0 = ntohl(data[0]);
|
||||||
cmd.data1 = ntohl(data[1]);
|
cmd.data1 = ntohl(data[1]);
|
||||||
|
|
|
@ -2495,9 +2495,9 @@ static void __set_rx_mode(struct net_device *dev)
|
||||||
} else {
|
} else {
|
||||||
struct dev_mc_list *mclist;
|
struct dev_mc_list *mclist;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset(mc_filter, 0, sizeof(mc_filter));
|
memset(mc_filter, 0, sizeof(mc_filter));
|
||||||
for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
|
netdev_for_each_mc_addr(mclist, dev) {
|
||||||
i++, mclist = mclist->next) {
|
|
||||||
int b = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 23) & 0x1ff;
|
int b = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 23) & 0x1ff;
|
||||||
mc_filter[b/8] |= (1 << (b & 0x07));
|
mc_filter[b/8] |= (1 << (b & 0x07));
|
||||||
}
|
}
|
||||||
|
|
|
@ -539,7 +539,7 @@ void netxen_p2_nic_set_multi(struct net_device *netdev)
|
||||||
struct netxen_adapter *adapter = netdev_priv(netdev);
|
struct netxen_adapter *adapter = netdev_priv(netdev);
|
||||||
struct dev_mc_list *mc_ptr;
|
struct dev_mc_list *mc_ptr;
|
||||||
u8 null_addr[6];
|
u8 null_addr[6];
|
||||||
int index = 0;
|
int i;
|
||||||
|
|
||||||
memset(null_addr, 0, 6);
|
memset(null_addr, 0, 6);
|
||||||
|
|
||||||
|
@ -570,16 +570,13 @@ void netxen_p2_nic_set_multi(struct net_device *netdev)
|
||||||
|
|
||||||
netxen_nic_enable_mcast_filter(adapter);
|
netxen_nic_enable_mcast_filter(adapter);
|
||||||
|
|
||||||
for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next, index++)
|
i = 0;
|
||||||
netxen_nic_set_mcast_addr(adapter, index, mc_ptr->dmi_addr);
|
netdev_for_each_mc_addr(mc_ptr, netdev)
|
||||||
|
netxen_nic_set_mcast_addr(adapter, i++, mc_ptr->dmi_addr);
|
||||||
if (index != netdev_mc_count(netdev))
|
|
||||||
printk(KERN_WARNING "%s: %s multicast address count mismatch\n",
|
|
||||||
netxen_nic_driver_name, netdev->name);
|
|
||||||
|
|
||||||
/* Clear out remaining addresses */
|
/* Clear out remaining addresses */
|
||||||
for (; index < adapter->max_mc_count; index++)
|
while (i < adapter->max_mc_count)
|
||||||
netxen_nic_set_mcast_addr(adapter, index, null_addr);
|
netxen_nic_set_mcast_addr(adapter, i++, null_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -710,11 +707,9 @@ void netxen_p3_nic_set_multi(struct net_device *netdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!netdev_mc_empty(netdev)) {
|
if (!netdev_mc_empty(netdev)) {
|
||||||
for (mc_ptr = netdev->mc_list; mc_ptr;
|
netdev_for_each_mc_addr(mc_ptr, netdev)
|
||||||
mc_ptr = mc_ptr->next) {
|
|
||||||
nx_p3_nic_add_mac(adapter, mc_ptr->dmi_addr, &del_list);
|
nx_p3_nic_add_mac(adapter, mc_ptr->dmi_addr, &del_list);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
send_fw_cmd:
|
send_fw_cmd:
|
||||||
adapter->set_promisc(adapter, mode);
|
adapter->set_promisc(adapter, mode);
|
||||||
|
|
|
@ -651,7 +651,8 @@ static void ni5010_set_multicast_list(struct net_device *dev)
|
||||||
|
|
||||||
PRINTK2((KERN_DEBUG "%s: entering set_multicast_list\n", dev->name));
|
PRINTK2((KERN_DEBUG "%s: entering set_multicast_list\n", dev->name));
|
||||||
|
|
||||||
if (dev->flags&IFF_PROMISC || dev->flags&IFF_ALLMULTI || dev->mc_list) {
|
if (dev->flags & IFF_PROMISC || dev->flags & IFF_ALLMULTI ||
|
||||||
|
!netdev_mc_empty(dev)) {
|
||||||
outb(RMD_PROMISC, EDLC_RMODE); /* Enable promiscuous mode */
|
outb(RMD_PROMISC, EDLC_RMODE); /* Enable promiscuous mode */
|
||||||
PRINTK((KERN_DEBUG "%s: Entering promiscuous mode\n", dev->name));
|
PRINTK((KERN_DEBUG "%s: Entering promiscuous mode\n", dev->name));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -596,7 +596,7 @@ static int init586(struct net_device *dev)
|
||||||
struct iasetup_cmd_struct __iomem *ias_cmd;
|
struct iasetup_cmd_struct __iomem *ias_cmd;
|
||||||
struct tdr_cmd_struct __iomem *tdr_cmd;
|
struct tdr_cmd_struct __iomem *tdr_cmd;
|
||||||
struct mcsetup_cmd_struct __iomem *mc_cmd;
|
struct mcsetup_cmd_struct __iomem *mc_cmd;
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
int num_addrs = netdev_mc_count(dev);
|
int num_addrs = netdev_mc_count(dev);
|
||||||
|
|
||||||
ptr = p->scb + 1;
|
ptr = p->scb + 1;
|
||||||
|
@ -724,9 +724,9 @@ static int init586(struct net_device *dev)
|
||||||
writew(0xffff, &mc_cmd->cmd_link);
|
writew(0xffff, &mc_cmd->cmd_link);
|
||||||
writew(num_addrs * 6, &mc_cmd->mc_cnt);
|
writew(num_addrs * 6, &mc_cmd->mc_cnt);
|
||||||
|
|
||||||
for (i = 0; i < num_addrs; i++, dmi = dmi->next)
|
i = 0;
|
||||||
memcpy_toio(mc_cmd->mc_list[i],
|
netdev_for_each_mc_addr(dmi, dev)
|
||||||
dmi->dmi_addr, 6);
|
memcpy_toio(mc_cmd->mc_list[i++], dmi->dmi_addr, 6);
|
||||||
|
|
||||||
writew(make16(mc_cmd), &p->scb->cbl_offset);
|
writew(make16(mc_cmd), &p->scb->cbl_offset);
|
||||||
writeb(CUC_START, &p->scb->cmd_cuc);
|
writeb(CUC_START, &p->scb->cmd_cuc);
|
||||||
|
|
|
@ -6365,7 +6365,7 @@ static void niu_set_rx_mode(struct net_device *dev)
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
hash[i] = 0xffff;
|
hash[i] = 0xffff;
|
||||||
} else if (!netdev_mc_empty(dev)) {
|
} else if (!netdev_mc_empty(dev)) {
|
||||||
for (addr = dev->mc_list; addr; addr = addr->next) {
|
netdev_for_each_mc_addr(addr, dev) {
|
||||||
u32 crc = ether_crc_le(ETH_ALEN, addr->da_addr);
|
u32 crc = ether_crc_le(ETH_ALEN, addr->da_addr);
|
||||||
|
|
||||||
crc >>= 24;
|
crc >>= 24;
|
||||||
|
|
|
@ -1793,7 +1793,7 @@ static void netdrv_set_rx_mode(struct net_device *dev)
|
||||||
struct netdrv_private *tp = netdev_priv(dev);
|
struct netdrv_private *tp = netdev_priv(dev);
|
||||||
void *ioaddr = tp->mmio_addr;
|
void *ioaddr = tp->mmio_addr;
|
||||||
u32 mc_filter[2]; /* Multicast hash filter */
|
u32 mc_filter[2]; /* Multicast hash filter */
|
||||||
int i, rx_mode;
|
int rx_mode;
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
|
||||||
DPRINTK("ENTER\n");
|
DPRINTK("ENTER\n");
|
||||||
|
@ -1814,10 +1814,10 @@ static void netdrv_set_rx_mode(struct net_device *dev)
|
||||||
mc_filter[1] = mc_filter[0] = 0xffffffff;
|
mc_filter[1] = mc_filter[0] = 0xffffffff;
|
||||||
} else {
|
} else {
|
||||||
struct dev_mc_list *mclist;
|
struct dev_mc_list *mclist;
|
||||||
|
|
||||||
rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
|
rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
|
||||||
mc_filter[1] = mc_filter[0] = 0;
|
mc_filter[1] = mc_filter[0] = 0;
|
||||||
for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
|
netdev_for_each_mc_addr(mclist, dev) {
|
||||||
i++, mclist = mclist->next) {
|
|
||||||
int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
|
int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
|
||||||
|
|
||||||
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
|
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
|
||||||
|
|
|
@ -2590,7 +2590,7 @@ static void pcnet32_load_multicast(struct net_device *dev)
|
||||||
struct pcnet32_private *lp = netdev_priv(dev);
|
struct pcnet32_private *lp = netdev_priv(dev);
|
||||||
volatile struct pcnet32_init_block *ib = lp->init_block;
|
volatile struct pcnet32_init_block *ib = lp->init_block;
|
||||||
volatile __le16 *mcast_table = (__le16 *)ib->filter;
|
volatile __le16 *mcast_table = (__le16 *)ib->filter;
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
unsigned long ioaddr = dev->base_addr;
|
unsigned long ioaddr = dev->base_addr;
|
||||||
char *addrs;
|
char *addrs;
|
||||||
int i;
|
int i;
|
||||||
|
@ -2611,9 +2611,8 @@ static void pcnet32_load_multicast(struct net_device *dev)
|
||||||
ib->filter[1] = 0;
|
ib->filter[1] = 0;
|
||||||
|
|
||||||
/* Add addresses */
|
/* Add addresses */
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
addrs = dmi->dmi_addr;
|
addrs = dmi->dmi_addr;
|
||||||
dmi = dmi->next;
|
|
||||||
|
|
||||||
/* multicast address? */
|
/* multicast address? */
|
||||||
if (!(*addrs & 1))
|
if (!(*addrs & 1))
|
||||||
|
|
|
@ -580,7 +580,7 @@ void gelic_net_set_multi(struct net_device *netdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set multicast addresses */
|
/* set multicast addresses */
|
||||||
for (mc = netdev->mc_list; mc; mc = mc->next) {
|
netdev_for_each_mc_addr(mc, netdev) {
|
||||||
addr = 0;
|
addr = 0;
|
||||||
p = mc->dmi_addr;
|
p = mc->dmi_addr;
|
||||||
for (i = 0; i < ETH_ALEN; i++) {
|
for (i = 0; i < ETH_ALEN; i++) {
|
||||||
|
|
|
@ -453,8 +453,7 @@ void qlcnic_set_multi(struct net_device *netdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!netdev_mc_empty(netdev)) {
|
if (!netdev_mc_empty(netdev)) {
|
||||||
for (mc_ptr = netdev->mc_list; mc_ptr;
|
netdev_for_each_mc_addr(mc_ptr, netdev) {
|
||||||
mc_ptr = mc_ptr->next) {
|
|
||||||
qlcnic_nic_add_mac(adapter, mc_ptr->dmi_addr,
|
qlcnic_nic_add_mac(adapter, mc_ptr->dmi_addr,
|
||||||
&del_list);
|
&del_list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4270,8 +4270,8 @@ static void qlge_set_multicast_list(struct net_device *ndev)
|
||||||
status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
|
status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
|
||||||
if (status)
|
if (status)
|
||||||
goto exit;
|
goto exit;
|
||||||
for (i = 0, mc_ptr = ndev->mc_list; mc_ptr;
|
i = 0;
|
||||||
i++, mc_ptr = mc_ptr->next)
|
netdev_for_each_mc_addr(mc_ptr, ndev) {
|
||||||
if (ql_set_mac_addr_reg(qdev, (u8 *) mc_ptr->dmi_addr,
|
if (ql_set_mac_addr_reg(qdev, (u8 *) mc_ptr->dmi_addr,
|
||||||
MAC_ADDR_TYPE_MULTI_MAC, i)) {
|
MAC_ADDR_TYPE_MULTI_MAC, i)) {
|
||||||
netif_err(qdev, hw, qdev->ndev,
|
netif_err(qdev, hw, qdev->ndev,
|
||||||
|
@ -4279,6 +4279,8 @@ static void qlge_set_multicast_list(struct net_device *ndev)
|
||||||
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
|
||||||
if (ql_set_routing_reg
|
if (ql_set_routing_reg
|
||||||
(qdev, RT_IDX_MCAST_MATCH_SLOT, RT_IDX_MCAST_MATCH, 1)) {
|
(qdev, RT_IDX_MCAST_MATCH_SLOT, RT_IDX_MCAST_MATCH, 1)) {
|
||||||
|
|
|
@ -938,7 +938,7 @@ static void r6040_multicast_list(struct net_device *dev)
|
||||||
u16 *adrp;
|
u16 *adrp;
|
||||||
u16 reg;
|
u16 reg;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct dev_mc_list *dmi = dev->mc_list;
|
struct dev_mc_list *dmi;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* MAC Address */
|
/* MAC Address */
|
||||||
|
@ -973,11 +973,9 @@ static void r6040_multicast_list(struct net_device *dev)
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
hash_table[i] = 0;
|
hash_table[i] = 0;
|
||||||
|
|
||||||
for (i = 0; i < netdev_mc_count(dev); i++) {
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
char *addrs = dmi->dmi_addr;
|
char *addrs = dmi->dmi_addr;
|
||||||
|
|
||||||
dmi = dmi->next;
|
|
||||||
|
|
||||||
if (!(*addrs & 1))
|
if (!(*addrs & 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -995,18 +993,20 @@ static void r6040_multicast_list(struct net_device *dev)
|
||||||
iowrite16(hash_table[3], ioaddr + MAR3);
|
iowrite16(hash_table[3], ioaddr + MAR3);
|
||||||
}
|
}
|
||||||
/* Multicast Address 1~4 case */
|
/* Multicast Address 1~4 case */
|
||||||
for (i = 0, dmi; (i < netdev_mc_count(dev)) && (i < MCAST_MAX); i++) {
|
i = 0;
|
||||||
|
netdev_for_each_mc_addr(dmi, dev) {
|
||||||
|
if (i < MCAST_MAX) {
|
||||||
adrp = (u16 *) dmi->dmi_addr;
|
adrp = (u16 *) dmi->dmi_addr;
|
||||||
iowrite16(adrp[0], ioaddr + MID_1L + 8 * i);
|
iowrite16(adrp[0], ioaddr + MID_1L + 8 * i);
|
||||||
iowrite16(adrp[1], ioaddr + MID_1M + 8 * i);
|
iowrite16(adrp[1], ioaddr + MID_1M + 8 * i);
|
||||||
iowrite16(adrp[2], ioaddr + MID_1H + 8 * i);
|
iowrite16(adrp[2], ioaddr + MID_1H + 8 * i);
|
||||||
dmi = dmi->next;
|
} else {
|
||||||
}
|
|
||||||
for (i = netdev_mc_count(dev); i < MCAST_MAX; i++) {
|
|
||||||
iowrite16(0xffff, ioaddr + MID_0L + 8 * i);
|
iowrite16(0xffff, ioaddr + MID_0L + 8 * i);
|
||||||
iowrite16(0xffff, ioaddr + MID_0M + 8 * i);
|
iowrite16(0xffff, ioaddr + MID_0M + 8 * i);
|
||||||
iowrite16(0xffff, ioaddr + MID_0H + 8 * i);
|
iowrite16(0xffff, ioaddr + MID_0H + 8 * i);
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void netdev_get_drvinfo(struct net_device *dev,
|
static void netdev_get_drvinfo(struct net_device *dev,
|
||||||
|
|
|
@ -4732,12 +4732,10 @@ static void rtl_set_rx_mode(struct net_device *dev)
|
||||||
mc_filter[1] = mc_filter[0] = 0xffffffff;
|
mc_filter[1] = mc_filter[0] = 0xffffffff;
|
||||||
} else {
|
} else {
|
||||||
struct dev_mc_list *mclist;
|
struct dev_mc_list *mclist;
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
rx_mode = AcceptBroadcast | AcceptMyPhys;
|
rx_mode = AcceptBroadcast | AcceptMyPhys;
|
||||||
mc_filter[1] = mc_filter[0] = 0;
|
mc_filter[1] = mc_filter[0] = 0;
|
||||||
for (i = 0, mclist = dev->mc_list; mclist && i < netdev_mc_count(dev);
|
netdev_for_each_mc_addr(mclist, dev) {
|
||||||
i++, mclist = mclist->next) {
|
|
||||||
int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
|
int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
|
||||||
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
|
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
|
||||||
rx_mode |= AcceptMulticast;
|
rx_mode |= AcceptMulticast;
|
||||||
|
|
Loading…
Reference in a new issue