X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fpnp%2Fsystem.c;h=9c2496dbeee45d0042ff3d814402a212b5f22d9b;hb=4039feb5bae72a5fed9ba6bc1a9cfd8dfe0a8613;hp=a06f980b3ac9b596ef886b08a908602c79ec270f;hpb=195be1c2086929efe1ca315e23f031f06e086369;p=linux-2.6-omap-h63xx.git diff --git a/drivers/pnp/system.c b/drivers/pnp/system.c index a06f980b3ac..9c2496dbeee 100644 --- a/drivers/pnp/system.c +++ b/drivers/pnp/system.c @@ -22,45 +22,49 @@ static const struct pnp_device_id pnp_dev_table[] = { {"", 0} }; -static void reserve_range(const char *pnpid, resource_size_t start, +static void reserve_range(struct pnp_dev *dev, resource_size_t start, resource_size_t end, int port) { - struct resource *res; char *regionid; + const char *pnpid = dev->dev.bus_id; + struct resource *res; regionid = kmalloc(16, GFP_KERNEL); - if (regionid == NULL) + if (!regionid) return; + snprintf(regionid, 16, "pnp %s", pnpid); if (port) res = request_region(start, end - start + 1, regionid); else res = request_mem_region(start, end - start + 1, regionid); - if (res == NULL) - kfree(regionid); - else + if (res) res->flags &= ~IORESOURCE_BUSY; + else + kfree(regionid); + /* * Failures at this point are usually harmless. pci quirks for * example do reserve stuff they know about too, so we may well * have double reservations. */ - printk(KERN_INFO "pnp: %s: %s range 0x%llx-0x%llx %s reserved\n", - pnpid, port ? "ioport" : "iomem", - (unsigned long long)start, (unsigned long long)end, - NULL != res ? "has been" : "could not be"); + dev_info(&dev->dev, "%s range 0x%llx-0x%llx %s reserved\n", + port ? "ioport" : "iomem", + (unsigned long long) start, (unsigned long long) end, + res ? "has been" : "could not be"); } -static void reserve_resources_of_dev(const struct pnp_dev *dev) +static void reserve_resources_of_dev(struct pnp_dev *dev) { + struct resource *res; int i; - for (i = 0; i < PNP_MAX_PORT; i++) { - if (!pnp_port_valid(dev, i)) + for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) { + if (res->flags & IORESOURCE_UNSET) continue; - if (pnp_port_start(dev, i) == 0) + if (res->start == 0) continue; /* disabled */ - if (pnp_port_start(dev, i) < 0x100) + if (res->start < 0x100) /* * Below 0x100 is only standard PC hardware * (pics, kbd, timer, dma, ...) @@ -70,19 +74,17 @@ static void reserve_resources_of_dev(const struct pnp_dev *dev) * So, do nothing */ continue; - if (pnp_port_end(dev, i) < pnp_port_start(dev, i)) + if (res->end < res->start) continue; /* invalid */ - reserve_range(dev->dev.bus_id, pnp_port_start(dev, i), - pnp_port_end(dev, i), 1); + reserve_range(dev, res->start, res->end, 1); } - for (i = 0; i < PNP_MAX_MEM; i++) { - if (!pnp_mem_valid(dev, i)) + for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) { + if (res->flags & IORESOURCE_UNSET) continue; - reserve_range(dev->dev.bus_id, pnp_mem_start(dev, i), - pnp_mem_end(dev, i), 0); + reserve_range(dev, res->start, res->end, 0); } }