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

Commit 2f614fe0 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[netdrvr] b44: handle excessive multicast groups



If there are more than B44_MCAST_TABLE_SIZE groups in the dev->mc_list,
it will only listen to the first B44_MCAST_TABLE_SIZE that it sees.

This change makes the driver go into RXCONFIG_ALLMULTI mode if there
are more than B44_MCAST_TABLE_SIZE groups being subscribed to, similar
to other network drivers.

Noticed by Bill Helfinstine <bhelf@flitterfly.whirpon.com>

Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 39984a9f
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1706,14 +1706,15 @@ static void __b44_set_rx_mode(struct net_device *dev)

		__b44_set_mac_addr(bp);

		if (dev->flags & IFF_ALLMULTI)
		if ((dev->flags & IFF_ALLMULTI) ||
		    (dev->mc_count > B44_MCAST_TABLE_SIZE))
			val |= RXCONFIG_ALLMULTI;
		else
			i = __b44_load_mcast(bp, dev);

		for (; i < 64; i++) {
		for (; i < 64; i++)
			__b44_cam_write(bp, zero, i);
		}

		bw32(bp, B44_RXCONFIG, val);
        	val = br32(bp, B44_CAM_CTRL);
	        bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE);