diff options
author | Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> | 2006-12-18 10:28:43 +0900 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-02-07 15:50:03 -0800 |
commit | 9fb625c3cc3731097a142ecae79a0369fb854c2d (patch) | |
tree | 1f062de277b952e313c3e78df00af1a6d5a523de /drivers/pci/pci.c | |
parent | 924b08f3ff12eb0e8ecd9e9a9b6a5b884a495c23 (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/pci.c')
-rw-r--r-- | drivers/pci/pci.c | 24 |
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); } /** |