xref: /linux/arch/arm/mm/iomap.c (revision f33c596a2f921696391801b637ed50d514634079)
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 #include <linux/io.h>
11 
12 unsigned long vga_base;
13 EXPORT_SYMBOL(vga_base);
14 
15 #ifdef __io
16 void __iomem *ioport_map(unsigned long port, unsigned int nr)
17 {
18 	return __io(port);
19 }
20 EXPORT_SYMBOL(ioport_map);
21 
22 void ioport_unmap(void __iomem *addr)
23 {
24 }
25 EXPORT_SYMBOL(ioport_unmap);
26 #endif
27 
28 #ifdef CONFIG_PCI
29 unsigned long pcibios_min_io = 0x1000;
30 EXPORT_SYMBOL(pcibios_min_io);
31 
32 unsigned long pcibios_min_mem = 0x01000000;
33 EXPORT_SYMBOL(pcibios_min_mem);
34 
35 unsigned int pci_flags = PCI_REASSIGN_ALL_RSRC;
36 EXPORT_SYMBOL(pci_flags);
37 
38 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
39 {
40 	resource_size_t start = pci_resource_start(dev, bar);
41 	resource_size_t len   = pci_resource_len(dev, bar);
42 	unsigned long flags = pci_resource_flags(dev, bar);
43 
44 	if (!len || !start)
45 		return NULL;
46 	if (maxlen && len > maxlen)
47 		len = maxlen;
48 	if (flags & IORESOURCE_IO)
49 		return ioport_map(start, len);
50 	if (flags & IORESOURCE_MEM) {
51 		if (flags & IORESOURCE_CACHEABLE)
52 			return ioremap(start, len);
53 		return ioremap_nocache(start, len);
54 	}
55 	return NULL;
56 }
57 EXPORT_SYMBOL(pci_iomap);
58 
59 void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
60 {
61 	if ((unsigned long)addr >= VMALLOC_START &&
62 	    (unsigned long)addr < VMALLOC_END)
63 		iounmap(addr);
64 }
65 EXPORT_SYMBOL(pci_iounmap);
66 #endif
67