summaryrefslogtreecommitdiff
path: root/lib/devres.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-03-09 19:45:58 +0900
committerJeff Garzik <jeff@garzik.org>2007-04-28 14:15:58 -0400
commitec04b075843d12b5115267415d0426b48e672136 (patch)
treeeddd8a861eb0fd1c455c6a7f042a667bafb45af5 /lib/devres.c
parenta73984a0d5664fa1bfdd9f0a475b8d74af7f44a6 (diff)
iomap: implement pcim_iounmap_regions()
Implement pcim_iounmap_regions() - the opposite of pcim_iomap_regions(). Signed-off-by: Tejun heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'lib/devres.c')
-rw-r--r--lib/devres.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/devres.c b/lib/devres.c
index eb38849aa71..b1d336ce7f3 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -296,5 +296,31 @@ int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name)
return rc;
}
EXPORT_SYMBOL(pcim_iomap_regions);
+
+/**
+ * pcim_iounmap_regions - Unmap and release PCI BARs
+ * @pdev: PCI device to map IO resources for
+ * @mask: Mask of BARs to unmap and release
+ *
+ * Unamp and release regions specified by @mask.
+ */
+void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask)
+{
+ void __iomem * const *iomap;
+ int i;
+
+ iomap = pcim_iomap_table(pdev);
+ if (!iomap)
+ return;
+
+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
+ if (!(mask & (1 << i)))
+ continue;
+
+ pcim_iounmap(pdev, iomap[i]);
+ pci_release_region(pdev, i);
+ }
+}
+EXPORT_SYMBOL(pcim_iounmap_regions);
#endif
#endif