diff options
Diffstat (limited to 'arch/i386/pci/common.c')
| -rw-r--r-- | arch/i386/pci/common.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index f6bc48da4d2a..dbece776c5b2 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <linux/pci.h> | 8 | #include <linux/pci.h> |
| 9 | #include <linux/ioport.h> | 9 | #include <linux/ioport.h> |
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
| 11 | #include <linux/dmi.h> | ||
| 11 | 12 | ||
| 12 | #include <asm/acpi.h> | 13 | #include <asm/acpi.h> |
| 13 | #include <asm/segment.h> | 14 | #include <asm/segment.h> |
| @@ -120,11 +121,42 @@ void __devinit pcibios_fixup_bus(struct pci_bus *b) | |||
| 120 | pci_read_bridge_bases(b); | 121 | pci_read_bridge_bases(b); |
| 121 | } | 122 | } |
| 122 | 123 | ||
| 124 | /* | ||
| 125 | * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus) | ||
| 126 | */ | ||
| 127 | #ifdef __i386__ | ||
| 128 | static int __devinit assign_all_busses(struct dmi_system_id *d) | ||
| 129 | { | ||
| 130 | pci_probe |= PCI_ASSIGN_ALL_BUSSES; | ||
| 131 | printk(KERN_INFO "%s detected: enabling PCI bus# renumbering" | ||
| 132 | " (pci=assign-busses)\n", d->ident); | ||
| 133 | return 0; | ||
| 134 | } | ||
| 135 | #endif | ||
| 136 | |||
| 137 | /* | ||
| 138 | * Laptops which need pci=assign-busses to see Cardbus cards | ||
| 139 | */ | ||
| 140 | static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | ||
| 141 | #ifdef __i386__ | ||
| 142 | { | ||
| 143 | .callback = assign_all_busses, | ||
| 144 | .ident = "Samsung X20 Laptop", | ||
| 145 | .matches = { | ||
| 146 | DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"), | ||
| 147 | DMI_MATCH(DMI_PRODUCT_NAME, "SX20S"), | ||
| 148 | }, | ||
| 149 | }, | ||
| 150 | #endif /* __i386__ */ | ||
| 151 | {} | ||
| 152 | }; | ||
| 123 | 153 | ||
| 124 | struct pci_bus * __devinit pcibios_scan_root(int busnum) | 154 | struct pci_bus * __devinit pcibios_scan_root(int busnum) |
| 125 | { | 155 | { |
| 126 | struct pci_bus *bus = NULL; | 156 | struct pci_bus *bus = NULL; |
| 127 | 157 | ||
| 158 | dmi_check_system(pciprobe_dmi_table); | ||
| 159 | |||
| 128 | while ((bus = pci_find_next_bus(bus)) != NULL) { | 160 | while ((bus = pci_find_next_bus(bus)) != NULL) { |
| 129 | if (bus->number == busnum) { | 161 | if (bus->number == busnum) { |
| 130 | /* Already scanned */ | 162 | /* Already scanned */ |
