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