linux/arch/ia64/lib/io.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <linux/module.h>
   3#include <linux/types.h>
   4
   5#include <asm/io.h>
   6
   7/*
   8 * Copy data from IO memory space to "real" memory space.
   9 * This needs to be optimized.
  10 */
  11void memcpy_fromio(void *to, const volatile void __iomem *from, long count)
  12{
  13        char *dst = to;
  14
  15        while (count) {
  16                count--;
  17                *dst++ = readb(from++);
  18        }
  19}
  20EXPORT_SYMBOL(memcpy_fromio);
  21
  22/*
  23 * Copy data from "real" memory space to IO memory space.
  24 * This needs to be optimized.
  25 */
  26void memcpy_toio(volatile void __iomem *to, const void *from, long count)
  27{
  28        const char *src = from;
  29
  30        while (count) {
  31                count--;
  32                writeb(*src++, to++);
  33        }
  34}
  35EXPORT_SYMBOL(memcpy_toio);
  36
  37/*
  38 * "memset" on IO memory space.
  39 * This needs to be optimized.
  40 */
  41void memset_io(volatile void __iomem *dst, int c, long count)
  42{
  43        unsigned char ch = (char)(c & 0xff);
  44
  45        while (count) {
  46                count--;
  47                writeb(ch, dst);
  48                dst++;
  49        }
  50}
  51EXPORT_SYMBOL(memset_io);
  52
  53#ifdef CONFIG_IA64_GENERIC
  54
  55#undef __ia64_inb
  56#undef __ia64_inw
  57#undef __ia64_inl
  58#undef __ia64_outb
  59#undef __ia64_outw
  60#undef __ia64_outl
  61#undef __ia64_readb
  62#undef __ia64_readw
  63#undef __ia64_readl
  64#undef __ia64_readq
  65#undef __ia64_readb_relaxed
  66#undef __ia64_readw_relaxed
  67#undef __ia64_readl_relaxed
  68#undef __ia64_readq_relaxed
  69#undef __ia64_writeb
  70#undef __ia64_writew
  71#undef __ia64_writel
  72#undef __ia64_writeq
  73#undef __ia64_mmiowb
  74
  75unsigned int
  76__ia64_inb (unsigned long port)
  77{
  78        return ___ia64_inb(port);
  79}
  80
  81unsigned int
  82__ia64_inw (unsigned long port)
  83{
  84        return ___ia64_inw(port);
  85}
  86
  87unsigned int
  88__ia64_inl (unsigned long port)
  89{
  90        return ___ia64_inl(port);
  91}
  92
  93void
  94__ia64_outb (unsigned char val, unsigned long port)
  95{
  96        ___ia64_outb(val, port);
  97}
  98
  99void
 100__ia64_outw (unsigned short val, unsigned long port)
 101{
 102        ___ia64_outw(val, port);
 103}
 104
 105void
 106__ia64_outl (unsigned int val, unsigned long port)
 107{
 108        ___ia64_outl(val, port);
 109}
 110
 111unsigned char
 112__ia64_readb (void __iomem *addr)
 113{
 114        return ___ia64_readb (addr);
 115}
 116
 117unsigned short
 118__ia64_readw (void __iomem *addr)
 119{
 120        return ___ia64_readw (addr);
 121}
 122
 123unsigned int
 124__ia64_readl (void __iomem *addr)
 125{
 126        return ___ia64_readl (addr);
 127}
 128
 129unsigned long
 130__ia64_readq (void __iomem *addr)
 131{
 132        return ___ia64_readq (addr);
 133}
 134
 135unsigned char
 136__ia64_readb_relaxed (void __iomem *addr)
 137{
 138        return ___ia64_readb (addr);
 139}
 140
 141unsigned short
 142__ia64_readw_relaxed (void __iomem *addr)
 143{
 144        return ___ia64_readw (addr);
 145}
 146
 147unsigned int
 148__ia64_readl_relaxed (void __iomem *addr)
 149{
 150        return ___ia64_readl (addr);
 151}
 152
 153unsigned long
 154__ia64_readq_relaxed (void __iomem *addr)
 155{
 156        return ___ia64_readq (addr);
 157}
 158
 159void
 160__ia64_mmiowb(void)
 161{
 162        ___ia64_mmiowb();
 163}
 164
 165#endif /* CONFIG_IA64_GENERIC */
 166