aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2008-01-15 14:29:29 -0500
committerJeff Garzik <jeff@garzik.org>2008-01-18 14:41:49 -0500
commitbe63a21c9573fbf88106ff0f030da5974551257b (patch)
tree3df2f6ddb03b8e6999f1c67627f5b1a96a0c6665
parent9559cc239d6cf50bf64de0bd7662103238e84274 (diff)
Revert "sky2: remove check for PCI wakeup setting from BIOS"
This reverts commit 84cd2dfb04d23a961c5f537baa243fa54d0987ac. Some BIOS's break if Wake On Lan is enabled, and the machine can't boot. Better to have some user's have to call ethtool to enable WOL than to break a single user's boot. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/sky2.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 7023bbe545ee..bc15940ce1bc 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -3949,7 +3949,7 @@ static __exit void sky2_debug_cleanup(void)
3949/* Initialize network device */ 3949/* Initialize network device */
3950static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw, 3950static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
3951 unsigned port, 3951 unsigned port,
3952 int highmem) 3952 int highmem, int wol)
3953{ 3953{
3954 struct sky2_port *sky2; 3954 struct sky2_port *sky2;
3955 struct net_device *dev = alloc_etherdev(sizeof(*sky2)); 3955 struct net_device *dev = alloc_etherdev(sizeof(*sky2));
@@ -3989,7 +3989,7 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
3989 sky2->speed = -1; 3989 sky2->speed = -1;
3990 sky2->advertising = sky2_supported_modes(hw); 3990 sky2->advertising = sky2_supported_modes(hw);
3991 sky2->rx_csum = (hw->chip_id != CHIP_ID_YUKON_XL); 3991 sky2->rx_csum = (hw->chip_id != CHIP_ID_YUKON_XL);
3992 sky2->wol = sky2_wol_supported(hw) & WAKE_MAGIC; 3992 sky2->wol = wol;
3993 3993
3994 spin_lock_init(&sky2->phy_lock); 3994 spin_lock_init(&sky2->phy_lock);
3995 sky2->tx_pending = TX_DEF_PENDING; 3995 sky2->tx_pending = TX_DEF_PENDING;
@@ -4086,12 +4086,24 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw)
4086 return err; 4086 return err;
4087} 4087}
4088 4088
4089static int __devinit pci_wake_enabled(struct pci_dev *dev)
4090{
4091 int pm = pci_find_capability(dev, PCI_CAP_ID_PM);
4092 u16 value;
4093
4094 if (!pm)
4095 return 0;
4096 if (pci_read_config_word(dev, pm + PCI_PM_CTRL, &value))
4097 return 0;
4098 return value & PCI_PM_CTRL_PME_ENABLE;
4099}
4100
4089static int __devinit sky2_probe(struct pci_dev *pdev, 4101static int __devinit sky2_probe(struct pci_dev *pdev,
4090 const struct pci_device_id *ent) 4102 const struct pci_device_id *ent)
4091{ 4103{
4092 struct net_device *dev; 4104 struct net_device *dev;
4093 struct sky2_hw *hw; 4105 struct sky2_hw *hw;
4094 int err, using_dac = 0; 4106 int err, using_dac = 0, wol_default;
4095 4107
4096 err = pci_enable_device(pdev); 4108 err = pci_enable_device(pdev);
4097 if (err) { 4109 if (err) {
@@ -4124,6 +4136,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
4124 } 4136 }
4125 } 4137 }
4126 4138
4139 wol_default = pci_wake_enabled(pdev) ? WAKE_MAGIC : 0;
4140
4127 err = -ENOMEM; 4141 err = -ENOMEM;
4128 hw = kzalloc(sizeof(*hw), GFP_KERNEL); 4142 hw = kzalloc(sizeof(*hw), GFP_KERNEL);
4129 if (!hw) { 4143 if (!hw) {
@@ -4167,7 +4181,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
4167 4181
4168 sky2_reset(hw); 4182 sky2_reset(hw);
4169 4183
4170 dev = sky2_init_netdev(hw, 0, using_dac); 4184 dev = sky2_init_netdev(hw, 0, using_dac, wol_default);
4171 if (!dev) { 4185 if (!dev) {
4172 err = -ENOMEM; 4186 err = -ENOMEM;
4173 goto err_out_free_pci; 4187 goto err_out_free_pci;
@@ -4204,7 +4218,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
4204 if (hw->ports > 1) { 4218 if (hw->ports > 1) {
4205 struct net_device *dev1; 4219 struct net_device *dev1;
4206 4220
4207 dev1 = sky2_init_netdev(hw, 1, using_dac); 4221 dev1 = sky2_init_netdev(hw, 1, using_dac, wol_default);
4208 if (!dev1) 4222 if (!dev1)
4209 dev_warn(&pdev->dev, "allocation for second device failed\n"); 4223 dev_warn(&pdev->dev, "allocation for second device failed\n");
4210 else if ((err = register_netdev(dev1))) { 4224 else if ((err = register_netdev(dev1))) {