xref: /kvm-unit-tests/lib/arm64/asm/io.h (revision e97e1c827fadc972c4efc8fc0650984b6fcc74e8)
139ac3f84SAndrew Jones #ifndef _ASMARM64_IO_H_
239ac3f84SAndrew Jones #define _ASMARM64_IO_H_
339ac3f84SAndrew Jones /*
439ac3f84SAndrew Jones  * From Linux arch/arm64/include/asm/io.h
539ac3f84SAndrew Jones  * Generic IO read/write.  These perform native-endian accesses.
649f758b8SAndrew Jones  *
749f758b8SAndrew Jones  * Copyright (C) 2017, Red Hat Inc, Andrew Jones <drjones@redhat.com>
849f758b8SAndrew Jones  *
949f758b8SAndrew Jones  * This work is licensed under the terms of the GNU GPL, version 2.
1039ac3f84SAndrew Jones  */
1139ac3f84SAndrew Jones #include <libcflat.h>
1239ac3f84SAndrew Jones #include <asm/barrier.h>
1339ac3f84SAndrew Jones #include <asm/page.h>
1439ac3f84SAndrew Jones 
1539ac3f84SAndrew Jones #define __iomem
1639ac3f84SAndrew Jones #define __force
1739ac3f84SAndrew Jones 
1839ac3f84SAndrew Jones #define __raw_writeb __raw_writeb
1939ac3f84SAndrew Jones static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
2039ac3f84SAndrew Jones {
2139ac3f84SAndrew Jones 	asm volatile("strb %w0, [%1]" : : "r" (val), "r" (addr));
2239ac3f84SAndrew Jones }
2339ac3f84SAndrew Jones 
2439ac3f84SAndrew Jones #define __raw_writew __raw_writew
2539ac3f84SAndrew Jones static inline void __raw_writew(u16 val, volatile void __iomem *addr)
2639ac3f84SAndrew Jones {
2739ac3f84SAndrew Jones 	asm volatile("strh %w0, [%1]" : : "r" (val), "r" (addr));
2839ac3f84SAndrew Jones }
2939ac3f84SAndrew Jones 
3039ac3f84SAndrew Jones #define __raw_writel __raw_writel
3139ac3f84SAndrew Jones static inline void __raw_writel(u32 val, volatile void __iomem *addr)
3239ac3f84SAndrew Jones {
3339ac3f84SAndrew Jones 	asm volatile("str %w0, [%1]" : : "r" (val), "r" (addr));
3439ac3f84SAndrew Jones }
3539ac3f84SAndrew Jones 
3639ac3f84SAndrew Jones #define __raw_writeq __raw_writeq
3739ac3f84SAndrew Jones static inline void __raw_writeq(u64 val, volatile void __iomem *addr)
3839ac3f84SAndrew Jones {
3939ac3f84SAndrew Jones 	asm volatile("str %0, [%1]" : : "r" (val), "r" (addr));
4039ac3f84SAndrew Jones }
4139ac3f84SAndrew Jones 
4239ac3f84SAndrew Jones #define __raw_readb __raw_readb
4339ac3f84SAndrew Jones static inline u8 __raw_readb(const volatile void __iomem *addr)
4439ac3f84SAndrew Jones {
4539ac3f84SAndrew Jones 	u8 val;
4639ac3f84SAndrew Jones 	asm volatile("ldrb %w0, [%1]" : "=r" (val) : "r" (addr));
4739ac3f84SAndrew Jones 	return val;
4839ac3f84SAndrew Jones }
4939ac3f84SAndrew Jones 
5039ac3f84SAndrew Jones #define __raw_readw __raw_readw
5139ac3f84SAndrew Jones static inline u16 __raw_readw(const volatile void __iomem *addr)
5239ac3f84SAndrew Jones {
5339ac3f84SAndrew Jones 	u16 val;
5439ac3f84SAndrew Jones 	asm volatile("ldrh %w0, [%1]" : "=r" (val) : "r" (addr));
5539ac3f84SAndrew Jones 	return val;
5639ac3f84SAndrew Jones }
5739ac3f84SAndrew Jones 
5839ac3f84SAndrew Jones #define __raw_readl __raw_readl
5939ac3f84SAndrew Jones static inline u32 __raw_readl(const volatile void __iomem *addr)
6039ac3f84SAndrew Jones {
6139ac3f84SAndrew Jones 	u32 val;
6239ac3f84SAndrew Jones 	asm volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr));
6339ac3f84SAndrew Jones 	return val;
6439ac3f84SAndrew Jones }
6539ac3f84SAndrew Jones 
6639ac3f84SAndrew Jones #define __raw_readq __raw_readq
6739ac3f84SAndrew Jones static inline u64 __raw_readq(const volatile void __iomem *addr)
6839ac3f84SAndrew Jones {
6939ac3f84SAndrew Jones 	u64 val;
7039ac3f84SAndrew Jones 	asm volatile("ldr %0, [%1]" : "=r" (val) : "r" (addr));
7139ac3f84SAndrew Jones 	return val;
7239ac3f84SAndrew Jones }
7339ac3f84SAndrew Jones 
74*e97e1c82SAndrew Jones #define ioremap ioremap
75*e97e1c82SAndrew Jones static inline void __iomem *ioremap(phys_addr_t phys_addr, size_t size)
76*e97e1c82SAndrew Jones {
77*e97e1c82SAndrew Jones 	return __ioremap(phys_addr, size);
78*e97e1c82SAndrew Jones }
79*e97e1c82SAndrew Jones 
8039ac3f84SAndrew Jones #define virt_to_phys virt_to_phys
8139ac3f84SAndrew Jones static inline phys_addr_t virt_to_phys(const volatile void *x)
8239ac3f84SAndrew Jones {
8339ac3f84SAndrew Jones 	return __virt_to_phys((unsigned long)(x));
8439ac3f84SAndrew Jones }
8539ac3f84SAndrew Jones 
8639ac3f84SAndrew Jones #define phys_to_virt phys_to_virt
8739ac3f84SAndrew Jones static inline void *phys_to_virt(phys_addr_t x)
8839ac3f84SAndrew Jones {
8939ac3f84SAndrew Jones 	return (void *)__phys_to_virt(x);
9039ac3f84SAndrew Jones }
9139ac3f84SAndrew Jones 
9239ac3f84SAndrew Jones #include <asm-generic/io.h>
9339ac3f84SAndrew Jones 
9439ac3f84SAndrew Jones #endif /* _ASMARM64_IO_H_ */
95