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 11/* 12 * Here comes the ppc64 implementation of the IOMAP 13 * interfaces. 14 */ 15unsigned int ioread8(void __iomem *addr) 16{ 17 return readb(addr); 18} 19unsigned int ioread16(void __iomem *addr) 20{ 21 return readw(addr); 22} 23unsigned int ioread16be(void __iomem *addr) 24{ 25 return in_be16(addr); 26} 27unsigned int ioread32(void __iomem *addr) 28{ 29 return readl(addr); 30} 31unsigned int ioread32be(void __iomem *addr) 32{ 33 return in_be32(addr); 34} 35EXPORT_SYMBOL(ioread8); 36EXPORT_SYMBOL(ioread16); 37EXPORT_SYMBOL(ioread16be); 38EXPORT_SYMBOL(ioread32); 39EXPORT_SYMBOL(ioread32be); 40 41void iowrite8(u8 val, void __iomem *addr) 42{ 43 writeb(val, addr); 44} 45void iowrite16(u16 val, void __iomem *addr) 46{ 47 writew(val, addr); 48} 49void iowrite16be(u16 val, void __iomem *addr) 50{ 51 out_be16(addr, val); 52} 53void iowrite32(u32 val, void __iomem *addr) 54{ 55 writel(val, addr); 56} 57void iowrite32be(u32 val, void __iomem *addr) 58{ 59 out_be32(addr, val); 60} 61EXPORT_SYMBOL(iowrite8); 62EXPORT_SYMBOL(iowrite16); 63EXPORT_SYMBOL(iowrite16be); 64EXPORT_SYMBOL(iowrite32); 65EXPORT_SYMBOL(iowrite32be); 66 67void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) 68{ 69 _insb((u8 __iomem *) addr, dst, count); 70} 71void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) 72{ 73 _insw_ns((u16 __iomem *) addr, dst, count); 74} 75void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) 76{ 77 _insl_ns((u32 __iomem *) addr, dst, count); 78} 79EXPORT_SYMBOL(ioread8_rep); 80EXPORT_SYMBOL(ioread16_rep); 81EXPORT_SYMBOL(ioread32_rep); 82 83void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count) 84{ 85 _outsb((u8 __iomem *) addr, src, count); 86} 87void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count) 88{ 89 _outsw_ns((u16 __iomem *) addr, src, count); 90} 91void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count) 92{ 93 _outsl_ns((u32 __iomem *) addr, src, count); 94} 95EXPORT_SYMBOL(iowrite8_rep); 96EXPORT_SYMBOL(iowrite16_rep); 97EXPORT_SYMBOL(iowrite32_rep); 98 99void __iomem *ioport_map(unsigned long port, unsigned int len) 100{ 101 return (void __iomem *) (port + _IO_BASE); 102} 103 104void ioport_unmap(void __iomem *addr) 105{ 106 /* Nothing to do */ 107} 108EXPORT_SYMBOL(ioport_map); 109EXPORT_SYMBOL(ioport_unmap); 110 111void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) 112{ 113 unsigned long start = pci_resource_start(dev, bar); 114 unsigned long len = pci_resource_len(dev, bar); 115 unsigned long flags = pci_resource_flags(dev, bar); 116 117 if (!len) 118 return NULL; 119 if (max && len > max) 120 len = max; 121 if (flags & IORESOURCE_IO) 122 return ioport_map(start, len); 123 if (flags & IORESOURCE_MEM) 124 return ioremap(start, len); 125 /* What? */ 126 return NULL; 127} 128 129void pci_iounmap(struct pci_dev *dev, void __iomem *addr) 130{ 131 /* Nothing to do */ 132} 133EXPORT_SYMBOL(pci_iomap); 134EXPORT_SYMBOL(pci_iounmap); 135