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