io.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. #ifndef _LINUX_IO_H
  3. #define _LINUX_IO_H
  4. #include <linux/compiler.h>
  5. #include <linux/types.h>
  6. #include <asm/io.h>
  7. static inline u8 ioread8(const volatile void __iomem *addr)
  8. {
  9. return readb(addr);
  10. }
  11. static inline u16 ioread16(const volatile void __iomem *addr)
  12. {
  13. return readw(addr);
  14. }
  15. static inline u32 ioread32(const volatile void __iomem *addr)
  16. {
  17. return readl(addr);
  18. }
  19. #ifdef CONFIG_64BIT
  20. static inline u64 ioread64(const volatile void __iomem *addr)
  21. {
  22. return readq(addr);
  23. }
  24. #endif /* CONFIG_64BIT */
  25. static inline void iowrite8(u8 value, volatile void __iomem *addr)
  26. {
  27. writeb(value, addr);
  28. }
  29. static inline void iowrite16(u16 value, volatile void __iomem *addr)
  30. {
  31. writew(value, addr);
  32. }
  33. static inline void iowrite32(u32 value, volatile void __iomem *addr)
  34. {
  35. writel(value, addr);
  36. }
  37. #ifdef CONFIG_64BIT
  38. static inline void iowrite64(u64 value, volatile void __iomem *addr)
  39. {
  40. writeq(value, addr);
  41. }
  42. #endif /* CONFIG_64BIT */
  43. #ifndef CONFIG_HAVE_ARCH_IOREMAP
  44. static inline void __iomem *ioremap(resource_size_t offset,
  45. resource_size_t size)
  46. {
  47. return (void __iomem *)(unsigned long)offset;
  48. }
  49. static inline void iounmap(void __iomem *addr)
  50. {
  51. }
  52. #define devm_ioremap(dev, offset, size) ioremap(offset, size)
  53. #endif
  54. #endif /* _LINUX_IO_H */