|
@@ -1776,7 +1776,8 @@ static void igb_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
|
|
|
|
|
/* this function will set ->supported = 0 and return 1 if wol is not
|
|
|
* supported by this hardware */
|
|
|
- if (igb_wol_exclusion(adapter, wol))
|
|
|
+ if (igb_wol_exclusion(adapter, wol) ||
|
|
|
+ !device_can_wakeup(&adapter->pdev->dev))
|
|
|
return;
|
|
|
|
|
|
/* apply any specific unsupported masks here */
|
|
@@ -1805,7 +1806,8 @@ static int igb_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
|
|
if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- if (igb_wol_exclusion(adapter, wol))
|
|
|
+ if (igb_wol_exclusion(adapter, wol) ||
|
|
|
+ !device_can_wakeup(&adapter->pdev->dev))
|
|
|
return wol->wolopts ? -EOPNOTSUPP : 0;
|
|
|
|
|
|
switch (hw->device_id) {
|
|
@@ -1825,6 +1827,8 @@ static int igb_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
|
|
if (wol->wolopts & WAKE_MAGIC)
|
|
|
adapter->wol |= E1000_WUFC_MAG;
|
|
|
|
|
|
+ device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|