Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 305b0160 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

chelsio: convert to use netdev_for_each_mc_addr

parent 0988d269
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -91,24 +91,12 @@ typedef struct adapter adapter_t;

struct t1_rx_mode {
       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_allmulti(rm)	(rm->dev->flags & IFF_ALLMULTI)
#define t1_rx_mode_mc_cnt(rm)	(netdev_mc_count(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 t1_get_netdev(rm)	(rm->dev)

#define	MAX_NPORTS 4
#define PORT_MASK ((1 << MAX_NPORTS) - 1)
+0 −2
Original line number Diff line number Diff line
@@ -125,8 +125,6 @@ static void t1_set_rxmode(struct net_device *dev)
	struct t1_rx_mode rm;

	rm.dev = dev;
	rm.idx = 0;
	rm.list = dev->mc_list;
	mac->ops->set_rx_mode(mac, &rm);
}

+3 −3
Original line number Diff line number Diff line
@@ -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;
	} else if (t1_rx_mode_mc_cnt(rm)) {
		/* Accept one or more multicast(s). */
		u8 *addr;
		struct dev_mc_list *dmi;
		int bit;
		u16 mc_filter[4] = { 0, };

		while ((addr = t1_get_next_mcaddr(rm))) {
			bit = (ether_crc(ETH_ALEN, addr) >> 23) & 0x3f;	/* bit[23:28] */
		netdev_for_each_mc_addr(dmi, t1_get_netdev(rm)) {
			bit = (ether_crc(ETH_ALEN, dmi->dmi_addr) >> 23) & 0x3f; /* bit[23:28] */
			mc_filter[bit >> 4] |= 1 << (bit & 0xf);
		}
		pmwrite(cmac, SUNI1x10GEXP_REG_RXXG_MULTICAST_HASH_LOW, mc_filter[0]);