diff options
author | Tony Luck <tony.luck@intel.com> | 2005-08-31 14:19:44 -0700 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-08-31 14:19:44 -0700 |
commit | 986632fd7033a0199f9548c44606377cdf1f4a80 (patch) | |
tree | 04a705d9cdcb911a86371499f0036ed1034239b4 /arch/i386/pci/i386.c | |
parent | a994018a5fc987702dfb4f5d31172842ea6186dc (diff) | |
parent | 6b39374a27eb4be7e9d82145ae270ba02ea90dc8 (diff) | |
download | talos-op-linux-986632fd7033a0199f9548c44606377cdf1f4a80.tar.gz talos-op-linux-986632fd7033a0199f9548c44606377cdf1f4a80.zip |
Auto-update from upstream
Diffstat (limited to 'arch/i386/pci/i386.c')
-rw-r--r-- | arch/i386/pci/i386.c | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c index 93a364c82150..3cc480998a47 100644 --- a/arch/i386/pci/i386.c +++ b/arch/i386/pci/i386.c @@ -170,43 +170,26 @@ static void __init pcibios_allocate_resources(int pass) static int __init pcibios_assign_resources(void) { struct pci_dev *dev = NULL; - int idx; - struct resource *r; - - for_each_pci_dev(dev) { - int class = dev->class >> 8; - - /* Don't touch classless devices and host bridges */ - if (!class || class == PCI_CLASS_BRIDGE_HOST) - continue; - - for(idx=0; idx<6; idx++) { - r = &dev->resource[idx]; - - /* - * Don't touch IDE controllers and I/O ports of video cards! - */ - if ((class == PCI_CLASS_STORAGE_IDE && idx < 4) || - (class == PCI_CLASS_DISPLAY_VGA && (r->flags & IORESOURCE_IO))) - continue; - - /* - * We shall assign a new address to this resource, either because - * the BIOS forgot to do so or because we have decided the old - * address was unusable for some reason. - */ - if (!r->start && r->end) - pci_assign_resource(dev, idx); - } + struct resource *r, *pr; - if (pci_probe & PCI_ASSIGN_ROMS) { + if (!(pci_probe & PCI_ASSIGN_ROMS)) { + /* Try to use BIOS settings for ROMs, otherwise let + pci_assign_unassigned_resources() allocate the new + addresses. */ + for_each_pci_dev(dev) { r = &dev->resource[PCI_ROM_RESOURCE]; - r->end -= r->start; - r->start = 0; - if (r->end) - pci_assign_resource(dev, PCI_ROM_RESOURCE); + if (!r->flags || !r->start) + continue; + pr = pci_find_parent_resource(dev, r); + if (!pr || request_resource(pr, r) < 0) { + r->end -= r->start; + r->start = 0; + } } } + + pci_assign_unassigned_resources(); + return 0; } |