Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.12 226 lines 6.6 kB view raw
1#ifndef _ASM_M32R_IO_H 2#define _ASM_M32R_IO_H 3 4#include <linux/string.h> 5#include <linux/compiler.h> 6#include <asm/page.h> /* __va */ 7 8#ifdef __KERNEL__ 9 10#define IO_SPACE_LIMIT 0xFFFFFFFF 11 12/** 13 * virt_to_phys - map virtual addresses to physical 14 * @address: address to remap 15 * 16 * The returned physical address is the physical (CPU) mapping for 17 * the memory address given. It is only valid to use this function on 18 * addresses directly mapped or allocated via kmalloc. 19 * 20 * This function does not give bus mappings for DMA transfers. In 21 * almost all conceivable cases a device driver should not be using 22 * this function 23 */ 24 25static inline unsigned long virt_to_phys(volatile void * address) 26{ 27 return __pa(address); 28} 29 30/** 31 * phys_to_virt - map physical address to virtual 32 * @address: address to remap 33 * 34 * The returned virtual address is a current CPU mapping for 35 * the memory address given. It is only valid to use this function on 36 * addresses that have a kernel mapping 37 * 38 * This function does not handle bus mappings for DMA transfers. In 39 * almost all conceivable cases a device driver should not be using 40 * this function 41 */ 42 43static inline void *phys_to_virt(unsigned long address) 44{ 45 return __va(address); 46} 47 48extern void __iomem * 49__ioremap(unsigned long offset, unsigned long size, unsigned long flags); 50 51/** 52 * ioremap - map bus memory into CPU space 53 * @offset: bus address of the memory 54 * @size: size of the resource to map 55 * 56 * ioremap performs a platform specific sequence of operations to 57 * make bus memory CPU accessible via the readb/readw/readl/writeb/ 58 * writew/writel functions and the other mmio helpers. The returned 59 * address is not guaranteed to be usable directly as a virtual 60 * address. 61 */ 62 63static inline void __iomem *ioremap(unsigned long offset, unsigned long size) 64{ 65 return __ioremap(offset, size, 0); 66} 67 68extern void iounmap(volatile void __iomem *addr); 69#define ioremap_nocache(off,size) ioremap(off,size) 70#define ioremap_wc ioremap_nocache 71#define ioremap_wt ioremap_nocache 72#define ioremap_uc ioremap_nocache 73 74/* 75 * IO bus memory addresses are also 1:1 with the physical address 76 */ 77#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) 78#define page_to_bus page_to_phys 79#define virt_to_bus virt_to_phys 80 81extern unsigned char _inb(unsigned long); 82extern unsigned short _inw(unsigned long); 83extern unsigned long _inl(unsigned long); 84extern unsigned char _inb_p(unsigned long); 85extern unsigned short _inw_p(unsigned long); 86extern unsigned long _inl_p(unsigned long); 87extern void _outb(unsigned char, unsigned long); 88extern void _outw(unsigned short, unsigned long); 89extern void _outl(unsigned long, unsigned long); 90extern void _outb_p(unsigned char, unsigned long); 91extern void _outw_p(unsigned short, unsigned long); 92extern void _outl_p(unsigned long, unsigned long); 93extern void _insb(unsigned int, void *, unsigned long); 94extern void _insw(unsigned int, void *, unsigned long); 95extern void _insl(unsigned int, void *, unsigned long); 96extern void _outsb(unsigned int, const void *, unsigned long); 97extern void _outsw(unsigned int, const void *, unsigned long); 98extern void _outsl(unsigned int, const void *, unsigned long); 99 100static inline unsigned char _readb(unsigned long addr) 101{ 102 return *(volatile unsigned char __force *)addr; 103} 104 105static inline unsigned short _readw(unsigned long addr) 106{ 107 return *(volatile unsigned short __force *)addr; 108} 109 110static inline unsigned long _readl(unsigned long addr) 111{ 112 return *(volatile unsigned long __force *)addr; 113} 114 115static inline void _writeb(unsigned char b, unsigned long addr) 116{ 117 *(volatile unsigned char __force *)addr = b; 118} 119 120static inline void _writew(unsigned short w, unsigned long addr) 121{ 122 *(volatile unsigned short __force *)addr = w; 123} 124 125static inline void _writel(unsigned long l, unsigned long addr) 126{ 127 *(volatile unsigned long __force *)addr = l; 128} 129 130#define inb _inb 131#define inw _inw 132#define inl _inl 133#define outb _outb 134#define outw _outw 135#define outl _outl 136 137#define inb_p _inb_p 138#define inw_p _inw_p 139#define inl_p _inl_p 140#define outb_p _outb_p 141#define outw_p _outw_p 142#define outl_p _outl_p 143 144#define insb _insb 145#define insw _insw 146#define insl _insl 147#define outsb _outsb 148#define outsw _outsw 149#define outsl _outsl 150 151#define readb(addr) _readb((unsigned long)(addr)) 152#define readw(addr) _readw((unsigned long)(addr)) 153#define readl(addr) _readl((unsigned long)(addr)) 154#define __raw_readb readb 155#define __raw_readw readw 156#define __raw_readl readl 157#define readb_relaxed readb 158#define readw_relaxed readw 159#define readl_relaxed readl 160 161#define writeb(val, addr) _writeb((val), (unsigned long)(addr)) 162#define writew(val, addr) _writew((val), (unsigned long)(addr)) 163#define writel(val, addr) _writel((val), (unsigned long)(addr)) 164#define __raw_writeb writeb 165#define __raw_writew writew 166#define __raw_writel writel 167#define writeb_relaxed writeb 168#define writew_relaxed writew 169#define writel_relaxed writel 170 171#define ioread8 readb 172#define ioread16 readw 173#define ioread32 readl 174#define iowrite8 writeb 175#define iowrite16 writew 176#define iowrite32 writel 177 178#define ioread8_rep(p, dst, count) insb((unsigned long)(p), (dst), (count)) 179#define ioread16_rep(p, dst, count) insw((unsigned long)(p), (dst), (count)) 180#define ioread32_rep(p, dst, count) insl((unsigned long)(p), (dst), (count)) 181 182#define iowrite8_rep(p, src, count) outsb((unsigned long)(p), (src), (count)) 183#define iowrite16_rep(p, src, count) outsw((unsigned long)(p), (src), (count)) 184#define iowrite32_rep(p, src, count) outsl((unsigned long)(p), (src), (count)) 185 186#define ioread16be(addr) be16_to_cpu(readw(addr)) 187#define ioread32be(addr) be32_to_cpu(readl(addr)) 188#define iowrite16be(v, addr) writew(cpu_to_be16(v), (addr)) 189#define iowrite32be(v, addr) writel(cpu_to_be32(v), (addr)) 190 191#define mmiowb() 192 193#define flush_write_buffers() do { } while (0) /* M32R_FIXME */ 194 195static inline void 196memset_io(volatile void __iomem *addr, unsigned char val, int count) 197{ 198 memset((void __force *) addr, val, count); 199} 200 201static inline void 202memcpy_fromio(void *dst, volatile void __iomem *src, int count) 203{ 204 memcpy(dst, (void __force *) src, count); 205} 206 207static inline void 208memcpy_toio(volatile void __iomem *dst, const void *src, int count) 209{ 210 memcpy((void __force *) dst, src, count); 211} 212 213/* 214 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 215 * access 216 */ 217#define xlate_dev_mem_ptr(p) __va(p) 218 219/* 220 * Convert a virtual cached pointer to an uncached pointer 221 */ 222#define xlate_dev_kmem_ptr(p) p 223 224#endif /* __KERNEL__ */ 225 226#endif /* _ASM_M32R_IO_H */