|
@@ -1713,7 +1713,8 @@ static void e1000_get_wol(struct net_device *netdev,
|
|
|
wol->supported = 0;
|
|
|
wol->wolopts = 0;
|
|
|
|
|
|
- if (!(adapter->flags & FLAG_HAS_WOL))
|
|
|
+ if (!(adapter->flags & FLAG_HAS_WOL) ||
|
|
|
+ !device_can_wakeup(&adapter->pdev->dev))
|
|
|
return;
|
|
|
|
|
|
wol->supported = WAKE_UCAST | WAKE_MCAST |
|
|
@@ -1751,7 +1752,8 @@ static int e1000_set_wol(struct net_device *netdev,
|
|
|
if (wol->wolopts & WAKE_MAGICSECURE)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- if (!(adapter->flags & FLAG_HAS_WOL))
|
|
|
+ if (!(adapter->flags & FLAG_HAS_WOL) ||
|
|
|
+ !device_can_wakeup(&adapter->pdev->dev))
|
|
|
return wol->wolopts ? -EOPNOTSUPP : 0;
|
|
|
|
|
|
/* these settings will always override what we currently have */
|
|
@@ -1770,6 +1772,8 @@ static int e1000_set_wol(struct net_device *netdev,
|
|
|
if (wol->wolopts & WAKE_ARP)
|
|
|
adapter->wol |= E1000_WUFC_ARP;
|
|
|
|
|
|
+ device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|