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