linux/arch/sh/kernel/iomap.c
<<
>>
Prefs
   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(void __iomem *addr)
  12{
  13        return readb(addr);
  14}
  15EXPORT_SYMBOL(ioread8);
  16
  17unsigned int ioread16(void __iomem *addr)
  18{
  19        return readw(addr);
  20}
  21EXPORT_SYMBOL(ioread16);
  22
  23unsigned int ioread16be(void __iomem *addr)
  24{
  25        return be16_to_cpu(__raw_readw(addr));
  26}
  27EXPORT_SYMBOL(ioread16be);
  28
  29unsigned int ioread32(void __iomem *addr)
  30{
  31        return readl(addr);
  32}
  33EXPORT_SYMBOL(ioread32);
  34
  35unsigned int ioread32be(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(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(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(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(void __iomem *addr, void *dst, unsigned long count)
 129{
 130        mmio_insb(addr, dst, count);
 131}
 132EXPORT_SYMBOL(ioread8_rep);
 133
 134void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
 135{
 136        mmio_insw(addr, dst, count);
 137}
 138EXPORT_SYMBOL(ioread16_rep);
 139
 140void ioread32_rep(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);
 163