io.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. #ifndef CONFIG_HAVE_ARCH_IOMAP
  8. static inline u8 ioread8(const volatile void __iomem *addr)
  9. {
  10. return readb(addr);
  11. }
  12. static inline u16 ioread16(const volatile void __iomem *addr)
  13. {
  14. return readw(addr);
  15. }
  16. static inline u32 ioread32(const volatile void __iomem *addr)
  17. {
  18. return readl(addr);
  19. }
  20. #endif /* !CONFIG_HAVE_ARCH_IOMAP */
  21. #ifdef CONFIG_64BIT
  22. static inline u64 ioread64(const volatile void __iomem *addr)
  23. {
  24. return readq(addr);
  25. }
  26. #endif /* CONFIG_64BIT */
  27. #ifndef CONFIG_HAVE_ARCH_IOMAP
  28. static inline void iowrite8(u8 value, volatile void __iomem *addr)
  29. {
  30. writeb(value, addr);
  31. }
  32. static inline void iowrite16(u16 value, volatile void __iomem *addr)
  33. {
  34. writew(value, addr);
  35. }
  36. static inline void iowrite32(u32 value, volatile void __iomem *addr)
  37. {
  38. writel(value, addr);
  39. }
  40. #endif /* !CONFIG_HAVE_ARCH_IOMAP */
  41. #ifdef CONFIG_64BIT
  42. static inline void iowrite64(u64 value, volatile void __iomem *addr)
  43. {
  44. writeq(value, addr);
  45. }
  46. #endif /* CONFIG_64BIT */
  47. #ifndef CONFIG_HAVE_ARCH_IOREMAP
  48. static inline void __iomem *ioremap(resource_size_t offset,
  49. resource_size_t size)
  50. {
  51. return (void __iomem *)(unsigned long)offset;
  52. }
  53. static inline void iounmap(void __iomem *addr)
  54. {
  55. }
  56. #endif
  57. #define devm_ioremap(dev, offset, size) ioremap(offset, size)
  58. #endif /* _LINUX_IO_H */