xref: /kvm-unit-tests/lib/arm/asm/io.h (revision 901c1c8dcd406d63e5fd4a0b36026749810e6397)
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