PCI: Add devm_request_pci_bus_resources()
Several host bridge drivers iterate through the list of bridge windows to request resources. Several others don't request the window resources at all. Add a devm_request_pci_bus_resources() interface to make it easier for drivers to request all the window resources. Export to GPL modules (from Arnd Bergmann <arnd@arndb.de>). Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
1a695a905c
commit
950334bcf1
|
@ -91,6 +91,35 @@ void pci_bus_remove_resources(struct pci_bus *bus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int devm_request_pci_bus_resources(struct device *dev,
|
||||||
|
struct list_head *resources)
|
||||||
|
{
|
||||||
|
struct resource_entry *win;
|
||||||
|
struct resource *parent, *res;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
resource_list_for_each_entry(win, resources) {
|
||||||
|
res = win->res;
|
||||||
|
switch (resource_type(res)) {
|
||||||
|
case IORESOURCE_IO:
|
||||||
|
parent = &ioport_resource;
|
||||||
|
break;
|
||||||
|
case IORESOURCE_MEM:
|
||||||
|
parent = &iomem_resource;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = devm_request_resource(dev, parent, res);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devm_request_pci_bus_resources);
|
||||||
|
|
||||||
static struct pci_bus_region pci_32_bit = {0, 0xffffffffULL};
|
static struct pci_bus_region pci_32_bit = {0, 0xffffffffULL};
|
||||||
#ifdef CONFIG_PCI_BUS_ADDR_T_64BIT
|
#ifdef CONFIG_PCI_BUS_ADDR_T_64BIT
|
||||||
static struct pci_bus_region pci_64_bit = {0,
|
static struct pci_bus_region pci_64_bit = {0,
|
||||||
|
@ -397,4 +426,3 @@ void pci_bus_put(struct pci_bus *bus)
|
||||||
put_device(&bus->dev);
|
put_device(&bus->dev);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_bus_put);
|
EXPORT_SYMBOL(pci_bus_put);
|
||||||
|
|
||||||
|
|
|
@ -1143,9 +1143,12 @@ void pci_add_resource(struct list_head *resources, struct resource *res);
|
||||||
void pci_add_resource_offset(struct list_head *resources, struct resource *res,
|
void pci_add_resource_offset(struct list_head *resources, struct resource *res,
|
||||||
resource_size_t offset);
|
resource_size_t offset);
|
||||||
void pci_free_resource_list(struct list_head *resources);
|
void pci_free_resource_list(struct list_head *resources);
|
||||||
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
|
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
|
||||||
|
unsigned int flags);
|
||||||
struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
|
struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
|
||||||
void pci_bus_remove_resources(struct pci_bus *bus);
|
void pci_bus_remove_resources(struct pci_bus *bus);
|
||||||
|
int devm_request_pci_bus_resources(struct device *dev,
|
||||||
|
struct list_head *resources);
|
||||||
|
|
||||||
#define pci_bus_for_each_resource(bus, res, i) \
|
#define pci_bus_for_each_resource(bus, res, i) \
|
||||||
for (i = 0; \
|
for (i = 0; \
|
||||||
|
|
Loading…
Reference in New Issue