x86/PCI: Factor out pcibios_allocate_dev_resources()
authorYinghai Lu <yinghai@kernel.org>
Sun, 4 Nov 2012 04:39:25 +0000 (21:39 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 7 Jan 2013 21:47:16 +0000 (14:47 -0700)
Factor pcibios_allocate_dev_resources() out of
pcibios_allocate_resources().  Currently we only allocate these
resources at boot-time with a for_each_pci_dev() loop.  Eventually
we'll use pcibios_allocate_dev_resources() for hot-added devices, too.

[bhelgaas: changelog]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
arch/x86/pci/i386.c

index 980036286909b893d30e865b1fbf9837605f205b..5817cf235d9ae74902ee0af9c45f26f1fdca410b 100644 (file)
@@ -232,9 +232,8 @@ struct pci_check_idx_range {
        int end;
 };
 
-static void __init pcibios_allocate_resources(int pass)
+static void __init pcibios_allocate_dev_resources(struct pci_dev *dev, int pass)
 {
-       struct pci_dev *dev = NULL;
        int idx, disabled, i;
        u16 command;
        struct resource *r;
@@ -246,14 +245,13 @@ static void __init pcibios_allocate_resources(int pass)
 #endif
        };
 
-       for_each_pci_dev(dev) {
-               pci_read_config_word(dev, PCI_COMMAND, &command);
-               for (i = 0; i < ARRAY_SIZE(idx_range); i++)
+       pci_read_config_word(dev, PCI_COMMAND, &command);
+       for (i = 0; i < ARRAY_SIZE(idx_range); i++)
                for (idx = idx_range[i].start; idx <= idx_range[i].end; idx++) {
                        r = &dev->resource[idx];
-                       if (r->parent)          /* Already allocated */
+                       if (r->parent)  /* Already allocated */
                                continue;
-                       if (!r->start)          /* Address not assigned at all */
+                       if (!r->start)  /* Address not assigned at all */
                                continue;
                        if (r->flags & IORESOURCE_IO)
                                disabled = !(command & PCI_COMMAND_IO);
@@ -272,23 +270,29 @@ static void __init pcibios_allocate_resources(int pass)
                                }
                        }
                }
-               if (!pass) {
-                       r = &dev->resource[PCI_ROM_RESOURCE];
-                       if (r->flags & IORESOURCE_ROM_ENABLE) {
-                               /* Turn the ROM off, leave the resource region,
-                                * but keep it unregistered. */
-                               u32 reg;
-                               dev_dbg(&dev->dev, "disabling ROM %pR\n", r);
-                               r->flags &= ~IORESOURCE_ROM_ENABLE;
-                               pci_read_config_dword(dev,
-                                               dev->rom_base_reg, &reg);
-                               pci_write_config_dword(dev, dev->rom_base_reg,
+       if (!pass) {
+               r = &dev->resource[PCI_ROM_RESOURCE];
+               if (r->flags & IORESOURCE_ROM_ENABLE) {
+                       /* Turn the ROM off, leave the resource region,
+                        * but keep it unregistered. */
+                       u32 reg;
+                       dev_dbg(&dev->dev, "disabling ROM %pR\n", r);
+                       r->flags &= ~IORESOURCE_ROM_ENABLE;
+                       pci_read_config_dword(dev, dev->rom_base_reg, &reg);
+                       pci_write_config_dword(dev, dev->rom_base_reg,
                                                reg & ~PCI_ROM_ADDRESS_ENABLE);
-                       }
                }
        }
 }
 
+static void __init pcibios_allocate_resources(int pass)
+{
+       struct pci_dev *dev = NULL;
+
+       for_each_pci_dev(dev)
+               pcibios_allocate_dev_resources(dev, pass);
+}
+
 static int __init pcibios_assign_resources(void)
 {
        struct pci_dev *dev = NULL;