sky2: restore multicast list on resume and other ops
authorStephen Hemminger <shemminger@linux-foundation.org>
Wed, 5 Sep 2007 15:56:19 +0000 (16:56 +0100)
committerJeff Garzik <jeff@garzik.org>
Thu, 13 Sep 2007 04:02:49 +0000 (00:02 -0400)
Need to restore multicast settings on resume and after 'ethtool -r'.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/sky2.c

index e6d937ec68866c83736da15bd3571ed1cd82a37b..5d812de65d90a4d4467327ec675daf5d669d824c 100644 (file)
@@ -149,6 +149,8 @@ static const char *yukon2_name[] = {
        "FE",           /* 0xb7 */
 };
 
+static void sky2_set_multicast(struct net_device *dev);
+
 /* Access to external PHY */
 static int gm_phy_write(struct sky2_hw *hw, unsigned port, u16 reg, u16 val)
 {
@@ -2900,8 +2902,10 @@ static int sky2_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
        sky2->autoneg = ecmd->autoneg;
        sky2->advertising = ecmd->advertising;
 
-       if (netif_running(dev))
+       if (netif_running(dev)) {
                sky2_phy_reinit(sky2);
+               sky2_set_multicast(dev);
+       }
 
        return 0;
 }
@@ -2994,6 +2998,7 @@ static int sky2_nway_reset(struct net_device *dev)
                return -EINVAL;
 
        sky2_phy_reinit(sky2);
+       sky2_set_multicast(dev);
 
        return 0;
 }
@@ -4171,6 +4176,8 @@ static int sky2_resume(struct pci_dev *pdev)
                                dev_close(dev);
                                goto out;
                        }
+
+                       sky2_set_multicast(dev);
                }
        }