iomap.c (3233B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * arch/sh/kernel/iomap.c 4 * 5 * Copyright (C) 2000 Niibe Yutaka 6 * Copyright (C) 2005 - 2007 Paul Mundt 7 */ 8#include <linux/module.h> 9#include <linux/io.h> 10 11unsigned int ioread8(const void __iomem *addr) 12{ 13 return readb(addr); 14} 15EXPORT_SYMBOL(ioread8); 16 17unsigned int ioread16(const void __iomem *addr) 18{ 19 return readw(addr); 20} 21EXPORT_SYMBOL(ioread16); 22 23unsigned int ioread16be(const void __iomem *addr) 24{ 25 return be16_to_cpu(__raw_readw(addr)); 26} 27EXPORT_SYMBOL(ioread16be); 28 29unsigned int ioread32(const void __iomem *addr) 30{ 31 return readl(addr); 32} 33EXPORT_SYMBOL(ioread32); 34 35unsigned int ioread32be(const void __iomem *addr) 36{ 37 return be32_to_cpu(__raw_readl(addr)); 38} 39EXPORT_SYMBOL(ioread32be); 40 41void iowrite8(u8 val, void __iomem *addr) 42{ 43 writeb(val, addr); 44} 45EXPORT_SYMBOL(iowrite8); 46 47void iowrite16(u16 val, void __iomem *addr) 48{ 49 writew(val, addr); 50} 51EXPORT_SYMBOL(iowrite16); 52 53void iowrite16be(u16 val, void __iomem *addr) 54{ 55 __raw_writew(cpu_to_be16(val), addr); 56} 57EXPORT_SYMBOL(iowrite16be); 58 59void iowrite32(u32 val, void __iomem *addr) 60{ 61 writel(val, addr); 62} 63EXPORT_SYMBOL(iowrite32); 64 65void iowrite32be(u32 val, void __iomem *addr) 66{ 67 __raw_writel(cpu_to_be32(val), addr); 68} 69EXPORT_SYMBOL(iowrite32be); 70 71/* 72 * These are the "repeat MMIO read/write" functions. 73 * Note the "__raw" accesses, since we don't want to 74 * convert to CPU byte order. We write in "IO byte 75 * order" (we also don't have IO barriers). 76 */ 77static inline void mmio_insb(const void __iomem *addr, u8 *dst, int count) 78{ 79 while (--count >= 0) { 80 u8 data = __raw_readb(addr); 81 *dst = data; 82 dst++; 83 } 84} 85 86static inline void mmio_insw(const void __iomem *addr, u16 *dst, int count) 87{ 88 while (--count >= 0) { 89 u16 data = __raw_readw(addr); 90 *dst = data; 91 dst++; 92 } 93} 94 95static inline void mmio_insl(const void __iomem *addr, u32 *dst, int count) 96{ 97 while (--count >= 0) { 98 u32 data = __raw_readl(addr); 99 *dst = data; 100 dst++; 101 } 102} 103 104static inline void mmio_outsb(void __iomem *addr, const u8 *src, int count) 105{ 106 while (--count >= 0) { 107 __raw_writeb(*src, addr); 108 src++; 109 } 110} 111 112static inline void mmio_outsw(void __iomem *addr, const u16 *src, int count) 113{ 114 while (--count >= 0) { 115 __raw_writew(*src, addr); 116 src++; 117 } 118} 119 120static inline void mmio_outsl(void __iomem *addr, const u32 *src, int count) 121{ 122 while (--count >= 0) { 123 __raw_writel(*src, addr); 124 src++; 125 } 126} 127 128void ioread8_rep(const void __iomem *addr, void *dst, unsigned long count) 129{ 130 mmio_insb(addr, dst, count); 131} 132EXPORT_SYMBOL(ioread8_rep); 133 134void ioread16_rep(const void __iomem *addr, void *dst, unsigned long count) 135{ 136 mmio_insw(addr, dst, count); 137} 138EXPORT_SYMBOL(ioread16_rep); 139 140void ioread32_rep(const void __iomem *addr, void *dst, unsigned long count) 141{ 142 mmio_insl(addr, dst, count); 143} 144EXPORT_SYMBOL(ioread32_rep); 145 146void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count) 147{ 148 mmio_outsb(addr, src, count); 149} 150EXPORT_SYMBOL(iowrite8_rep); 151 152void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count) 153{ 154 mmio_outsw(addr, src, count); 155} 156EXPORT_SYMBOL(iowrite16_rep); 157 158void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count) 159{ 160 mmio_outsl(addr, src, count); 161} 162EXPORT_SYMBOL(iowrite32_rep);