chelsio: convert to use netdev_for_each_mc_addr
Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0988d26978
commit
305b016093
|
@ -90,25 +90,13 @@
|
||||||
typedef struct adapter adapter_t;
|
typedef struct adapter adapter_t;
|
||||||
|
|
||||||
struct t1_rx_mode {
|
struct t1_rx_mode {
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
u32 idx;
|
|
||||||
struct dev_mc_list *list;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define t1_rx_mode_promisc(rm) (rm->dev->flags & IFF_PROMISC)
|
#define t1_rx_mode_promisc(rm) (rm->dev->flags & IFF_PROMISC)
|
||||||
#define t1_rx_mode_allmulti(rm) (rm->dev->flags & IFF_ALLMULTI)
|
#define t1_rx_mode_allmulti(rm) (rm->dev->flags & IFF_ALLMULTI)
|
||||||
#define t1_rx_mode_mc_cnt(rm) (netdev_mc_count(rm->dev))
|
#define t1_rx_mode_mc_cnt(rm) (netdev_mc_count(rm->dev))
|
||||||
|
#define t1_get_netdev(rm) (rm->dev)
|
||||||
static inline u8 *t1_get_next_mcaddr(struct t1_rx_mode *rm)
|
|
||||||
{
|
|
||||||
u8 *addr = NULL;
|
|
||||||
|
|
||||||
if (rm->idx++ < t1_rx_mode_mc_cnt(rm)) {
|
|
||||||
addr = rm->list->dmi_addr;
|
|
||||||
rm->list = rm->list->next;
|
|
||||||
}
|
|
||||||
return addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MAX_NPORTS 4
|
#define MAX_NPORTS 4
|
||||||
#define PORT_MASK ((1 << MAX_NPORTS) - 1)
|
#define PORT_MASK ((1 << MAX_NPORTS) - 1)
|
||||||
|
|
|
@ -125,8 +125,6 @@ static void t1_set_rxmode(struct net_device *dev)
|
||||||
struct t1_rx_mode rm;
|
struct t1_rx_mode rm;
|
||||||
|
|
||||||
rm.dev = dev;
|
rm.dev = dev;
|
||||||
rm.idx = 0;
|
|
||||||
rm.list = dev->mc_list;
|
|
||||||
mac->ops->set_rx_mode(mac, &rm);
|
mac->ops->set_rx_mode(mac, &rm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -375,12 +375,12 @@ static int pm3393_set_rx_mode(struct cmac *cmac, struct t1_rx_mode *rm)
|
||||||
rx_mode |= SUNI1x10GEXP_BITMSK_RXXG_MHASH_EN;
|
rx_mode |= SUNI1x10GEXP_BITMSK_RXXG_MHASH_EN;
|
||||||
} else if (t1_rx_mode_mc_cnt(rm)) {
|
} else if (t1_rx_mode_mc_cnt(rm)) {
|
||||||
/* Accept one or more multicast(s). */
|
/* Accept one or more multicast(s). */
|
||||||
u8 *addr;
|
struct dev_mc_list *dmi;
|
||||||
int bit;
|
int bit;
|
||||||
u16 mc_filter[4] = { 0, };
|
u16 mc_filter[4] = { 0, };
|
||||||
|
|
||||||
while ((addr = t1_get_next_mcaddr(rm))) {
|
netdev_for_each_mc_addr(dmi, t1_get_netdev(rm)) {
|
||||||
bit = (ether_crc(ETH_ALEN, addr) >> 23) & 0x3f; /* bit[23:28] */
|
bit = (ether_crc(ETH_ALEN, dmi->dmi_addr) >> 23) & 0x3f; /* bit[23:28] */
|
||||||
mc_filter[bit >> 4] |= 1 << (bit & 0xf);
|
mc_filter[bit >> 4] |= 1 << (bit & 0xf);
|
||||||
}
|
}
|
||||||
pmwrite(cmac, SUNI1x10GEXP_REG_RXXG_MULTICAST_HASH_LOW, mc_filter[0]);
|
pmwrite(cmac, SUNI1x10GEXP_REG_RXXG_MULTICAST_HASH_LOW, mc_filter[0]);
|
||||||
|
|
Loading…
Reference in a new issue