diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-10-05 07:10:38 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-10-05 07:10:38 -0400 |
commit | 2f614fe04f4463ff22234133319067d7361f54e5 (patch) | |
tree | 136b00e488510b16c3b2118d9a221f4103b10c27 /drivers/net | |
parent | 39984a9fad0c642182f426d7771332d46f222103 (diff) |
[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: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/b44.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index e891ea2ecc3c..973b8eb37dc2 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -1706,14 +1706,15 @@ static void __b44_set_rx_mode(struct net_device *dev) | |||
1706 | 1706 | ||
1707 | __b44_set_mac_addr(bp); | 1707 | __b44_set_mac_addr(bp); |
1708 | 1708 | ||
1709 | if (dev->flags & IFF_ALLMULTI) | 1709 | if ((dev->flags & IFF_ALLMULTI) || |
1710 | (dev->mc_count > B44_MCAST_TABLE_SIZE)) | ||
1710 | val |= RXCONFIG_ALLMULTI; | 1711 | val |= RXCONFIG_ALLMULTI; |
1711 | else | 1712 | else |
1712 | i = __b44_load_mcast(bp, dev); | 1713 | i = __b44_load_mcast(bp, dev); |
1713 | 1714 | ||
1714 | for (; i < 64; i++) { | 1715 | for (; i < 64; i++) |
1715 | __b44_cam_write(bp, zero, i); | 1716 | __b44_cam_write(bp, zero, i); |
1716 | } | 1717 | |
1717 | bw32(bp, B44_RXCONFIG, val); | 1718 | bw32(bp, B44_RXCONFIG, val); |
1718 | val = br32(bp, B44_CAM_CTRL); | 1719 | val = br32(bp, B44_CAM_CTRL); |
1719 | bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE); | 1720 | bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE); |