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