diff options
author | Yinghai Lu <yinghai@kernel.org> | 2009-11-24 21:05:12 -0500 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-12-04 19:00:17 -0500 |
commit | 575939cf548951dde8df0786899ea5a91bb669b2 (patch) | |
tree | 827fd5a0645d83e87879d7e62f53f51e59f7c54d /arch/x86/pci/i386.c | |
parent | f9f45604edcf87ac86a9d68ca54106c5fb743719 (diff) |
x86/PCI: claim SR-IOV BARs in pcibios_allocate_resource
This allows us to use the BIOS SR-IOV allocations rather than assigning
our own later on.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch/x86/pci/i386.c')
-rw-r--r-- | arch/x86/pci/i386.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index b73c09f45210..5dc9e8c63fcd 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
@@ -146,16 +146,29 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) | |||
146 | } | 146 | } |
147 | } | 147 | } |
148 | 148 | ||
149 | struct pci_check_idx_range { | ||
150 | int start; | ||
151 | int end; | ||
152 | }; | ||
153 | |||
149 | static void __init pcibios_allocate_resources(int pass) | 154 | static void __init pcibios_allocate_resources(int pass) |
150 | { | 155 | { |
151 | struct pci_dev *dev = NULL; | 156 | struct pci_dev *dev = NULL; |
152 | int idx, disabled; | 157 | int idx, disabled, i; |
153 | u16 command; | 158 | u16 command; |
154 | struct resource *r; | 159 | struct resource *r; |
155 | 160 | ||
161 | struct pci_check_idx_range idx_range[] = { | ||
162 | { PCI_STD_RESOURCES, PCI_STD_RESOURCE_END }, | ||
163 | #ifdef CONFIG_PCI_IOV | ||
164 | { PCI_IOV_RESOURCES, PCI_IOV_RESOURCE_END }, | ||
165 | #endif | ||
166 | }; | ||
167 | |||
156 | for_each_pci_dev(dev) { | 168 | for_each_pci_dev(dev) { |
157 | pci_read_config_word(dev, PCI_COMMAND, &command); | 169 | pci_read_config_word(dev, PCI_COMMAND, &command); |
158 | for (idx = 0; idx < PCI_ROM_RESOURCE; idx++) { | 170 | for (i = 0; i < ARRAY_SIZE(idx_range); i++) |
171 | for (idx = idx_range[i].start; idx <= idx_range[i].end; idx++) { | ||
159 | r = &dev->resource[idx]; | 172 | r = &dev->resource[idx]; |
160 | if (r->parent) /* Already allocated */ | 173 | if (r->parent) /* Already allocated */ |
161 | continue; | 174 | continue; |