diff options
Diffstat (limited to 'arch')
-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 */ |