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