summaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>2006-12-18 10:28:43 +0900
committerGreg Kroah-Hartman <gregkh@suse.de>2007-02-07 15:50:03 -0800
commit9fb625c3cc3731097a142ecae79a0369fb854c2d (patch)
tree1f062de277b952e313c3e78df00af1a6d5a523de /drivers/pci
parent924b08f3ff12eb0e8ecd9e9a9b6a5b884a495c23 (diff)
PCI : Move pci_fixup_device and is_enabled (originally intended change)
Original patch was posted as "PCI : Move pci_fixup_device and is_enabled". This 2 of 3 patches does: - Move pci_fixup_device and enable_cnt (originally intended change) - relocate pci_fixup_device (recover latter change of 1st patch) Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Cc: Inaky Perez-Gonzalez <inaky@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/pci.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d20d3983bbd..212acd2e1a8 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -682,22 +682,28 @@ pci_restore_state(struct pci_dev *dev)
* @bars: bitmask of BAR's that must be configured
*
* Initialize device before it's used by a driver. Ask low-level code
- * to enable selected I/O and memory resources. Wake up the device if it
+ * to enable selected I/O and memory resources. Wake up the device if it
* was suspended. Beware, this function can fail.
*/
-
int
pci_enable_device_bars(struct pci_dev *dev, int bars)
{
int err;
+ if (atomic_add_return(1, &dev->enable_cnt) > 1)
+ return 0; /* already enabled */
+
err = pci_set_power_state(dev, PCI_D0);
if (err < 0 && err != -EIO)
- return err;
+ goto err_out;
err = pcibios_enable_device(dev, bars);
if (err < 0)
- return err;
- return 0;
+ goto err_out;
+ pci_fixup_device(pci_fixup_enable, dev);
+
+err_out:
+ atomic_dec(&dev->enable_cnt);
+ return err;
}
/**
@@ -713,13 +719,7 @@ pci_enable_device_bars(struct pci_dev *dev, int bars)
*/
int pci_enable_device(struct pci_dev *dev)
{
- int result;
- if (atomic_add_return(1, &dev->enable_cnt) > 1)
- return 0; /* already enabled */
- result = __pci_enable_device(dev);
- if (result < 0)
- atomic_dec(&dev->enable_cnt);
- return result;
+ return pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1);
}
/**