1 /* 2 * linux/arch/arm/mm/iomap.c 3 * 4 * Map IO port and PCI memory spaces so that {read,write}[bwl] can 5 * be used to access this memory. 6 */ 7 #include <linux/module.h> 8 #include <linux/pci.h> 9 #include <linux/ioport.h> 10 11 #include <asm/io.h> 12 13 #ifdef __io 14 void __iomem *ioport_map(unsigned long port, unsigned int nr) 15 { 16 return __io(port); 17 } 18 EXPORT_SYMBOL(ioport_map); 19 20 void ioport_unmap(void __iomem *addr) 21 { 22 } 23 EXPORT_SYMBOL(ioport_unmap); 24 #endif 25 26 #ifdef CONFIG_PCI 27 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 28 { 29 unsigned long start = pci_resource_start(dev, bar); 30 unsigned long len = pci_resource_len(dev, bar); 31 unsigned long flags = pci_resource_flags(dev, bar); 32 33 if (!len || !start) 34 return NULL; 35 if (maxlen && len > maxlen) 36 len = maxlen; 37 if (flags & IORESOURCE_IO) 38 return ioport_map(start, len); 39 if (flags & IORESOURCE_MEM) { 40 if (flags & IORESOURCE_CACHEABLE) 41 return ioremap(start, len); 42 return ioremap_nocache(start, len); 43 } 44 return NULL; 45 } 46 EXPORT_SYMBOL(pci_iomap); 47 48 void pci_iounmap(struct pci_dev *dev, void __iomem *addr) 49 { 50 if ((unsigned long)addr >= VMALLOC_START && 51 (unsigned long)addr < VMALLOC_END) 52 iounmap(addr); 53 } 54 EXPORT_SYMBOL(pci_iounmap); 55 #endif 56