linux/arch/m68k/include/asm/io_no.h
<<
>>
Prefs
   1#ifndef _M68KNOMMU_IO_H
   2#define _M68KNOMMU_IO_H
   3
   4#ifdef __KERNEL__
   5
   6#include <asm/virtconvert.h>
   7
   8/*
   9 * These are for ISA/PCI shared memory _only_ and should never be used
  10 * on any other type of memory, including Zorro memory. They are meant to
  11 * access the bus in the bus byte order which is little-endian!.
  12 *
  13 * readX/writeX() are used to access memory mapped devices. On some
  14 * architectures the memory mapped IO stuff needs to be accessed
  15 * differently. On the m68k architecture, we just read/write the
  16 * memory location directly.
  17 */
  18/* ++roman: The assignments to temp. vars avoid that gcc sometimes generates
  19 * two accesses to memory, which may be undesirable for some devices.
  20 */
  21
  22/*
  23 * swap functions are sometimes needed to interface little-endian hardware
  24 */
  25static inline unsigned short _swapw(volatile unsigned short v)
  26{
  27    return ((v << 8) | (v >> 8));
  28}
  29
  30static inline unsigned int _swapl(volatile unsigned long v)
  31{
  32    return ((v << 24) | ((v & 0xff00) << 8) | ((v & 0xff0000) >> 8) | (v >> 24));
  33}
  34
  35#define readb(addr) \
  36    ({ unsigned char __v = (*(volatile unsigned char *) (addr)); __v; })
  37#define readw(addr) \
  38    ({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; })
  39#define readl(addr) \
  40    ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
  41
  42#define readb_relaxed(addr) readb(addr)
  43#define readw_relaxed(addr) readw(addr)
  44#define readl_relaxed(addr) readl(addr)
  45
  46#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
  47#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
  48#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
  49
  50#define __raw_readb readb
  51#define __raw_readw readw
  52#define __raw_readl readl
  53#define __raw_writeb writeb
  54#define __raw_writew writew
  55#define __raw_writel writel
  56
  57static inline void io_outsb(unsigned int addr, void *buf, int len)
  58{
  59        volatile unsigned char *ap = (volatile unsigned char *) addr;
  60        unsigned char *bp = (unsigned char *) buf;
  61        while (len--)
  62                *ap = *bp++;
  63}
  64
  65static inline void io_outsw(unsigned int addr, void *buf, int len)
  66{
  67        volatile unsigned short *ap = (volatile unsigned short *) addr;
  68        unsigned short *bp = (unsigned short *) buf;
  69        while (len--)
  70                *ap = _swapw(*bp++);
  71}
  72
  73static inline void io_outsl(unsigned int addr, void *buf, int len)
  74{
  75        volatile unsigned int *ap = (volatile unsigned int *) addr;
  76        unsigned int *bp = (unsigned int *) buf;
  77        while (len--)
  78                *ap = _swapl(*bp++);
  79}
  80
  81static inline void io_insb(unsigned int addr, void *buf, int len)
  82{
  83        volatile unsigned char *ap = (volatile unsigned char *) addr;
  84        unsigned char *bp = (unsigned char *) buf;
  85        while (len--)
  86                *bp++ = *ap;
  87}
  88
  89static inline void io_insw(unsigned int addr, void *buf, int len)
  90{
  91        volatile unsigned short *ap = (volatile unsigned short *) addr;
  92        unsigned short *bp = (unsigned short *) buf;
  93        while (len--)
  94                *bp++ = _swapw(*ap);
  95}
  96
  97static inline void io_insl(unsigned int addr, void *buf, int len)
  98{
  99        volatile unsigned int *ap = (volatile unsigned int *) addr;
 100        unsigned int *bp = (unsigned int *) buf;
 101        while (len--)
 102                *bp++ = _swapl(*ap);
 103}
 104
 105#define mmiowb()
 106
 107/*
 108 *      make the short names macros so specific devices
 109 *      can override them as required
 110 */
 111
 112#define memset_io(a,b,c)        memset((void *)(a),(b),(c))
 113#define memcpy_fromio(a,b,c)    memcpy((a),(void *)(b),(c))
 114#define memcpy_toio(a,b,c)      memcpy((void *)(a),(b),(c))
 115
 116#define inb(addr)    readb(addr)
 117#define inw(addr)    readw(addr)
 118#define inl(addr)    readl(addr)
 119#define outb(x,addr) ((void) writeb(x,addr))
 120#define outw(x,addr) ((void) writew(x,addr))
 121#define outl(x,addr) ((void) writel(x,addr))
 122
 123#define inb_p(addr)    inb(addr)
 124#define inw_p(addr)    inw(addr)
 125#define inl_p(addr)    inl(addr)
 126#define outb_p(x,addr) outb(x,addr)
 127#define outw_p(x,addr) outw(x,addr)
 128#define outl_p(x,addr) outl(x,addr)
 129
 130#define outsb(a,b,l) io_outsb(a,b,l)
 131#define outsw(a,b,l) io_outsw(a,b,l)
 132#define outsl(a,b,l) io_outsl(a,b,l)
 133
 134#define insb(a,b,l) io_insb(a,b,l)
 135#define insw(a,b,l) io_insw(a,b,l)
 136#define insl(a,b,l) io_insl(a,b,l)
 137
 138#define IO_SPACE_LIMIT 0xffffffff
 139
 140
 141/* Values for nocacheflag and cmode */
 142#define IOMAP_FULL_CACHING              0
 143#define IOMAP_NOCACHE_SER               1
 144#define IOMAP_NOCACHE_NONSER            2
 145#define IOMAP_WRITETHROUGH              3
 146
 147static inline void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag)
 148{
 149        return (void *) physaddr;
 150}
 151static inline void *ioremap(unsigned long physaddr, unsigned long size)
 152{
 153        return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
 154}
 155static inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
 156{
 157        return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
 158}
 159static inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
 160{
 161        return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
 162}
 163static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
 164{
 165        return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
 166}
 167
 168#define iounmap(addr)   do { } while(0)
 169
 170/*
 171 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
 172 * access
 173 */
 174#define xlate_dev_mem_ptr(p)    __va(p)
 175
 176/*
 177 * Convert a virtual cached pointer to an uncached pointer
 178 */
 179#define xlate_dev_kmem_ptr(p)   p
 180
 181#endif /* __KERNEL__ */
 182
 183#endif /* _M68KNOMMU_IO_H */
 184