Jelajahi Sumber

sky2: restore multicast list on resume and other ops

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>
Stephen Hemminger 18 tahun lalu
induk
melakukan
d1b139c039
1 mengubah file dengan 8 tambahan dan 1 penghapusan
  1. 8 1
      drivers/net/sky2.c

+ 8 - 1
drivers/net/sky2.c

@@ -149,6 +149,8 @@ static const char *yukon2_name[] = {
 	"FE",		/* 0xb7 */
 	"FE",		/* 0xb7 */
 };
 };
 
 
+static void sky2_set_multicast(struct net_device *dev);
+
 /* Access to external PHY */
 /* Access to external PHY */
 static int gm_phy_write(struct sky2_hw *hw, unsigned port, u16 reg, u16 val)
 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->autoneg = ecmd->autoneg;
 	sky2->advertising = ecmd->advertising;
 	sky2->advertising = ecmd->advertising;
 
 
-	if (netif_running(dev))
+	if (netif_running(dev)) {
 		sky2_phy_reinit(sky2);
 		sky2_phy_reinit(sky2);
+		sky2_set_multicast(dev);
+	}
 
 
 	return 0;
 	return 0;
 }
 }
@@ -2994,6 +2998,7 @@ static int sky2_nway_reset(struct net_device *dev)
 		return -EINVAL;
 		return -EINVAL;
 
 
 	sky2_phy_reinit(sky2);
 	sky2_phy_reinit(sky2);
+	sky2_set_multicast(dev);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -4171,6 +4176,8 @@ static int sky2_resume(struct pci_dev *pdev)
 				dev_close(dev);
 				dev_close(dev);
 				goto out;
 				goto out;
 			}
 			}
+
+			sky2_set_multicast(dev);
 		}
 		}
 	}
 	}