1 #ifndef _ASMARM64_IO_H_ 2 #define _ASMARM64_IO_H_ 3 /* 4 * From Linux arch/arm64/include/asm/io.h 5 * Generic IO read/write. These perform native-endian accesses. 6 */ 7 #include <libcflat.h> 8 #include <asm/barrier.h> 9 #include <asm/page.h> 10 11 #define __iomem 12 #define __force 13 14 #define __raw_writeb __raw_writeb 15 static inline void __raw_writeb(u8 val, volatile void __iomem *addr) 16 { 17 asm volatile("strb %w0, [%1]" : : "r" (val), "r" (addr)); 18 } 19 20 #define __raw_writew __raw_writew 21 static inline void __raw_writew(u16 val, volatile void __iomem *addr) 22 { 23 asm volatile("strh %w0, [%1]" : : "r" (val), "r" (addr)); 24 } 25 26 #define __raw_writel __raw_writel 27 static inline void __raw_writel(u32 val, volatile void __iomem *addr) 28 { 29 asm volatile("str %w0, [%1]" : : "r" (val), "r" (addr)); 30 } 31 32 #define __raw_writeq __raw_writeq 33 static inline void __raw_writeq(u64 val, volatile void __iomem *addr) 34 { 35 asm volatile("str %0, [%1]" : : "r" (val), "r" (addr)); 36 } 37 38 #define __raw_readb __raw_readb 39 static inline u8 __raw_readb(const volatile void __iomem *addr) 40 { 41 u8 val; 42 asm volatile("ldrb %w0, [%1]" : "=r" (val) : "r" (addr)); 43 return val; 44 } 45 46 #define __raw_readw __raw_readw 47 static inline u16 __raw_readw(const volatile void __iomem *addr) 48 { 49 u16 val; 50 asm volatile("ldrh %w0, [%1]" : "=r" (val) : "r" (addr)); 51 return val; 52 } 53 54 #define __raw_readl __raw_readl 55 static inline u32 __raw_readl(const volatile void __iomem *addr) 56 { 57 u32 val; 58 asm volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr)); 59 return val; 60 } 61 62 #define __raw_readq __raw_readq 63 static inline u64 __raw_readq(const volatile void __iomem *addr) 64 { 65 u64 val; 66 asm volatile("ldr %0, [%1]" : "=r" (val) : "r" (addr)); 67 return val; 68 } 69 70 #define virt_to_phys virt_to_phys 71 static inline phys_addr_t virt_to_phys(const volatile void *x) 72 { 73 return __virt_to_phys((unsigned long)(x)); 74 } 75 76 #define phys_to_virt phys_to_virt 77 static inline void *phys_to_virt(phys_addr_t x) 78 { 79 return (void *)__phys_to_virt(x); 80 } 81 82 #include <asm-generic/io.h> 83 84 #endif /* _ASMARM64_IO_H_ */ 85