1 /* Public domain. */ 2 3 #ifndef _LINUX_IO_H 4 #define _LINUX_IO_H 5 6 #include <sys/systm.h> 7 #include <linux/types.h> 8 #include <linux/compiler.h> 9 10 #define memcpy_toio(d, s, n) memcpy(d, s, n) 11 #define memcpy_fromio(d, s, n) memcpy(d, s, n) 12 #define memset_io(d, b, n) memset(d, b, n) 13 14 static inline u8 15 ioread8(const volatile void __iomem *addr) 16 { 17 return (*(volatile uint8_t *)addr); 18 } 19 20 static inline u16 21 ioread16(const volatile void __iomem *addr) 22 { 23 return (*(volatile uint16_t *)addr); 24 } 25 26 static inline u32 27 ioread32(const volatile void __iomem *addr) 28 { 29 return (*(volatile uint32_t *)addr); 30 } 31 32 static inline u64 33 ioread64(const volatile void __iomem *addr) 34 { 35 return (*(volatile uint64_t *)addr); 36 } 37 38 static inline void 39 iowrite8(u8 val, volatile void __iomem *addr) 40 { 41 *(volatile uint8_t *)addr = val; 42 } 43 44 static inline void 45 iowrite16(u16 val, volatile void __iomem *addr) 46 { 47 *(volatile uint16_t *)addr = val; 48 } 49 50 static inline void 51 iowrite32(u32 val, volatile void __iomem *addr) 52 { 53 *(volatile uint32_t *)addr = val; 54 } 55 56 static inline void 57 iowrite64(u64 val, volatile void __iomem *addr) 58 { 59 *(volatile uint64_t *)addr = val; 60 } 61 62 #define readb(p) ioread8(p) 63 #define writeb(v, p) iowrite8(v, p) 64 #define readw(p) ioread16(p) 65 #define writew(v, p) iowrite16(v, p) 66 #define readl(p) ioread32(p) 67 #define writel(v, p) iowrite32(v, p) 68 #define readq(p) ioread64(p) 69 #define writeq(v, p) iowrite64(v, p) 70 71 #endif 72