提交 2f614fe0 编写于 作者: J Jeff Garzik

[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: NJeff Garzik <jeff@garzik.org>
上级 39984a9f
...@@ -1706,14 +1706,15 @@ static void __b44_set_rx_mode(struct net_device *dev) ...@@ -1706,14 +1706,15 @@ static void __b44_set_rx_mode(struct net_device *dev)
__b44_set_mac_addr(bp); __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; val |= RXCONFIG_ALLMULTI;
else else
i = __b44_load_mcast(bp, dev); i = __b44_load_mcast(bp, dev);
for (; i < 64; i++) { for (; i < 64; i++)
__b44_cam_write(bp, zero, i); __b44_cam_write(bp, zero, i);
}
bw32(bp, B44_RXCONFIG, val); bw32(bp, B44_RXCONFIG, val);
val = br32(bp, B44_CAM_CTRL); val = br32(bp, B44_CAM_CTRL);
bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE); bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册