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