aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-03-09 05:45:58 -0500
committerJeff Garzik <jeff@garzik.org>2007-04-28 14:15:58 -0400
commitec04b075843d12b5115267415d0426b48e672136 (patch)
treeeddd8a861eb0fd1c455c6a7f042a667bafb45af5
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>
-rw-r--r--include/linux/pci.h1
-rw-r--r--lib/devres.c26
2 files changed, 27 insertions, 0 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h
index a3ad76221c6f..972491089ac9 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -838,6 +838,7 @@ void __iomem * pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
838void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); 838void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
839void __iomem * const * pcim_iomap_table(struct pci_dev *pdev); 839void __iomem * const * pcim_iomap_table(struct pci_dev *pdev);
840int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name); 840int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
841void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
841 842
842extern int pci_pci_problems; 843extern int pci_pci_problems;
843#define PCIPCI_FAIL 1 /* No PCI PCI DMA */ 844#define PCIPCI_FAIL 1 /* No PCI PCI DMA */
diff --git a/lib/devres.c b/lib/devres.c
index eb38849aa717..b1d336ce7f3d 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)
296 return rc; 296 return rc;
297} 297}
298EXPORT_SYMBOL(pcim_iomap_regions); 298EXPORT_SYMBOL(pcim_iomap_regions);
299
300/**
301 * pcim_iounmap_regions - Unmap and release PCI BARs
302 * @pdev: PCI device to map IO resources for
303 * @mask: Mask of BARs to unmap and release
304 *
305 * Unamp and release regions specified by @mask.
306 */
307void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask)
308{
309 void __iomem * const *iomap;
310 int i;
311
312 iomap = pcim_iomap_table(pdev);
313 if (!iomap)
314 return;
315
316 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
317 if (!(mask & (1 << i)))
318 continue;
319
320 pcim_iounmap(pdev, iomap[i]);
321 pci_release_region(pdev, i);
322 }
323}
324EXPORT_SYMBOL(pcim_iounmap_regions);
299#endif 325#endif
300#endif 326#endif