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