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
bswap16(u16 val)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
bswap32(u32 val)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
__raw_readb(const volatile void __iomem * addr)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
__raw_readw(const volatile void __iomem * addr)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
__raw_readl(const volatile void __iomem * addr)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
__raw_writeb(u8 val,volatile void __iomem * addr)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
__raw_writew(u16 val,volatile void __iomem * addr)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
__raw_writel(u32 val,volatile void __iomem * addr)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 ioremap ioremap
ioremap(phys_addr_t phys_addr,size_t size)81 static inline void __iomem *ioremap(phys_addr_t phys_addr, size_t size)
82 {
83 return __ioremap(phys_addr, size);
84 }
85
86 #define virt_to_phys virt_to_phys
virt_to_phys(const volatile void * x)87 static inline phys_addr_t virt_to_phys(const volatile void *x)
88 {
89 return __virt_to_phys((unsigned long)(x));
90 }
91
92 #define phys_to_virt phys_to_virt
phys_to_virt(phys_addr_t x)93 static inline void *phys_to_virt(phys_addr_t x)
94 {
95 return (void *)__phys_to_virt(x);
96 }
97
98 #include <asm-generic/io.h>
99
100 #endif /* _ASMARM_IO_H_ */
101