1 #ifndef _ASMARM_IO_H_ 2 #define _ASMARM_IO_H_ 3 #include "libcflat.h" 4 #include "asm/barrier.h" 5 #include "asm/page.h" 6 7 #define __iomem 8 #define __force 9 10 #define __bswap16 bswap16 11 static inline u16 bswap16(u16 val) 12 { 13 u16 ret; 14 asm volatile("rev16 %0, %1" : "=r" (ret) : "r" (val)); 15 return ret; 16 } 17 18 #define __bswap32 bswap32 19 static inline u32 bswap32(u32 val) 20 { 21 u32 ret; 22 asm volatile("rev %0, %1" : "=r" (ret) : "r" (val)); 23 return ret; 24 } 25 26 #define __raw_readb __raw_readb 27 static inline u8 __raw_readb(const volatile void __iomem *addr) 28 { 29 u8 val; 30 asm volatile("ldrb %1, %0" 31 : "+Qo" (*(volatile u8 __force *)addr), 32 "=r" (val)); 33 return val; 34 } 35 36 #define __raw_readw __raw_readw 37 static inline u16 __raw_readw(const volatile void __iomem *addr) 38 { 39 u16 val; 40 asm volatile("ldrh %1, %0" 41 : "+Q" (*(volatile u16 __force *)addr), 42 "=r" (val)); 43 return val; 44 } 45 46 #define __raw_readl __raw_readl 47 static inline u32 __raw_readl(const volatile void __iomem *addr) 48 { 49 u32 val; 50 asm volatile("ldr %1, %0" 51 : "+Qo" (*(volatile u32 __force *)addr), 52 "=r" (val)); 53 return val; 54 } 55 56 #define __raw_writeb __raw_writeb 57 static inline void __raw_writeb(u8 val, volatile void __iomem *addr) 58 { 59 asm volatile("strb %1, %0" 60 : "+Qo" (*(volatile u8 __force *)addr) 61 : "r" (val)); 62 } 63 64 #define __raw_writew __raw_writew 65 static inline void __raw_writew(u16 val, volatile void __iomem *addr) 66 { 67 asm volatile("strh %1, %0" 68 : "+Q" (*(volatile u16 __force *)addr) 69 : "r" (val)); 70 } 71 72 #define __raw_writel __raw_writel 73 static inline void __raw_writel(u32 val, volatile void __iomem *addr) 74 { 75 asm volatile("str %1, %0" 76 : "+Qo" (*(volatile u32 __force *)addr) 77 : "r" (val)); 78 } 79 80 #define virt_to_phys virt_to_phys 81 static inline phys_addr_t virt_to_phys(const volatile void *x) 82 { 83 return __virt_to_phys((unsigned long)(x)); 84 } 85 86 #define phys_to_virt phys_to_virt 87 static inline void *phys_to_virt(phys_addr_t x) 88 { 89 return (void *)__phys_to_virt(x); 90 } 91 92 #include "asm-generic/io.h" 93 94 #endif /* _ASMARM_IO_H_ */ 95