blob: 233d1c275d96aa885df906bcd0a30fd019ff601a [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * probe.c - PCI detection and setup code
3 */
4
5#include <linux/kernel.h>
6#include <linux/delay.h>
7#include <linux/init.h>
8#include <linux/pci.h>
9#include <linux/slab.h>
10#include <linux/module.h>
11#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080012#include <linux/pci-aspm.h>
Matt Domsch05843962009-11-02 11:51:24 -060013#include <acpi/acpi_hest.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090014#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
17#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070018
19/* Ugh. Need to stop exporting this to modules. */
20LIST_HEAD(pci_root_buses);
21EXPORT_SYMBOL(pci_root_buses);
22
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080023
24static int find_anything(struct device *dev, void *data)
25{
26 return 1;
27}
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070029/*
30 * Some device drivers need know if pci is initiated.
31 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080032 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070033 */
34int no_pci_devices(void)
35{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080036 struct device *dev;
37 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070038
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080039 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
40 no_devices = (dev == NULL);
41 put_device(dev);
42 return no_devices;
43}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070044EXPORT_SYMBOL(no_pci_devices);
45
Linus Torvalds1da177e2005-04-16 15:20:36 -070046/*
47 * PCI Bus Class Devices
48 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040049static ssize_t pci_bus_show_cpuaffinity(struct device *dev,
Mike Travis39106dc2008-04-08 11:43:03 -070050 int type,
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040051 struct device_attribute *attr,
Alan Cox4327edf2005-09-10 00:25:49 -070052 char *buf)
Linus Torvalds1da177e2005-04-16 15:20:36 -070053{
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 int ret;
Mike Travis588235b2009-01-04 05:18:02 -080055 const struct cpumask *cpumask;
Linus Torvalds1da177e2005-04-16 15:20:36 -070056
Mike Travis588235b2009-01-04 05:18:02 -080057 cpumask = cpumask_of_pcibus(to_pci_bus(dev));
Mike Travis39106dc2008-04-08 11:43:03 -070058 ret = type?
Mike Travis588235b2009-01-04 05:18:02 -080059 cpulist_scnprintf(buf, PAGE_SIZE-2, cpumask) :
60 cpumask_scnprintf(buf, PAGE_SIZE-2, cpumask);
Mike Travis39106dc2008-04-08 11:43:03 -070061 buf[ret++] = '\n';
62 buf[ret] = '\0';
Linus Torvalds1da177e2005-04-16 15:20:36 -070063 return ret;
64}
Mike Travis39106dc2008-04-08 11:43:03 -070065
66static ssize_t inline pci_bus_show_cpumaskaffinity(struct device *dev,
67 struct device_attribute *attr,
68 char *buf)
69{
70 return pci_bus_show_cpuaffinity(dev, 0, attr, buf);
71}
72
73static ssize_t inline pci_bus_show_cpulistaffinity(struct device *dev,
74 struct device_attribute *attr,
75 char *buf)
76{
77 return pci_bus_show_cpuaffinity(dev, 1, attr, buf);
78}
79
80DEVICE_ATTR(cpuaffinity, S_IRUGO, pci_bus_show_cpumaskaffinity, NULL);
81DEVICE_ATTR(cpulistaffinity, S_IRUGO, pci_bus_show_cpulistaffinity, NULL);
Linus Torvalds1da177e2005-04-16 15:20:36 -070082
83/*
84 * PCI Bus Class
85 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040086static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -070087{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040088 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -070089
90 if (pci_bus->bridge)
91 put_device(pci_bus->bridge);
92 kfree(pci_bus);
93}
94
95static struct class pcibus_class = {
96 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040097 .dev_release = &release_pcibus_dev,
Linus Torvalds1da177e2005-04-16 15:20:36 -070098};
99
100static int __init pcibus_class_init(void)
101{
102 return class_register(&pcibus_class);
103}
104postcore_initcall(pcibus_class_init);
105
106/*
107 * Translate the low bits of the PCI base
108 * to the resource type
109 */
110static inline unsigned int pci_calc_resource_flags(unsigned int flags)
111{
112 if (flags & PCI_BASE_ADDRESS_SPACE_IO)
113 return IORESOURCE_IO;
114
115 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
116 return IORESOURCE_MEM | IORESOURCE_PREFETCH;
117
118 return IORESOURCE_MEM;
119}
120
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400121static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800122{
123 u64 size = mask & maxbase; /* Find the significant bits */
124 if (!size)
125 return 0;
126
127 /* Get the lowest of them to find the decode size, and
128 from that the extent. */
129 size = (size & ~(size-1)) - 1;
130
131 /* base == maxbase can be valid only if the BAR has
132 already been programmed with all 1s. */
133 if (base == maxbase && ((base | size) & mask) != mask)
134 return 0;
135
136 return size;
137}
138
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400139static inline enum pci_bar_type decode_bar(struct resource *res, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800140{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400141 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
142 res->flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
143 return pci_bar_io;
144 }
145
146 res->flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
147
Peter Chubbe3545972008-10-13 11:49:04 +1100148 if (res->flags & PCI_BASE_ADDRESS_MEM_TYPE_64)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400149 return pci_bar_mem64;
150 return pci_bar_mem32;
151}
152
Yu Zhao0b400c72008-11-22 02:40:40 +0800153/**
154 * pci_read_base - read a PCI BAR
155 * @dev: the PCI device
156 * @type: type of the BAR
157 * @res: resource buffer to be filled in
158 * @pos: BAR position in the config space
159 *
160 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400161 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800162int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400163 struct resource *res, unsigned int pos)
164{
165 u32 l, sz, mask;
166
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200167 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400168
169 res->name = pci_name(dev);
170
171 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200172 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400173 pci_read_config_dword(dev, pos, &sz);
174 pci_write_config_dword(dev, pos, l);
175
176 /*
177 * All bits set in sz means the device isn't working properly.
178 * If the BAR isn't implemented, all bits must be 0. If it's a
179 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
180 * 1 must be clear.
181 */
182 if (!sz || sz == 0xffffffff)
183 goto fail;
184
185 /*
186 * I don't know how l can have all bits set. Copied from old code.
187 * Maybe it fixes a bug on some ancient platform.
188 */
189 if (l == 0xffffffff)
190 l = 0;
191
192 if (type == pci_bar_unknown) {
193 type = decode_bar(res, l);
194 res->flags |= pci_calc_resource_flags(l) | IORESOURCE_SIZEALIGN;
195 if (type == pci_bar_io) {
196 l &= PCI_BASE_ADDRESS_IO_MASK;
Yinghai Lu1f82de12009-04-23 20:48:32 -0700197 mask = PCI_BASE_ADDRESS_IO_MASK & IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400198 } else {
199 l &= PCI_BASE_ADDRESS_MEM_MASK;
200 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
201 }
202 } else {
203 res->flags |= (l & IORESOURCE_ROM_ENABLE);
204 l &= PCI_ROM_ADDRESS_MASK;
205 mask = (u32)PCI_ROM_ADDRESS_MASK;
206 }
207
208 if (type == pci_bar_mem64) {
209 u64 l64 = l;
210 u64 sz64 = sz;
211 u64 mask64 = mask | (u64)~0 << 32;
212
213 pci_read_config_dword(dev, pos + 4, &l);
214 pci_write_config_dword(dev, pos + 4, ~0);
215 pci_read_config_dword(dev, pos + 4, &sz);
216 pci_write_config_dword(dev, pos + 4, l);
217
218 l64 |= ((u64)l << 32);
219 sz64 |= ((u64)sz << 32);
220
221 sz64 = pci_size(l64, sz64, mask64);
222
223 if (!sz64)
224 goto fail;
225
Matthew Wilcoxcc5499c2008-07-28 13:39:00 -0400226 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700227 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",
228 pos);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400229 goto fail;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600230 }
231
232 res->flags |= IORESOURCE_MEM_64;
233 if ((sizeof(resource_size_t) < 8) && l) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400234 /* Address above 32-bit boundary; disable the BAR */
235 pci_write_config_dword(dev, pos, 0);
236 pci_write_config_dword(dev, pos + 4, 0);
237 res->start = 0;
238 res->end = sz64;
239 } else {
240 res->start = l64;
241 res->end = l64 + sz64;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600242 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
Bjorn Helgaasa369c792009-10-06 15:33:44 -0600243 pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400244 }
245 } else {
246 sz = pci_size(l, sz, mask);
247
248 if (!sz)
249 goto fail;
250
251 res->start = l;
252 res->end = l + sz;
Vincent Legollf393d9b2008-10-12 12:26:12 +0200253
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600254 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400255 }
256
257 out:
258 return (type == pci_bar_mem64) ? 1 : 0;
259 fail:
260 res->flags = 0;
261 goto out;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800262}
263
Linus Torvalds1da177e2005-04-16 15:20:36 -0700264static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
265{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400266 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700267
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400268 for (pos = 0; pos < howmany; pos++) {
269 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700270 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400271 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700272 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400273
Linus Torvalds1da177e2005-04-16 15:20:36 -0700274 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400275 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700276 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400277 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
278 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
279 IORESOURCE_SIZEALIGN;
280 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700281 }
282}
283
Sam Ravnborg0ab2b572008-02-17 10:45:28 +0100284void __devinit pci_read_bridge_bases(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700285{
286 struct pci_dev *dev = child->self;
287 u8 io_base_lo, io_limit_lo;
288 u16 mem_base_lo, mem_limit_lo;
289 unsigned long base, limit;
290 struct resource *res;
291 int i;
292
Kenji Kaneshige9fc39252009-05-26 16:06:48 +0900293 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700294 return;
295
Bjorn Helgaas865df572009-11-04 10:32:57 -0700296 dev_info(&dev->dev, "PCI bridge to [bus %02x-%02x]%s\n",
297 child->secondary, child->subordinate,
298 dev->transparent ? " (subtractive decode)": "");
299
Linus Torvalds1da177e2005-04-16 15:20:36 -0700300 if (dev->transparent) {
Ivan Kokshaysky90b54922005-06-07 04:07:02 +0400301 for(i = 3; i < PCI_BUS_NUM_RESOURCES; i++)
302 child->resource[i] = child->parent->resource[i - 3];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700303 }
304
Linus Torvalds1da177e2005-04-16 15:20:36 -0700305 res = child->resource[0];
306 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
307 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
308 base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
309 limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
310
311 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
312 u16 io_base_hi, io_limit_hi;
313 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
314 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
315 base |= (io_base_hi << 16);
316 limit |= (io_limit_hi << 16);
317 }
318
319 if (base <= limit) {
320 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Daniel Yeisley9d265122005-12-05 07:06:43 -0500321 if (!res->start)
322 res->start = base;
323 if (!res->end)
324 res->end = limit + 0xfff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600325 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326 }
327
328 res = child->resource[1];
329 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
330 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
331 base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
332 limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
333 if (base <= limit) {
334 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
335 res->start = base;
336 res->end = limit + 0xfffff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600337 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700338 }
339
340 res = child->resource[2];
341 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
342 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
343 base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
344 limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
345
346 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
347 u32 mem_base_hi, mem_limit_hi;
348 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
349 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
350
351 /*
352 * Some bridges set the base > limit by default, and some
353 * (broken) BIOSes do not initialize them. If we find
354 * this, just assume they are not being used.
355 */
356 if (mem_base_hi <= mem_limit_hi) {
357#if BITS_PER_LONG == 64
358 base |= ((long) mem_base_hi) << 32;
359 limit |= ((long) mem_limit_hi) << 32;
360#else
361 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600362 dev_err(&dev->dev, "can't handle 64-bit "
363 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364 return;
365 }
366#endif
367 }
368 }
369 if (base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700370 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
371 IORESOURCE_MEM | IORESOURCE_PREFETCH;
372 if (res->flags & PCI_PREF_RANGE_TYPE_64)
373 res->flags |= IORESOURCE_MEM_64;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700374 res->start = base;
375 res->end = limit + 0xfffff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600376 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 }
378}
379
Sam Ravnborg96bde062007-03-26 21:53:30 -0800380static struct pci_bus * pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700381{
382 struct pci_bus *b;
383
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100384 b = kzalloc(sizeof(*b), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700385 if (b) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700386 INIT_LIST_HEAD(&b->node);
387 INIT_LIST_HEAD(&b->children);
388 INIT_LIST_HEAD(&b->devices);
Alex Chiangf46753c2008-06-10 15:28:50 -0600389 INIT_LIST_HEAD(&b->slots);
Matthew Wilcox3749c512009-12-13 08:11:32 -0500390 b->max_bus_speed = PCI_SPEED_UNKNOWN;
391 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700392 }
393 return b;
394}
395
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500396static unsigned char pcix_bus_speed[] = {
397 PCI_SPEED_UNKNOWN, /* 0 */
398 PCI_SPEED_66MHz_PCIX, /* 1 */
399 PCI_SPEED_100MHz_PCIX, /* 2 */
400 PCI_SPEED_133MHz_PCIX, /* 3 */
401 PCI_SPEED_UNKNOWN, /* 4 */
402 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
403 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
404 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
405 PCI_SPEED_UNKNOWN, /* 8 */
406 PCI_SPEED_66MHz_PCIX_266, /* 9 */
407 PCI_SPEED_100MHz_PCIX_266, /* A */
408 PCI_SPEED_133MHz_PCIX_266, /* B */
409 PCI_SPEED_UNKNOWN, /* C */
410 PCI_SPEED_66MHz_PCIX_533, /* D */
411 PCI_SPEED_100MHz_PCIX_533, /* E */
412 PCI_SPEED_133MHz_PCIX_533 /* F */
413};
414
Matthew Wilcox3749c512009-12-13 08:11:32 -0500415static unsigned char pcie_link_speed[] = {
416 PCI_SPEED_UNKNOWN, /* 0 */
417 PCIE_SPEED_2_5GT, /* 1 */
418 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500419 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500420 PCI_SPEED_UNKNOWN, /* 4 */
421 PCI_SPEED_UNKNOWN, /* 5 */
422 PCI_SPEED_UNKNOWN, /* 6 */
423 PCI_SPEED_UNKNOWN, /* 7 */
424 PCI_SPEED_UNKNOWN, /* 8 */
425 PCI_SPEED_UNKNOWN, /* 9 */
426 PCI_SPEED_UNKNOWN, /* A */
427 PCI_SPEED_UNKNOWN, /* B */
428 PCI_SPEED_UNKNOWN, /* C */
429 PCI_SPEED_UNKNOWN, /* D */
430 PCI_SPEED_UNKNOWN, /* E */
431 PCI_SPEED_UNKNOWN /* F */
432};
433
434void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
435{
436 bus->cur_bus_speed = pcie_link_speed[linksta & 0xf];
437}
438EXPORT_SYMBOL_GPL(pcie_update_link_speed);
439
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500440static unsigned char agp_speeds[] = {
441 AGP_UNKNOWN,
442 AGP_1X,
443 AGP_2X,
444 AGP_4X,
445 AGP_8X
446};
447
448static enum pci_bus_speed agp_speed(int agp3, int agpstat)
449{
450 int index = 0;
451
452 if (agpstat & 4)
453 index = 3;
454 else if (agpstat & 2)
455 index = 2;
456 else if (agpstat & 1)
457 index = 1;
458 else
459 goto out;
460
461 if (agp3) {
462 index += 2;
463 if (index == 5)
464 index = 0;
465 }
466
467 out:
468 return agp_speeds[index];
469}
470
471
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500472static void pci_set_bus_speed(struct pci_bus *bus)
473{
474 struct pci_dev *bridge = bus->self;
475 int pos;
476
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500477 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
478 if (!pos)
479 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
480 if (pos) {
481 u32 agpstat, agpcmd;
482
483 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
484 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
485
486 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
487 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
488 }
489
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500490 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
491 if (pos) {
492 u16 status;
493 enum pci_bus_speed max;
494 pci_read_config_word(bridge, pos + 2, &status);
495
496 if (status & 0x8000) {
497 max = PCI_SPEED_133MHz_PCIX_533;
498 } else if (status & 0x4000) {
499 max = PCI_SPEED_133MHz_PCIX_266;
500 } else if (status & 0x0002) {
501 if (((status >> 12) & 0x3) == 2) {
502 max = PCI_SPEED_133MHz_PCIX_ECC;
503 } else {
504 max = PCI_SPEED_133MHz_PCIX;
505 }
506 } else {
507 max = PCI_SPEED_66MHz_PCIX;
508 }
509
510 bus->max_bus_speed = max;
511 bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf];
512
513 return;
514 }
515
516 pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
517 if (pos) {
518 u32 linkcap;
519 u16 linksta;
520
521 pci_read_config_dword(bridge, pos + PCI_EXP_LNKCAP, &linkcap);
522 bus->max_bus_speed = pcie_link_speed[linkcap & 0xf];
523
524 pci_read_config_word(bridge, pos + PCI_EXP_LNKSTA, &linksta);
525 pcie_update_link_speed(bus, linksta);
526 }
527}
528
529
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700530static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
531 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700532{
533 struct pci_bus *child;
534 int i;
535
536 /*
537 * Allocate a new bus, and inherit stuff from the parent..
538 */
539 child = pci_alloc_bus();
540 if (!child)
541 return NULL;
542
Linus Torvalds1da177e2005-04-16 15:20:36 -0700543 child->parent = parent;
544 child->ops = parent->ops;
545 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200546 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700547
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400548 /* initialize some portions of the bus device, but don't register it
549 * now as the parent is not properly set up yet. This device will get
550 * registered later in pci_bus_add_devices()
551 */
552 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100553 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700554
555 /*
556 * Set up the primary, secondary and subordinate
557 * bus numbers.
558 */
559 child->number = child->secondary = busnr;
560 child->primary = parent->secondary;
561 child->subordinate = 0xff;
562
Yu Zhao3789fa82008-11-22 02:41:07 +0800563 if (!bridge)
564 return child;
565
566 child->self = bridge;
567 child->bridge = get_device(&bridge->dev);
568
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500569 pci_set_bus_speed(child);
570
Linus Torvalds1da177e2005-04-16 15:20:36 -0700571 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800572 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700573 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
574 child->resource[i]->name = child->name;
575 }
576 bridge->subordinate = child;
577
578 return child;
579}
580
Sam Ravnborg451124a2008-02-02 22:33:43 +0100581struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700582{
583 struct pci_bus *child;
584
585 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700586 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800587 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700588 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800589 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700590 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700591 return child;
592}
593
Sam Ravnborg96bde062007-03-26 21:53:30 -0800594static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700595{
596 struct pci_bus *parent = child->parent;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700597
598 /* Attempts to fix that up are really dangerous unless
599 we're going to re-assign all bus numbers. */
600 if (!pcibios_assign_all_busses())
601 return;
602
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700603 while (parent->parent && parent->subordinate < max) {
604 parent->subordinate = max;
605 pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
606 parent = parent->parent;
607 }
608}
609
Linus Torvalds1da177e2005-04-16 15:20:36 -0700610/*
611 * If it's a bridge, configure it and scan the bus behind it.
612 * For CardBus bridges, we don't scan behind as the devices will
613 * be handled by the bridge driver itself.
614 *
615 * We need to process bridges in two passes -- first we scan those
616 * already configured by the BIOS and after we are done with all of
617 * them, we proceed to assigning numbers to the remaining buses in
618 * order to avoid overlaps between old and new bus numbers.
619 */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +0100620int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700621{
622 struct pci_bus *child;
623 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100624 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700625 u16 bctl;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100626 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700627
628 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
629
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600630 dev_dbg(&dev->dev, "scanning behind bridge, config %06x, pass %d\n",
631 buses & 0xffffff, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700632
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100633 /* Check if setup is sensible at all */
634 if (!pass &&
635 ((buses & 0xff) != bus->number || ((buses >> 8) & 0xff) <= bus->number)) {
636 dev_dbg(&dev->dev, "bus configuration invalid, reconfiguring\n");
637 broken = 1;
638 }
639
Linus Torvalds1da177e2005-04-16 15:20:36 -0700640 /* Disable MasterAbortMode during probing to avoid reporting
641 of bus errors (in some architectures) */
642 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
643 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
644 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
645
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100646 if ((buses & 0xffff00) && !pcibios_assign_all_busses() && !is_cardbus && !broken) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700647 unsigned int cmax, busnr;
648 /*
649 * Bus already configured by firmware, process it in the first
650 * pass and just note the configuration.
651 */
652 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000653 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700654 busnr = (buses >> 8) & 0xFF;
655
656 /*
657 * If we already got to this bus through a different bridge,
Alex Chiang74710de2009-03-20 14:56:10 -0600658 * don't re-add it. This can happen with the i450NX chipset.
659 *
660 * However, we continue to descend down the hierarchy and
661 * scan remaining child buses.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700662 */
Alex Chiang74710de2009-03-20 14:56:10 -0600663 child = pci_find_bus(pci_domain_nr(bus), busnr);
664 if (!child) {
665 child = pci_add_new_bus(bus, dev, busnr);
666 if (!child)
667 goto out;
668 child->primary = buses & 0xFF;
669 child->subordinate = (buses >> 16) & 0xFF;
670 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700671 }
672
Linus Torvalds1da177e2005-04-16 15:20:36 -0700673 cmax = pci_scan_child_bus(child);
674 if (cmax > max)
675 max = cmax;
676 if (child->subordinate > max)
677 max = child->subordinate;
678 } else {
679 /*
680 * We need to assign a number to this bus which we always
681 * do in the second pass.
682 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700683 if (!pass) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100684 if (pcibios_assign_all_busses() || broken)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700685 /* Temporarily disable forwarding of the
686 configuration cycles on all bridges in
687 this bus segment to avoid possible
688 conflicts in the second pass between two
689 bridges programmed with overlapping
690 bus ranges. */
691 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
692 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000693 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700694 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700695
696 /* Clear errors */
697 pci_write_config_word(dev, PCI_STATUS, 0xffff);
698
Rajesh Shahcc574502005-04-28 00:25:47 -0700699 /* Prevent assigning a bus number that already exists.
700 * This can happen when a bridge is hot-plugged */
701 if (pci_find_bus(pci_domain_nr(bus), max+1))
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000702 goto out;
Rajesh Shah6ef6f0e2005-04-28 00:25:49 -0700703 child = pci_add_new_bus(bus, dev, ++max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700704 buses = (buses & 0xff000000)
705 | ((unsigned int)(child->primary) << 0)
706 | ((unsigned int)(child->secondary) << 8)
707 | ((unsigned int)(child->subordinate) << 16);
708
709 /*
710 * yenta.c forces a secondary latency timer of 176.
711 * Copy that behaviour here.
712 */
713 if (is_cardbus) {
714 buses &= ~0xff000000;
715 buses |= CARDBUS_LATENCY_TIMER << 24;
716 }
717
718 /*
719 * We need to blast all three values with a single write.
720 */
721 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
722
723 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700724 child->bridge_ctl = bctl;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700725 /*
726 * Adjust subordinate busnr in parent buses.
727 * We do this before scanning for children because
728 * some devices may not be detected if the bios
729 * was lazy.
730 */
731 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700732 /* Now we can scan all subordinate buses... */
733 max = pci_scan_child_bus(child);
Kristen Accardie3ac86d2006-01-17 16:57:01 -0800734 /*
735 * now fix it up again since we have found
736 * the real value of max.
737 */
738 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700739 } else {
740 /*
741 * For CardBus bridges, we leave 4 bus numbers
742 * as cards with a PCI-to-PCI bridge can be
743 * inserted later.
744 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100745 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
746 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700747 if (pci_find_bus(pci_domain_nr(bus),
748 max+i+1))
749 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100750 while (parent->parent) {
751 if ((!pcibios_assign_all_busses()) &&
752 (parent->subordinate > max) &&
753 (parent->subordinate <= max+i)) {
754 j = 1;
755 }
756 parent = parent->parent;
757 }
758 if (j) {
759 /*
760 * Often, there are two cardbus bridges
761 * -- try to leave one valid bus number
762 * for each one.
763 */
764 i /= 2;
765 break;
766 }
767 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700768 max += i;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700769 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700770 }
771 /*
772 * Set the subordinate bus number to its real value.
773 */
774 child->subordinate = max;
775 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
776 }
777
Gary Hadecb3576f2008-02-08 14:00:52 -0800778 sprintf(child->name,
779 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
780 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700781
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200782 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100783 while (bus->parent) {
784 if ((child->subordinate > bus->subordinate) ||
785 (child->number > bus->subordinate) ||
786 (child->number < bus->number) ||
787 (child->subordinate < bus->number)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700788 dev_info(&child->dev, "[bus %02x-%02x] %s "
789 "hidden behind%s bridge %s [bus %02x-%02x]\n",
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200790 child->number, child->subordinate,
791 (bus->number > child->subordinate &&
792 bus->subordinate < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800793 "wholly" : "partially",
794 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700795 dev_name(&bus->dev),
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200796 bus->number, bus->subordinate);
Dominik Brodowski49887942005-12-08 16:53:12 +0100797 }
798 bus = bus->parent;
799 }
800
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000801out:
802 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
803
Linus Torvalds1da177e2005-04-16 15:20:36 -0700804 return max;
805}
806
807/*
808 * Read interrupt line and base address registers.
809 * The architecture-dependent code can tweak these, of course.
810 */
811static void pci_read_irq(struct pci_dev *dev)
812{
813 unsigned char irq;
814
815 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800816 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700817 if (irq)
818 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
819 dev->irq = irq;
820}
821
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000822void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800823{
824 int pos;
825 u16 reg16;
826
827 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
828 if (!pos)
829 return;
830 pdev->is_pcie = 1;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900831 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800832 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
833 pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
834}
835
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000836void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700837{
838 int pos;
839 u16 reg16;
840 u32 reg32;
841
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +0900842 pos = pci_pcie_cap(pdev);
Eric W. Biederman28760482009-09-09 14:09:24 -0700843 if (!pos)
844 return;
845 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
846 if (!(reg16 & PCI_EXP_FLAGS_SLOT))
847 return;
848 pci_read_config_dword(pdev, pos + PCI_EXP_SLTCAP, &reg32);
849 if (reg32 & PCI_EXP_SLTCAP_HPC)
850 pdev->is_hotplug_bridge = 1;
851}
852
Matt Domsch05843962009-11-02 11:51:24 -0600853static void set_pci_aer_firmware_first(struct pci_dev *pdev)
854{
855 if (acpi_hest_firmware_first_pci(pdev))
856 pdev->aer_firmware_first = 1;
857}
858
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +0200859#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -0800860
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861/**
862 * pci_setup_device - fill in class and map information of a device
863 * @dev: the device structure to fill
864 *
865 * Initialize the device structure with information about the device's
866 * vendor,class,memory and IO-space addresses,IRQ lines etc.
867 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +0800868 * Returns 0 on success and negative if unknown type of device (not normal,
869 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700870 */
Yu Zhao480b93b2009-03-20 11:25:14 +0800871int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872{
873 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +0800874 u8 hdr_type;
875 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -0500876 int pos = 0;
Yu Zhao480b93b2009-03-20 11:25:14 +0800877
878 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
879 return -EIO;
880
881 dev->sysdata = dev->bus->sysdata;
882 dev->dev.parent = dev->bus->bridge;
883 dev->dev.bus = &pci_bus_type;
884 dev->hdr_type = hdr_type & 0x7f;
885 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +0800886 dev->error_state = pci_channel_io_normal;
887 set_pcie_port_type(dev);
Matt Domsch05843962009-11-02 11:51:24 -0600888 set_pci_aer_firmware_first(dev);
Yu Zhao480b93b2009-03-20 11:25:14 +0800889
890 list_for_each_entry(slot, &dev->bus->slots, list)
891 if (PCI_SLOT(dev->devfn) == slot->number)
892 dev->slot = slot;
893
894 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
895 set this higher, assuming the system even supports it. */
896 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700897
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -0700898 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
899 dev->bus->number, PCI_SLOT(dev->devfn),
900 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700901
902 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -0700903 dev->revision = class & 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700904 class >>= 8; /* upper 3 bytes */
905 dev->class = class;
906 class >>= 8;
907
Bjorn Helgaas34a2e152008-08-25 15:45:20 -0600908 dev_dbg(&dev->dev, "found [%04x:%04x] class %06x header type %02x\n",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700909 dev->vendor, dev->device, class, dev->hdr_type);
910
Yu Zhao853346e2009-03-21 22:05:11 +0800911 /* need to have dev->class ready */
912 dev->cfg_size = pci_cfg_space_size(dev);
913
Linus Torvalds1da177e2005-04-16 15:20:36 -0700914 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -0700915 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700916
917 /* Early fixups, before probing the BARs */
918 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +0800919 /* device class may be changed after fixup */
920 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700921
922 switch (dev->hdr_type) { /* header type */
923 case PCI_HEADER_TYPE_NORMAL: /* standard header */
924 if (class == PCI_CLASS_BRIDGE_PCI)
925 goto bad;
926 pci_read_irq(dev);
927 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
928 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
929 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +0100930
931 /*
932 * Do the ugly legacy mode stuff here rather than broken chip
933 * quirk code. Legacy mode ATA controllers have fixed
934 * addresses. These are not always echoed in BAR0-3, and
935 * BAR0-3 in a few cases contain junk!
936 */
937 if (class == PCI_CLASS_STORAGE_IDE) {
938 u8 progif;
939 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
940 if ((progif & 1) == 0) {
Linus Torvaldsaf1bff42007-12-10 07:40:54 -0800941 dev->resource[0].start = 0x1F0;
942 dev->resource[0].end = 0x1F7;
943 dev->resource[0].flags = LEGACY_IO_RESOURCE;
944 dev->resource[1].start = 0x3F6;
945 dev->resource[1].end = 0x3F6;
946 dev->resource[1].flags = LEGACY_IO_RESOURCE;
Alan Cox368c73d2006-10-04 00:41:26 +0100947 }
948 if ((progif & 4) == 0) {
Linus Torvaldsaf1bff42007-12-10 07:40:54 -0800949 dev->resource[2].start = 0x170;
950 dev->resource[2].end = 0x177;
951 dev->resource[2].flags = LEGACY_IO_RESOURCE;
952 dev->resource[3].start = 0x376;
953 dev->resource[3].end = 0x376;
954 dev->resource[3].flags = LEGACY_IO_RESOURCE;
Alan Cox368c73d2006-10-04 00:41:26 +0100955 }
956 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700957 break;
958
959 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
960 if (class != PCI_CLASS_BRIDGE_PCI)
961 goto bad;
962 /* The PCI-to-PCI bridge spec requires that subtractive
963 decoding (i.e. transparent) bridge must have programming
964 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -0800965 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700966 dev->transparent = ((dev->class & 0xff) == 1);
967 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -0700968 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -0500969 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
970 if (pos) {
971 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
972 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
973 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700974 break;
975
976 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
977 if (class != PCI_CLASS_BRIDGE_CARDBUS)
978 goto bad;
979 pci_read_irq(dev);
980 pci_read_bases(dev, 1, 0);
981 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
982 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
983 break;
984
985 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600986 dev_err(&dev->dev, "unknown header type %02x, "
987 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +0800988 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700989
990 bad:
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600991 dev_err(&dev->dev, "ignoring class %02x (doesn't match header "
992 "type %02x)\n", class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700993 dev->class = PCI_CLASS_NOT_DEFINED;
994 }
995
996 /* We found a fine healthy device, go go go... */
997 return 0;
998}
999
Zhao, Yu201de562008-10-13 19:49:55 +08001000static void pci_release_capabilities(struct pci_dev *dev)
1001{
1002 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001003 pci_iov_release(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001004}
1005
Linus Torvalds1da177e2005-04-16 15:20:36 -07001006/**
1007 * pci_release_dev - free a pci device structure when all users of it are finished.
1008 * @dev: device that's been disconnected
1009 *
1010 * Will be called only by the device core when all users of this pci device are
1011 * done.
1012 */
1013static void pci_release_dev(struct device *dev)
1014{
1015 struct pci_dev *pci_dev;
1016
1017 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001018 pci_release_capabilities(pci_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001019 kfree(pci_dev);
1020}
1021
1022/**
1023 * pci_cfg_space_size - get the configuration space size of the PCI device.
Randy Dunlap8f7020d2005-10-23 11:57:38 -07001024 * @dev: PCI device
Linus Torvalds1da177e2005-04-16 15:20:36 -07001025 *
1026 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1027 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1028 * access it. Maybe we don't have a way to generate extended config space
1029 * accesses, or the device is behind a reverse Express bridge. So we try
1030 * reading the dword at 0x100 which must either be 0 or a valid extended
1031 * capability header.
1032 */
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001033int pci_cfg_space_size_ext(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001034{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001035 u32 status;
Zhao, Yu557848c2008-10-13 19:18:07 +08001036 int pos = PCI_CFG_SPACE_SIZE;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001037
Zhao, Yu557848c2008-10-13 19:18:07 +08001038 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001039 goto fail;
1040 if (status == 0xffffffff)
1041 goto fail;
1042
1043 return PCI_CFG_SPACE_EXP_SIZE;
1044
1045 fail:
1046 return PCI_CFG_SPACE_SIZE;
1047}
1048
Yinghai Lu57741a72008-02-15 01:32:50 -08001049int pci_cfg_space_size(struct pci_dev *dev)
1050{
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001051 int pos;
1052 u32 status;
Yinghai Ludfadd9ed2009-03-08 21:35:37 -07001053 u16 class;
1054
1055 class = dev->class >> 8;
1056 if (class == PCI_CLASS_BRIDGE_HOST)
1057 return pci_cfg_space_size_ext(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001058
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +09001059 pos = pci_pcie_cap(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001060 if (!pos) {
1061 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1062 if (!pos)
1063 goto fail;
1064
1065 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1066 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1067 goto fail;
1068 }
1069
1070 return pci_cfg_space_size_ext(dev);
1071
1072 fail:
1073 return PCI_CFG_SPACE_SIZE;
Yinghai Lu57741a72008-02-15 01:32:50 -08001074}
1075
Linus Torvalds1da177e2005-04-16 15:20:36 -07001076static void pci_release_bus_bridge_dev(struct device *dev)
1077{
1078 kfree(dev);
1079}
1080
Michael Ellerman65891212007-04-05 17:19:08 +10001081struct pci_dev *alloc_pci_dev(void)
1082{
1083 struct pci_dev *dev;
1084
1085 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1086 if (!dev)
1087 return NULL;
1088
Michael Ellerman65891212007-04-05 17:19:08 +10001089 INIT_LIST_HEAD(&dev->bus_list);
1090
1091 return dev;
1092}
1093EXPORT_SYMBOL(alloc_pci_dev);
1094
Linus Torvalds1da177e2005-04-16 15:20:36 -07001095/*
1096 * Read the config data for a PCI device, sanity-check it
1097 * and fill in the dev structure...
1098 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001099static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001100{
1101 struct pci_dev *dev;
1102 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001103 int delay = 1;
1104
1105 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l))
1106 return NULL;
1107
1108 /* some broken boards return 0 or ~0 if a slot is empty: */
1109 if (l == 0xffffffff || l == 0x00000000 ||
1110 l == 0x0000ffff || l == 0xffff0000)
1111 return NULL;
1112
1113 /* Configuration request Retry Status */
1114 while (l == 0xffff0001) {
1115 msleep(delay);
1116 delay *= 2;
1117 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l))
1118 return NULL;
1119 /* Card hasn't responded in 60 seconds? Must be stuck. */
1120 if (delay > 60 * 1000) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001121 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
Linus Torvalds1da177e2005-04-16 15:20:36 -07001122 "responding\n", pci_domain_nr(bus),
1123 bus->number, PCI_SLOT(devfn),
1124 PCI_FUNC(devfn));
1125 return NULL;
1126 }
1127 }
1128
Michael Ellermanbab41e92007-04-05 17:19:09 +10001129 dev = alloc_pci_dev();
Linus Torvalds1da177e2005-04-16 15:20:36 -07001130 if (!dev)
1131 return NULL;
1132
Linus Torvalds1da177e2005-04-16 15:20:36 -07001133 dev->bus = bus;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001134 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001135 dev->vendor = l & 0xffff;
1136 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001137
Yu Zhao480b93b2009-03-20 11:25:14 +08001138 if (pci_setup_device(dev)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001139 kfree(dev);
1140 return NULL;
1141 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001142
1143 return dev;
1144}
1145
Zhao, Yu201de562008-10-13 19:49:55 +08001146static void pci_init_capabilities(struct pci_dev *dev)
1147{
1148 /* MSI/MSI-X list */
1149 pci_msi_init_pci_dev(dev);
1150
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001151 /* Buffers for saving PCIe and PCI-X capabilities */
1152 pci_allocate_cap_save_buffers(dev);
1153
Zhao, Yu201de562008-10-13 19:49:55 +08001154 /* Power Management */
1155 pci_pm_init(dev);
Jesse Barneseb9c39d2008-12-17 12:10:05 -08001156 platform_pci_wakeup_init(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001157
1158 /* Vital Product Data */
1159 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001160
1161 /* Alternative Routing-ID Forwarding */
1162 pci_enable_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001163
1164 /* Single Root I/O Virtualization */
1165 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001166
1167 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001168 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001169}
1170
Sam Ravnborg96bde062007-03-26 21:53:30 -08001171void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001172{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001173 device_initialize(&dev->dev);
1174 dev->dev.release = pci_release_dev;
1175 pci_dev_get(dev);
1176
Linus Torvalds1da177e2005-04-16 15:20:36 -07001177 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001178 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001179 dev->dev.coherent_dma_mask = 0xffffffffull;
1180
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001181 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001182 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001183
Linus Torvalds1da177e2005-04-16 15:20:36 -07001184 /* Fix up broken headers */
1185 pci_fixup_device(pci_fixup_header, dev);
1186
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001187 /* Clear the state_saved flag. */
1188 dev->state_saved = false;
1189
Zhao, Yu201de562008-10-13 19:49:55 +08001190 /* Initialize various capabilities */
1191 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001192
Linus Torvalds1da177e2005-04-16 15:20:36 -07001193 /*
1194 * Add the device to our list of discovered devices
1195 * and the bus list for fixup functions, etc.
1196 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001197 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001198 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001199 up_write(&pci_bus_sem);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001200}
1201
Sam Ravnborg451124a2008-02-02 22:33:43 +01001202struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001203{
1204 struct pci_dev *dev;
1205
Trent Piepho90bdb312009-03-20 14:56:00 -06001206 dev = pci_get_slot(bus, devfn);
1207 if (dev) {
1208 pci_dev_put(dev);
1209 return dev;
1210 }
1211
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001212 dev = pci_scan_device(bus, devfn);
1213 if (!dev)
1214 return NULL;
1215
1216 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001217
1218 return dev;
1219}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001220EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001221
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001222static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn)
1223{
1224 u16 cap;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001225 unsigned pos, next_fn;
1226
1227 if (!dev)
1228 return 0;
1229
1230 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001231 if (!pos)
1232 return 0;
1233 pci_read_config_word(dev, pos + 4, &cap);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001234 next_fn = cap >> 8;
1235 if (next_fn <= fn)
1236 return 0;
1237 return next_fn;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001238}
1239
1240static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn)
1241{
1242 return (fn + 1) % 8;
1243}
1244
1245static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
1246{
1247 return 0;
1248}
1249
1250static int only_one_child(struct pci_bus *bus)
1251{
1252 struct pci_dev *parent = bus->self;
1253 if (!parent || !pci_is_pcie(parent))
1254 return 0;
1255 if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
1256 parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
1257 return 1;
1258 return 0;
1259}
1260
Linus Torvalds1da177e2005-04-16 15:20:36 -07001261/**
1262 * pci_scan_slot - scan a PCI slot on a bus for devices.
1263 * @bus: PCI bus to scan
1264 * @devfn: slot number to scan (must have zero function.)
1265 *
1266 * Scan a PCI slot on the specified PCI bus for devices, adding
1267 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001268 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001269 *
1270 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001271 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001272int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001273{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001274 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001275 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001276 unsigned (*next_fn)(struct pci_dev *, unsigned) = no_next_fn;
1277
1278 if (only_one_child(bus) && (devfn > 0))
1279 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001280
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001281 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001282 if (!dev)
1283 return 0;
1284 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001285 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001286
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001287 if (pci_ari_enabled(bus))
1288 next_fn = next_ari_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001289 else if (dev->multifunction)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001290 next_fn = next_trad_fn;
1291
1292 for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {
1293 dev = pci_scan_single_device(bus, devfn + fn);
1294 if (dev) {
1295 if (!dev->is_added)
1296 nr++;
1297 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001298 }
1299 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001300
Shaohua Li149e1632008-07-23 10:32:31 +08001301 /* only one slot has pcie device */
1302 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001303 pcie_aspm_init_link_state(bus->self);
1304
Linus Torvalds1da177e2005-04-16 15:20:36 -07001305 return nr;
1306}
1307
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001308unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001309{
1310 unsigned int devfn, pass, max = bus->secondary;
1311 struct pci_dev *dev;
1312
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001313 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001314
1315 /* Go find them, Rover! */
1316 for (devfn = 0; devfn < 0x100; devfn += 8)
1317 pci_scan_slot(bus, devfn);
1318
Yu Zhaoa28724b2009-03-20 11:25:13 +08001319 /* Reserve buses for SR-IOV capability. */
1320 max += pci_iov_bus_range(bus);
1321
Linus Torvalds1da177e2005-04-16 15:20:36 -07001322 /*
1323 * After performing arch-dependent fixup of the bus, look behind
1324 * all PCI-to-PCI bridges on this bus.
1325 */
Alex Chiang74710de2009-03-20 14:56:10 -06001326 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001327 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001328 pcibios_fixup_bus(bus);
1329 if (pci_is_root_bus(bus))
1330 bus->is_added = 1;
1331 }
1332
Linus Torvalds1da177e2005-04-16 15:20:36 -07001333 for (pass=0; pass < 2; pass++)
1334 list_for_each_entry(dev, &bus->devices, bus_list) {
1335 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1336 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1337 max = pci_scan_bridge(bus, dev, max, pass);
1338 }
1339
1340 /*
1341 * We've scanned the bus and so we know all about what's on
1342 * the other side of any bridges that may be on this bus plus
1343 * any devices.
1344 *
1345 * Return how far we've got finding sub-buses.
1346 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001347 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001348 return max;
1349}
1350
Sam Ravnborg96bde062007-03-26 21:53:30 -08001351struct pci_bus * pci_create_bus(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001352 int bus, struct pci_ops *ops, void *sysdata)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001353{
1354 int error;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001355 struct pci_bus *b, *b2;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001356 struct device *dev;
1357
1358 b = pci_alloc_bus();
1359 if (!b)
1360 return NULL;
1361
Geert Uytterhoeven6a3b3e22009-03-15 20:14:37 +01001362 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001363 if (!dev){
1364 kfree(b);
1365 return NULL;
1366 }
1367
1368 b->sysdata = sysdata;
1369 b->ops = ops;
1370
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001371 b2 = pci_find_bus(pci_domain_nr(b), bus);
1372 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001373 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001374 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001375 goto err_out;
1376 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001377
1378 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001379 list_add_tail(&b->node, &pci_root_buses);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001380 up_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001381
Linus Torvalds1da177e2005-04-16 15:20:36 -07001382 dev->parent = parent;
1383 dev->release = pci_release_bus_bridge_dev;
Kay Sievers1a927132008-10-30 02:17:49 +01001384 dev_set_name(dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001385 error = device_register(dev);
1386 if (error)
1387 goto dev_reg_err;
1388 b->bridge = get_device(dev);
1389
Yinghai Lu0d358f22008-02-19 03:20:41 -08001390 if (!parent)
1391 set_dev_node(b->bridge, pcibus_to_node(b));
1392
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001393 b->dev.class = &pcibus_class;
1394 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001395 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001396 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001397 if (error)
1398 goto class_dev_reg_err;
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001399 error = device_create_file(&b->dev, &dev_attr_cpuaffinity);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001400 if (error)
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001401 goto dev_create_file_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001402
1403 /* Create legacy_io and legacy_mem files for this bus */
1404 pci_create_legacy_files(b);
1405
Linus Torvalds1da177e2005-04-16 15:20:36 -07001406 b->number = b->secondary = bus;
1407 b->resource[0] = &ioport_resource;
1408 b->resource[1] = &iomem_resource;
1409
Linus Torvalds1da177e2005-04-16 15:20:36 -07001410 return b;
1411
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001412dev_create_file_err:
1413 device_unregister(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001414class_dev_reg_err:
1415 device_unregister(dev);
1416dev_reg_err:
Zhang Yanmind71374d2006-06-02 12:35:43 +08001417 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001418 list_del(&b->node);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001419 up_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001420err_out:
1421 kfree(dev);
1422 kfree(b);
1423 return NULL;
1424}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001425
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001426struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001427 int bus, struct pci_ops *ops, void *sysdata)
1428{
1429 struct pci_bus *b;
1430
1431 b = pci_create_bus(parent, bus, ops, sysdata);
1432 if (b)
1433 b->subordinate = pci_scan_child_bus(b);
1434 return b;
1435}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001436EXPORT_SYMBOL(pci_scan_bus_parented);
1437
1438#ifdef CONFIG_HOTPLUG
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001439/**
1440 * pci_rescan_bus - scan a PCI bus for devices.
1441 * @bus: PCI bus to scan
1442 *
1443 * Scan a PCI bus and child buses for new devices, adds them,
1444 * and enables them.
1445 *
1446 * Returns the max number of subordinate bus discovered.
1447 */
Alex Chiang5446a6b2009-04-01 18:24:12 -06001448unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001449{
1450 unsigned int max;
1451 struct pci_dev *dev;
1452
1453 max = pci_scan_child_bus(bus);
1454
Alex Chiang705b1aa2009-03-20 14:56:31 -06001455 down_read(&pci_bus_sem);
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001456 list_for_each_entry(dev, &bus->devices, bus_list)
1457 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1458 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1459 if (dev->subordinate)
1460 pci_bus_size_bridges(dev->subordinate);
Alex Chiang705b1aa2009-03-20 14:56:31 -06001461 up_read(&pci_bus_sem);
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001462
1463 pci_bus_assign_resources(bus);
1464 pci_enable_bridges(bus);
1465 pci_bus_add_devices(bus);
1466
1467 return max;
1468}
1469EXPORT_SYMBOL_GPL(pci_rescan_bus);
1470
Linus Torvalds1da177e2005-04-16 15:20:36 -07001471EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001472EXPORT_SYMBOL(pci_scan_slot);
1473EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001474EXPORT_SYMBOL_GPL(pci_scan_child_bus);
1475#endif
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001476
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001477static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001478{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001479 const struct pci_dev *a = to_pci_dev(d_a);
1480 const struct pci_dev *b = to_pci_dev(d_b);
1481
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001482 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1483 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1484
1485 if (a->bus->number < b->bus->number) return -1;
1486 else if (a->bus->number > b->bus->number) return 1;
1487
1488 if (a->devfn < b->devfn) return -1;
1489 else if (a->devfn > b->devfn) return 1;
1490
1491 return 0;
1492}
1493
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08001494void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001495{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001496 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001497}