diff options
author | Yinghai Lu <yinghai@kernel.org> | 2012-05-17 18:51:11 -0700 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-06-13 15:42:22 -0600 |
commit | 5cc62c202211096ec26309722ec27455d52c8726 (patch) | |
tree | 10813ef6be2b7bbb176cc37d3127704586e448f6 /drivers/pci/probe.c | |
parent | 3527ed81ca01bbaf09df952e68528377a9cd092f (diff) |
PCI: build a bus number resource tree for every domain
This adds get_pci_domain_busn_res(), which returns the root of the
bus number resource tree for a domain, creating it if necessary.
We will later populate the tree with the bus numbers used by host
bridges and P2P bridges in the domain.
[bhelgaas: changelog]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/probe.c')
-rw-r--r-- | drivers/pci/probe.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 651b096134d..674a477a648 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -20,6 +20,36 @@ LIST_HEAD(pci_root_buses); EXPORT_SYMBOL(pci_root_buses); +static LIST_HEAD(pci_domain_busn_res_list); + +struct pci_domain_busn_res { + struct list_head list; + struct resource res; + int domain_nr; +}; + +static struct resource *get_pci_domain_busn_res(int domain_nr) +{ + struct pci_domain_busn_res *r; + + list_for_each_entry(r, &pci_domain_busn_res_list, list) + if (r->domain_nr == domain_nr) + return &r->res; + + r = kzalloc(sizeof(*r), GFP_KERNEL); + if (!r) + return NULL; + + r->domain_nr = domain_nr; + r->res.start = 0; + r->res.end = 0xff; + r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED; + + list_add_tail(&r->list, &pci_domain_busn_res_list); + + return &r->res; +} + static int find_anything(struct device *dev, void *data) { return 1; |