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
__raw_writeb(u8 val,volatile void __iomem * addr)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
__raw_writew(u16 val,volatile void __iomem * addr)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
__raw_writel(u32 val,volatile void __iomem * addr)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
__raw_writeq(u64 val,volatile void __iomem * addr)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
__raw_readb(const volatile void __iomem * addr)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
__raw_readw(const volatile void __iomem * addr)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
__raw_readl(const volatile void __iomem * addr)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
__raw_readq(const volatile void __iomem * addr)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
ioremap(phys_addr_t phys_addr,size_t size)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
virt_to_phys(const volatile void * x)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
phys_to_virt(phys_addr_t x)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