diff options
-rw-r--r-- | include/linux/pci.h | 1 | ||||
-rw-r--r-- | lib/devres.c | 26 |
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); | |||
838 | void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); | 838 | void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); |
839 | void __iomem * const * pcim_iomap_table(struct pci_dev *pdev); | 839 | void __iomem * const * pcim_iomap_table(struct pci_dev *pdev); |
840 | int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name); | 840 | int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name); |
841 | void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask); | ||
841 | 842 | ||
842 | extern int pci_pci_problems; | 843 | extern 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 | } |
298 | EXPORT_SYMBOL(pcim_iomap_regions); | 298 | EXPORT_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 | */ | ||
307 | void 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 | } | ||
324 | EXPORT_SYMBOL(pcim_iounmap_regions); | ||
299 | #endif | 325 | #endif |
300 | #endif | 326 | #endif |