1 /* 2 * ppc64 "iomap" interface implementation. 3 * 4 * (C) Copyright 2004 Linus Torvalds 5 */ 6 #include <linux/pci.h> 7 #include <linux/mm.h> 8 #include <linux/export.h> 9 #include <asm/io.h> 10 #include <asm/pci-bridge.h> 11 12 /* 13 * Here comes the ppc64 implementation of the IOMAP 14 * interfaces. 15 */ 16 unsigned int ioread8(void __iomem *addr) 17 { 18 return readb(addr); 19 } 20 unsigned int ioread16(void __iomem *addr) 21 { 22 return readw(addr); 23 } 24 unsigned int ioread16be(void __iomem *addr) 25 { 26 return readw_be(addr); 27 } 28 unsigned int ioread32(void __iomem *addr) 29 { 30 return readl(addr); 31 } 32 unsigned int ioread32be(void __iomem *addr) 33 { 34 return readl_be(addr); 35 } 36 EXPORT_SYMBOL(ioread8); 37 EXPORT_SYMBOL(ioread16); 38 EXPORT_SYMBOL(ioread16be); 39 EXPORT_SYMBOL(ioread32); 40 EXPORT_SYMBOL(ioread32be); 41 42 void iowrite8(u8 val, void __iomem *addr) 43 { 44 writeb(val, addr); 45 } 46 void iowrite16(u16 val, void __iomem *addr) 47 { 48 writew(val, addr); 49 } 50 void iowrite16be(u16 val, void __iomem *addr) 51 { 52 writew_be(val, addr); 53 } 54 void iowrite32(u32 val, void __iomem *addr) 55 { 56 writel(val, addr); 57 } 58 void iowrite32be(u32 val, void __iomem *addr) 59 { 60 writel_be(val, addr); 61 } 62 EXPORT_SYMBOL(iowrite8); 63 EXPORT_SYMBOL(iowrite16); 64 EXPORT_SYMBOL(iowrite16be); 65 EXPORT_SYMBOL(iowrite32); 66 EXPORT_SYMBOL(iowrite32be); 67 68 /* 69 * These are the "repeat read/write" functions. Note the 70 * non-CPU byte order. We do things in "IO byteorder" 71 * here. 72 * 73 * FIXME! We could make these do EEH handling if we really 74 * wanted. Not clear if we do. 75 */ 76 void ioread8_rep(void __iomem *addr, void *dst, unsigned long count) 77 { 78 readsb(addr, dst, count); 79 } 80 void ioread16_rep(void __iomem *addr, void *dst, unsigned long count) 81 { 82 readsw(addr, dst, count); 83 } 84 void ioread32_rep(void __iomem *addr, void *dst, unsigned long count) 85 { 86 readsl(addr, dst, count); 87 } 88 EXPORT_SYMBOL(ioread8_rep); 89 EXPORT_SYMBOL(ioread16_rep); 90 EXPORT_SYMBOL(ioread32_rep); 91 92 void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count) 93 { 94 writesb(addr, src, count); 95 } 96 void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count) 97 { 98 writesw(addr, src, count); 99 } 100 void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count) 101 { 102 writesl(addr, src, count); 103 } 104 EXPORT_SYMBOL(iowrite8_rep); 105 EXPORT_SYMBOL(iowrite16_rep); 106 EXPORT_SYMBOL(iowrite32_rep); 107 108 void __iomem *ioport_map(unsigned long port, unsigned int len) 109 { 110 return (void __iomem *) (port + _IO_BASE); 111 } 112 113 void ioport_unmap(void __iomem *addr) 114 { 115 /* Nothing to do */ 116 } 117 EXPORT_SYMBOL(ioport_map); 118 EXPORT_SYMBOL(ioport_unmap); 119 120 #ifdef CONFIG_PCI 121 void pci_iounmap(struct pci_dev *dev, void __iomem *addr) 122 { 123 if (isa_vaddr_is_ioport(addr)) 124 return; 125 if (pcibios_vaddr_is_ioport(addr)) 126 return; 127 iounmap(addr); 128 } 129 130 EXPORT_SYMBOL(pci_iounmap); 131 #endif /* CONFIG_PCI */ 132