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 71/* 72 * IO bus memory addresses are also 1:1 with the physical address 73 */ 74#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) 75#define page_to_bus page_to_phys 76#define virt_to_bus virt_to_phys 77 78extern unsigned char _inb(unsigned long); 79extern unsigned short _inw(unsigned long); 80extern unsigned long _inl(unsigned long); 81extern unsigned char _inb_p(unsigned long); 82extern unsigned short _inw_p(unsigned long); 83extern unsigned long _inl_p(unsigned long); 84extern void _outb(unsigned char, unsigned long); 85extern void _outw(unsigned short, unsigned long); 86extern void _outl(unsigned long, unsigned long); 87extern void _outb_p(unsigned char, unsigned long); 88extern void _outw_p(unsigned short, unsigned long); 89extern void _outl_p(unsigned long, unsigned long); 90extern void _insb(unsigned int, void *, unsigned long); 91extern void _insw(unsigned int, void *, unsigned long); 92extern void _insl(unsigned int, void *, unsigned long); 93extern void _outsb(unsigned int, const void *, unsigned long); 94extern void _outsw(unsigned int, const void *, unsigned long); 95extern void _outsl(unsigned int, const void *, unsigned long); 96 97static inline unsigned char _readb(unsigned long addr) 98{ 99 return *(volatile unsigned char __force *)addr; 100} 101 102static inline unsigned short _readw(unsigned long addr) 103{ 104 return *(volatile unsigned short __force *)addr; 105} 106 107static inline unsigned long _readl(unsigned long addr) 108{ 109 return *(volatile unsigned long __force *)addr; 110} 111 112static inline void _writeb(unsigned char b, unsigned long addr) 113{ 114 *(volatile unsigned char __force *)addr = b; 115} 116 117static inline void _writew(unsigned short w, unsigned long addr) 118{ 119 *(volatile unsigned short __force *)addr = w; 120} 121 122static inline void _writel(unsigned long l, unsigned long addr) 123{ 124 *(volatile unsigned long __force *)addr = l; 125} 126 127#define inb _inb 128#define inw _inw 129#define inl _inl 130#define outb _outb 131#define outw _outw 132#define outl _outl 133 134#define inb_p _inb_p 135#define inw_p _inw_p 136#define inl_p _inl_p 137#define outb_p _outb_p 138#define outw_p _outw_p 139#define outl_p _outl_p 140 141#define insb _insb 142#define insw _insw 143#define insl _insl 144#define outsb _outsb 145#define outsw _outsw 146#define outsl _outsl 147 148#define readb(addr) _readb((unsigned long)(addr)) 149#define readw(addr) _readw((unsigned long)(addr)) 150#define readl(addr) _readl((unsigned long)(addr)) 151#define __raw_readb readb 152#define __raw_readw readw 153#define __raw_readl readl 154#define readb_relaxed readb 155#define readw_relaxed readw 156#define readl_relaxed readl 157 158#define writeb(val, addr) _writeb((val), (unsigned long)(addr)) 159#define writew(val, addr) _writew((val), (unsigned long)(addr)) 160#define writel(val, addr) _writel((val), (unsigned long)(addr)) 161#define __raw_writeb writeb 162#define __raw_writew writew 163#define __raw_writel writel 164 165#define mmiowb() 166 167#define flush_write_buffers() do { } while (0) /* M32R_FIXME */ 168 169static inline void 170memset_io(volatile void __iomem *addr, unsigned char val, int count) 171{ 172 memset((void __force *) addr, val, count); 173} 174 175static inline void 176memcpy_fromio(void *dst, volatile void __iomem *src, int count) 177{ 178 memcpy(dst, (void __force *) src, count); 179} 180 181static inline void 182memcpy_toio(volatile void __iomem *dst, const void *src, int count) 183{ 184 memcpy((void __force *) dst, src, count); 185} 186 187/* 188 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 189 * access 190 */ 191#define xlate_dev_mem_ptr(p) __va(p) 192 193/* 194 * Convert a virtual cached pointer to an uncached pointer 195 */ 196#define xlate_dev_kmem_ptr(p) p 197 198#endif /* __KERNEL__ */ 199 200#endif /* _ASM_M32R_IO_H */ 201