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