diff options
Diffstat (limited to 'arch/x86/pci/common.c')
| -rw-r--r-- | arch/x86/pci/common.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index f7c8a399978c..5fe75026ecc2 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
| @@ -22,6 +22,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | | |||
| 22 | 22 | ||
| 23 | unsigned int pci_early_dump_regs; | 23 | unsigned int pci_early_dump_regs; |
| 24 | static int pci_bf_sort; | 24 | static int pci_bf_sort; |
| 25 | static int smbios_type_b1_flag; | ||
| 25 | int pci_routeirq; | 26 | int pci_routeirq; |
| 26 | int noioapicquirk; | 27 | int noioapicquirk; |
| 27 | #ifdef CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS | 28 | #ifdef CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS |
| @@ -185,6 +186,39 @@ static int __devinit set_bf_sort(const struct dmi_system_id *d) | |||
| 185 | return 0; | 186 | return 0; |
| 186 | } | 187 | } |
| 187 | 188 | ||
| 189 | static void __devinit read_dmi_type_b1(const struct dmi_header *dm, | ||
| 190 | void *private_data) | ||
| 191 | { | ||
| 192 | u8 *d = (u8 *)dm + 4; | ||
| 193 | |||
| 194 | if (dm->type != 0xB1) | ||
| 195 | return; | ||
| 196 | switch (((*(u32 *)d) >> 9) & 0x03) { | ||
| 197 | case 0x00: | ||
| 198 | printk(KERN_INFO "dmi type 0xB1 record - unknown flag\n"); | ||
| 199 | break; | ||
| 200 | case 0x01: /* set pci=bfsort */ | ||
| 201 | smbios_type_b1_flag = 1; | ||
| 202 | break; | ||
| 203 | case 0x02: /* do not set pci=bfsort */ | ||
| 204 | smbios_type_b1_flag = 2; | ||
| 205 | break; | ||
| 206 | default: | ||
| 207 | break; | ||
| 208 | } | ||
| 209 | } | ||
| 210 | |||
| 211 | static int __devinit find_sort_method(const struct dmi_system_id *d) | ||
| 212 | { | ||
| 213 | dmi_walk(read_dmi_type_b1, NULL); | ||
| 214 | |||
| 215 | if (smbios_type_b1_flag == 1) { | ||
| 216 | set_bf_sort(d); | ||
| 217 | return 0; | ||
| 218 | } | ||
| 219 | return -1; | ||
| 220 | } | ||
| 221 | |||
| 188 | /* | 222 | /* |
| 189 | * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) | 223 | * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) |
| 190 | */ | 224 | */ |
| @@ -213,6 +247,13 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { | |||
| 213 | }, | 247 | }, |
| 214 | #endif /* __i386__ */ | 248 | #endif /* __i386__ */ |
| 215 | { | 249 | { |
| 250 | .callback = find_sort_method, | ||
| 251 | .ident = "Dell System", | ||
| 252 | .matches = { | ||
| 253 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), | ||
| 254 | }, | ||
| 255 | }, | ||
| 256 | { | ||
| 216 | .callback = set_bf_sort, | 257 | .callback = set_bf_sort, |
| 217 | .ident = "Dell PowerEdge 1950", | 258 | .ident = "Dell PowerEdge 1950", |
| 218 | .matches = { | 259 | .matches = { |
