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