aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bgmac.c
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2013-02-06 00:51:49 -0500
committerDavid S. Miller <davem@davemloft.net>2013-02-06 16:06:49 -0500
commitc6edfe103b9aacadcd4bb9e8e25cafaefa70a80e (patch)
treee8e4d8a7e5b687088204a16761688660d9f1ef6b /drivers/net/ethernet/broadcom/bgmac.c
parent522c5907b7223130e906f0d57ad840c952f864a3 (diff)
bgmac: add ndo_set_rx_mode netdev ops
When changing the device from or to promisc mode this only affects the device after the device is bought up the next time. For bridging it is needed to change the device to promisc mode while it is up, which is possible with this patch. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bgmac.c')
-rw-r--r--drivers/net/ethernet/broadcom/bgmac.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index e0775c4192d7..23c8d4a21ccf 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -771,6 +771,16 @@ static void bgmac_write_mac_address(struct bgmac *bgmac, u8 *addr)
771 bgmac_write(bgmac, BGMAC_MACADDR_LOW, tmp); 771 bgmac_write(bgmac, BGMAC_MACADDR_LOW, tmp);
772} 772}
773 773
774static void bgmac_set_rx_mode(struct net_device *net_dev)
775{
776 struct bgmac *bgmac = netdev_priv(net_dev);
777
778 if (net_dev->flags & IFF_PROMISC)
779 bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, false);
780 else
781 bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, false);
782}
783
774#if 0 /* We don't use that regs yet */ 784#if 0 /* We don't use that regs yet */
775static void bgmac_chip_stats_update(struct bgmac *bgmac) 785static void bgmac_chip_stats_update(struct bgmac *bgmac)
776{ 786{
@@ -1024,10 +1034,7 @@ static void bgmac_chip_init(struct bgmac *bgmac, bool full_init)
1024 /* Enable 802.3x tx flow control (honor received PAUSE frames) */ 1034 /* Enable 802.3x tx flow control (honor received PAUSE frames) */
1025 bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); 1035 bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true);
1026 1036
1027 if (bgmac->net_dev->flags & IFF_PROMISC) 1037 bgmac_set_rx_mode(bgmac->net_dev);
1028 bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, false);
1029 else
1030 bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, false);
1031 1038
1032 bgmac_write_mac_address(bgmac, bgmac->net_dev->dev_addr); 1039 bgmac_write_mac_address(bgmac, bgmac->net_dev->dev_addr);
1033 1040
@@ -1209,6 +1216,7 @@ static const struct net_device_ops bgmac_netdev_ops = {
1209 .ndo_open = bgmac_open, 1216 .ndo_open = bgmac_open,
1210 .ndo_stop = bgmac_stop, 1217 .ndo_stop = bgmac_stop,
1211 .ndo_start_xmit = bgmac_start_xmit, 1218 .ndo_start_xmit = bgmac_start_xmit,
1219 .ndo_set_rx_mode = bgmac_set_rx_mode,
1212 .ndo_set_mac_address = bgmac_set_mac_address, 1220 .ndo_set_mac_address = bgmac_set_mac_address,
1213 .ndo_validate_addr = eth_validate_addr, 1221 .ndo_validate_addr = eth_validate_addr,
1214 .ndo_do_ioctl = bgmac_ioctl, 1222 .ndo_do_ioctl = bgmac_ioctl,