|
@@ -7074,6 +7074,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
|
|
u16 device_caps;
|
|
|
#endif
|
|
|
u32 eec;
|
|
|
+ u16 wol_cap;
|
|
|
|
|
|
/* Catch broken hardware that put the wrong VF device ID in
|
|
|
* the PCIe SR-IOV capability.
|
|
@@ -7338,6 +7339,8 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
|
|
netdev->features &= ~NETIF_F_RXHASH;
|
|
|
}
|
|
|
|
|
|
+ /* WOL not supported for all but the following */
|
|
|
+ adapter->wol = 0;
|
|
|
switch (pdev->device) {
|
|
|
case IXGBE_DEV_ID_82599_SFP:
|
|
|
/* Only this subdevice supports WOL */
|
|
@@ -7352,8 +7355,15 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
|
|
case IXGBE_DEV_ID_82599_KX4:
|
|
|
adapter->wol = IXGBE_WUFC_MAG;
|
|
|
break;
|
|
|
- default:
|
|
|
- adapter->wol = 0;
|
|
|
+ case IXGBE_DEV_ID_X540T:
|
|
|
+ /* Check eeprom to see if it is enabled */
|
|
|
+ hw->eeprom.ops.read(hw, 0x2c, &adapter->eeprom_cap);
|
|
|
+ wol_cap = adapter->eeprom_cap & IXGBE_DEVICE_CAPS_WOL_MASK;
|
|
|
+
|
|
|
+ if ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0_1) ||
|
|
|
+ ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0) &&
|
|
|
+ (hw->bus.func == 0)))
|
|
|
+ adapter->wol = IXGBE_WUFC_MAG;
|
|
|
break;
|
|
|
}
|
|
|
device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
|