aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/skge.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r--drivers/net/skge.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 21afe108d3cb..776692946562 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -135,10 +135,13 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs,
135/* Wake on Lan only supported on Yukon chips with rev 1 or above */ 135/* Wake on Lan only supported on Yukon chips with rev 1 or above */
136static u32 wol_supported(const struct skge_hw *hw) 136static u32 wol_supported(const struct skge_hw *hw)
137{ 137{
138 if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev != 0) 138 if (hw->chip_id == CHIP_ID_GENESIS)
139 return WAKE_MAGIC | WAKE_PHY; 139 return 0;
140 else 140
141 if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev == 0)
141 return 0; 142 return 0;
143
144 return WAKE_MAGIC | WAKE_PHY;
142} 145}
143 146
144static u32 pci_wake_enabled(struct pci_dev *dev) 147static u32 pci_wake_enabled(struct pci_dev *dev)
@@ -3591,7 +3594,9 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
3591 skge->duplex = -1; 3594 skge->duplex = -1;
3592 skge->speed = -1; 3595 skge->speed = -1;
3593 skge->advertising = skge_supported_modes(hw); 3596 skge->advertising = skge_supported_modes(hw);
3594 skge->wol = pci_wake_enabled(hw->pdev) ? wol_supported(hw) : 0; 3597
3598 if (pci_wake_enabled(hw->pdev))
3599 skge->wol = wol_supported(hw) & WAKE_MAGIC;
3595 3600
3596 hw->dev[port] = dev; 3601 hw->dev[port] = dev;
3597 3602
@@ -3797,6 +3802,9 @@ static int skge_suspend(struct pci_dev *pdev, pm_message_t state)
3797 struct skge_hw *hw = pci_get_drvdata(pdev); 3802 struct skge_hw *hw = pci_get_drvdata(pdev);
3798 int i, err, wol = 0; 3803 int i, err, wol = 0;
3799 3804
3805 if (!hw)
3806 return 0;
3807
3800 err = pci_save_state(pdev); 3808 err = pci_save_state(pdev);
3801 if (err) 3809 if (err)
3802 return err; 3810 return err;
@@ -3825,6 +3833,9 @@ static int skge_resume(struct pci_dev *pdev)
3825 struct skge_hw *hw = pci_get_drvdata(pdev); 3833 struct skge_hw *hw = pci_get_drvdata(pdev);
3826 int i, err; 3834 int i, err;
3827 3835
3836 if (!hw)
3837 return 0;
3838
3828 err = pci_set_power_state(pdev, PCI_D0); 3839 err = pci_set_power_state(pdev, PCI_D0);
3829 if (err) 3840 if (err)
3830 goto out; 3841 goto out;
@@ -3863,6 +3874,9 @@ static void skge_shutdown(struct pci_dev *pdev)
3863 struct skge_hw *hw = pci_get_drvdata(pdev); 3874 struct skge_hw *hw = pci_get_drvdata(pdev);
3864 int i, wol = 0; 3875 int i, wol = 0;
3865 3876
3877 if (!hw)
3878 return;
3879
3866 for (i = 0; i < hw->ports; i++) { 3880 for (i = 0; i < hw->ports; i++) {
3867 struct net_device *dev = hw->dev[i]; 3881 struct net_device *dev = hw->dev[i];
3868 struct skge_port *skge = netdev_priv(dev); 3882 struct skge_port *skge = netdev_priv(dev);