xref: /openbmc/linux/arch/microblaze/pci/iomap.c (revision baa7eb025ab14f3cba2e35c0a8648f9c9f01d24f)
1 /*
2  * ppc64 "iomap" interface implementation.
3  *
4  * (C) Copyright 2004 Linus Torvalds
5  */
6 #include <linux/init.h>
7 #include <linux/pci.h>
8 #include <linux/mm.h>
9 #include <asm/io.h>
10 #include <asm/pci-bridge.h>
11 
12 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
13 {
14 	resource_size_t start = pci_resource_start(dev, bar);
15 	resource_size_t len = pci_resource_len(dev, bar);
16 	unsigned long flags = pci_resource_flags(dev, bar);
17 
18 	if (!len)
19 		return NULL;
20 	if (max && len > max)
21 		len = max;
22 	if (flags & IORESOURCE_IO)
23 		return ioport_map(start, len);
24 	if (flags & IORESOURCE_MEM)
25 		return ioremap(start, len);
26 	/* What? */
27 	return NULL;
28 }
29 EXPORT_SYMBOL(pci_iomap);
30 
31 void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
32 {
33 	if (isa_vaddr_is_ioport(addr))
34 		return;
35 	if (pcibios_vaddr_is_ioport(addr))
36 		return;
37 	iounmap(addr);
38 }
39 EXPORT_SYMBOL(pci_iounmap);
40