iomap.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * arch/sh/kernel/iomap.c
  4. *
  5. * Copyright (C) 2000 Niibe Yutaka
  6. * Copyright (C) 2005 - 2007 Paul Mundt
  7. */
  8. #include <linux/module.h>
  9. #include <linux/io.h>
  10. unsigned int ioread8(const void __iomem *addr)
  11. {
  12. return readb(addr);
  13. }
  14. EXPORT_SYMBOL(ioread8);
  15. unsigned int ioread16(const void __iomem *addr)
  16. {
  17. return readw(addr);
  18. }
  19. EXPORT_SYMBOL(ioread16);
  20. unsigned int ioread16be(const void __iomem *addr)
  21. {
  22. return be16_to_cpu(__raw_readw(addr));
  23. }
  24. EXPORT_SYMBOL(ioread16be);
  25. unsigned int ioread32(const void __iomem *addr)
  26. {
  27. return readl(addr);
  28. }
  29. EXPORT_SYMBOL(ioread32);
  30. unsigned int ioread32be(const void __iomem *addr)
  31. {
  32. return be32_to_cpu(__raw_readl(addr));
  33. }
  34. EXPORT_SYMBOL(ioread32be);
  35. void iowrite8(u8 val, void __iomem *addr)
  36. {
  37. writeb(val, addr);
  38. }
  39. EXPORT_SYMBOL(iowrite8);
  40. void iowrite16(u16 val, void __iomem *addr)
  41. {
  42. writew(val, addr);
  43. }
  44. EXPORT_SYMBOL(iowrite16);
  45. void iowrite16be(u16 val, void __iomem *addr)
  46. {
  47. __raw_writew(cpu_to_be16(val), addr);
  48. }
  49. EXPORT_SYMBOL(iowrite16be);
  50. void iowrite32(u32 val, void __iomem *addr)
  51. {
  52. writel(val, addr);
  53. }
  54. EXPORT_SYMBOL(iowrite32);
  55. void iowrite32be(u32 val, void __iomem *addr)
  56. {
  57. __raw_writel(cpu_to_be32(val), addr);
  58. }
  59. EXPORT_SYMBOL(iowrite32be);
  60. /*
  61. * These are the "repeat MMIO read/write" functions.
  62. * Note the "__raw" accesses, since we don't want to
  63. * convert to CPU byte order. We write in "IO byte
  64. * order" (we also don't have IO barriers).
  65. */
  66. static inline void mmio_insb(const void __iomem *addr, u8 *dst, int count)
  67. {
  68. while (--count >= 0) {
  69. u8 data = __raw_readb(addr);
  70. *dst = data;
  71. dst++;
  72. }
  73. }
  74. static inline void mmio_insw(const void __iomem *addr, u16 *dst, int count)
  75. {
  76. while (--count >= 0) {
  77. u16 data = __raw_readw(addr);
  78. *dst = data;
  79. dst++;
  80. }
  81. }
  82. static inline void mmio_insl(const void __iomem *addr, u32 *dst, int count)
  83. {
  84. while (--count >= 0) {
  85. u32 data = __raw_readl(addr);
  86. *dst = data;
  87. dst++;
  88. }
  89. }
  90. static inline void mmio_outsb(void __iomem *addr, const u8 *src, int count)
  91. {
  92. while (--count >= 0) {
  93. __raw_writeb(*src, addr);
  94. src++;
  95. }
  96. }
  97. static inline void mmio_outsw(void __iomem *addr, const u16 *src, int count)
  98. {
  99. while (--count >= 0) {
  100. __raw_writew(*src, addr);
  101. src++;
  102. }
  103. }
  104. static inline void mmio_outsl(void __iomem *addr, const u32 *src, int count)
  105. {
  106. while (--count >= 0) {
  107. __raw_writel(*src, addr);
  108. src++;
  109. }
  110. }
  111. void ioread8_rep(const void __iomem *addr, void *dst, unsigned long count)
  112. {
  113. mmio_insb(addr, dst, count);
  114. }
  115. EXPORT_SYMBOL(ioread8_rep);
  116. void ioread16_rep(const void __iomem *addr, void *dst, unsigned long count)
  117. {
  118. mmio_insw(addr, dst, count);
  119. }
  120. EXPORT_SYMBOL(ioread16_rep);
  121. void ioread32_rep(const void __iomem *addr, void *dst, unsigned long count)
  122. {
  123. mmio_insl(addr, dst, count);
  124. }
  125. EXPORT_SYMBOL(ioread32_rep);
  126. void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
  127. {
  128. mmio_outsb(addr, src, count);
  129. }
  130. EXPORT_SYMBOL(iowrite8_rep);
  131. void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
  132. {
  133. mmio_outsw(addr, src, count);
  134. }
  135. EXPORT_SYMBOL(iowrite16_rep);
  136. void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
  137. {
  138. mmio_outsl(addr, src, count);
  139. }
  140. EXPORT_SYMBOL(iowrite32_rep);