linux/arch/blackfin/include/asm/io.h
<<
>>
Prefs
   1#ifndef _BFIN_IO_H
   2#define _BFIN_IO_H
   3
   4#ifdef __KERNEL__
   5
   6#ifndef __ASSEMBLY__
   7#include <linux/types.h>
   8#endif
   9#include <linux/compiler.h>
  10
  11/*
  12 * These are for ISA/PCI shared memory _only_ and should never be used
  13 * on any other type of memory, including Zorro memory. They are meant to
  14 * access the bus in the bus byte order which is little-endian!.
  15 *
  16 * readX/writeX() are used to access memory mapped devices. On some
  17 * architectures the memory mapped IO stuff needs to be accessed
  18 * differently. On the bfin architecture, we just read/write the
  19 * memory location directly.
  20 */
  21#ifndef __ASSEMBLY__
  22
  23static inline unsigned char readb(const volatile void __iomem *addr)
  24{
  25        unsigned int val;
  26        int tmp;
  27
  28        __asm__ __volatile__ ("cli %1;\n\t"
  29                        "NOP; NOP; SSYNC;\n\t"
  30                        "%0 = b [%2] (z);\n\t"
  31                        "sti %1;\n\t"
  32                        : "=d"(val), "=d"(tmp): "a"(addr)
  33                        );
  34
  35        return (unsigned char) val;
  36}
  37
  38static inline unsigned short readw(const volatile void __iomem *addr)
  39{
  40        unsigned int val;
  41        int tmp;
  42
  43        __asm__ __volatile__ ("cli %1;\n\t"
  44                        "NOP; NOP; SSYNC;\n\t"
  45                        "%0 = w [%2] (z);\n\t"
  46                        "sti %1;\n\t"
  47                        : "=d"(val), "=d"(tmp): "a"(addr)
  48                        );
  49
  50        return (unsigned short) val;
  51}
  52
  53static inline unsigned int readl(const volatile void __iomem *addr)
  54{
  55        unsigned int val;
  56        int tmp;
  57
  58        __asm__ __volatile__ ("cli %1;\n\t"
  59                        "NOP; NOP; SSYNC;\n\t"
  60                        "%0 = [%2];\n\t"
  61                        "sti %1;\n\t"
  62                        : "=d"(val), "=d"(tmp): "a"(addr)
  63                        );
  64        return val;
  65}
  66
  67#endif /*  __ASSEMBLY__ */
  68
  69#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
  70#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
  71#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
  72
  73#define __raw_readb readb
  74#define __raw_readw readw
  75#define __raw_readl readl
  76#define __raw_writeb writeb
  77#define __raw_writew writew
  78#define __raw_writel writel
  79#define memset_io(a,b,c)        memset((void *)(a),(b),(c))
  80#define memcpy_fromio(a,b,c)    memcpy((a),(void *)(b),(c))
  81#define memcpy_toio(a,b,c)      memcpy((void *)(a),(b),(c))
  82
  83#define inb(addr)    readb(addr)
  84#define inw(addr)    readw(addr)
  85#define inl(addr)    readl(addr)
  86#define outb(x,addr) ((void) writeb(x,addr))
  87#define outw(x,addr) ((void) writew(x,addr))
  88#define outl(x,addr) ((void) writel(x,addr))
  89
  90#define inb_p(addr)    inb(addr)
  91#define inw_p(addr)    inw(addr)
  92#define inl_p(addr)    inl(addr)
  93#define outb_p(x,addr) outb(x,addr)
  94#define outw_p(x,addr) outw(x,addr)
  95#define outl_p(x,addr) outl(x,addr)
  96
  97#define ioread8_rep(a,d,c)      insb(a,d,c)
  98#define ioread16_rep(a,d,c)     insw(a,d,c)
  99#define ioread32_rep(a,d,c)     insl(a,d,c)
 100#define iowrite8_rep(a,s,c)     outsb(a,s,c)
 101#define iowrite16_rep(a,s,c)    outsw(a,s,c)
 102#define iowrite32_rep(a,s,c)    outsl(a,s,c)
 103
 104#define ioread8(X)                      readb(X)
 105#define ioread16(X)                     readw(X)
 106#define ioread32(X)                     readl(X)
 107#define iowrite8(val,X)                 writeb(val,X)
 108#define iowrite16(val,X)                writew(val,X)
 109#define iowrite32(val,X)                writel(val,X)
 110
 111#define IO_SPACE_LIMIT 0xffffffff
 112
 113/* Values for nocacheflag and cmode */
 114#define IOMAP_NOCACHE_SER               1
 115
 116#ifndef __ASSEMBLY__
 117
 118extern void outsb(unsigned long port, const void *addr, unsigned long count);
 119extern void outsw(unsigned long port, const void *addr, unsigned long count);
 120extern void outsw_8(unsigned long port, const void *addr, unsigned long count);
 121extern void outsl(unsigned long port, const void *addr, unsigned long count);
 122
 123extern void insb(unsigned long port, void *addr, unsigned long count);
 124extern void insw(unsigned long port, void *addr, unsigned long count);
 125extern void insw_8(unsigned long port, void *addr, unsigned long count);
 126extern void insl(unsigned long port, void *addr, unsigned long count);
 127extern void insl_16(unsigned long port, void *addr, unsigned long count);
 128
 129extern void dma_outsb(unsigned long port, const void *addr, unsigned short count);
 130extern void dma_outsw(unsigned long port, const void *addr, unsigned short count);
 131extern void dma_outsl(unsigned long port, const void *addr, unsigned short count);
 132
 133extern void dma_insb(unsigned long port, void *addr, unsigned short count);
 134extern void dma_insw(unsigned long port, void *addr, unsigned short count);
 135extern void dma_insl(unsigned long port, void *addr, unsigned short count);
 136
 137static inline void readsl(const void __iomem *addr, void *buf, int len)
 138{
 139        insl((unsigned long)addr, buf, len);
 140}
 141
 142static inline void readsw(const void __iomem *addr, void *buf, int len)
 143{
 144        insw((unsigned long)addr, buf, len);
 145}
 146
 147static inline void readsb(const void __iomem *addr, void *buf, int len)
 148{
 149        insb((unsigned long)addr, buf, len);
 150}
 151
 152static inline void writesl(const void __iomem *addr, const void *buf, int len)
 153{
 154        outsl((unsigned long)addr, buf, len);
 155}
 156
 157static inline void writesw(const void __iomem *addr, const void *buf, int len)
 158{
 159        outsw((unsigned long)addr, buf, len);
 160}
 161
 162static inline void writesb(const void __iomem *addr, const void *buf, int len)
 163{
 164        outsb((unsigned long)addr, buf, len);
 165}
 166
 167/*
 168 * Map some physical address range into the kernel address space.
 169 */
 170static inline void __iomem *__ioremap(unsigned long physaddr, unsigned long size,
 171                                int cacheflag)
 172{
 173        return (void __iomem *)physaddr;
 174}
 175
 176/*
 177 * Unmap a ioremap()ed region again
 178 */
 179static inline void iounmap(void *addr)
 180{
 181}
 182
 183/*
 184 * __iounmap unmaps nearly everything, so be careful
 185 * it doesn't free currently pointer/page tables anymore but it
 186 * wans't used anyway and might be added later.
 187 */
 188static inline void __iounmap(void *addr, unsigned long size)
 189{
 190}
 191
 192/*
 193 * Set new cache mode for some kernel address space.
 194 * The caller must push data for that range itself, if such data may already
 195 * be in the cache.
 196 */
 197static inline void kernel_set_cachemode(void *addr, unsigned long size,
 198                                        int cmode)
 199{
 200}
 201
 202static inline void __iomem *ioremap(unsigned long physaddr, unsigned long size)
 203{
 204        return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
 205}
 206static inline void __iomem *ioremap_nocache(unsigned long physaddr,
 207                                            unsigned long size)
 208{
 209        return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
 210}
 211
 212extern void blkfin_inv_cache_all(void);
 213
 214#endif
 215
 216#define ioport_map(port, nr)            ((void __iomem*)(port))
 217#define ioport_unmap(addr)
 218
 219/* Pages to physical address... */
 220#define page_to_phys(page)      ((page - mem_map) << PAGE_SHIFT)
 221#define page_to_bus(page)       ((page - mem_map) << PAGE_SHIFT)
 222
 223#define phys_to_virt(vaddr)     ((void *) (vaddr))
 224#define virt_to_phys(vaddr)     ((unsigned long) (vaddr))
 225
 226#define virt_to_bus virt_to_phys
 227#define bus_to_virt phys_to_virt
 228
 229/*
 230 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
 231 * access
 232 */
 233#define xlate_dev_mem_ptr(p)    __va(p)
 234
 235/*
 236 * Convert a virtual cached pointer to an uncached pointer
 237 */
 238#define xlate_dev_kmem_ptr(p)   p
 239
 240#endif                          /* __KERNEL__ */
 241
 242#endif                          /* _BFIN_IO_H */
 243
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.