Commit | Line | Data |
---|---|---|
a6475c13 MS |
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> | |
66421a64 | 9 | #include <linux/export.h> |
a6475c13 MS |
10 | #include <asm/io.h> |
11 | #include <asm/pci-bridge.h> | |
12 | ||
13 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) | |
14 | { | |
15 | resource_size_t start = pci_resource_start(dev, bar); | |
16 | resource_size_t len = pci_resource_len(dev, bar); | |
17 | unsigned long flags = pci_resource_flags(dev, bar); | |
18 | ||
19 | if (!len) | |
20 | return NULL; | |
21 | if (max && len > max) | |
22 | len = max; | |
23 | if (flags & IORESOURCE_IO) | |
24 | return ioport_map(start, len); | |
25 | if (flags & IORESOURCE_MEM) | |
26 | return ioremap(start, len); | |
27 | /* What? */ | |
28 | return NULL; | |
29 | } | |
30 | EXPORT_SYMBOL(pci_iomap); | |
31 | ||
32 | void pci_iounmap(struct pci_dev *dev, void __iomem *addr) | |
33 | { | |
34 | if (isa_vaddr_is_ioport(addr)) | |
35 | return; | |
36 | if (pcibios_vaddr_is_ioport(addr)) | |
37 | return; | |
38 | iounmap(addr); | |
39 | } | |
40 | EXPORT_SYMBOL(pci_iounmap); |