iomap.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * ppc64 "iomap" interface implementation.
  4. *
  5. * (C) Copyright 2004 Linus Torvalds
  6. */
  7. #include <linux/pci.h>
  8. #include <linux/mm.h>
  9. #include <linux/export.h>
  10. #include <asm/io.h>
  11. #include <asm/pci-bridge.h>
  12. #include <asm/isa-bridge.h>
  13. /*
  14. * Here comes the ppc64 implementation of the IOMAP
  15. * interfaces.
  16. */
  17. unsigned int ioread8(void __iomem *addr)
  18. {
  19. return readb(addr);
  20. }
  21. unsigned int ioread16(void __iomem *addr)
  22. {
  23. return readw(addr);
  24. }
  25. unsigned int ioread16be(void __iomem *addr)
  26. {
  27. return readw_be(addr);
  28. }
  29. unsigned int ioread32(void __iomem *addr)
  30. {
  31. return readl(addr);
  32. }
  33. unsigned int ioread32be(void __iomem *addr)
  34. {
  35. return readl_be(addr);
  36. }
  37. EXPORT_SYMBOL(ioread8);
  38. EXPORT_SYMBOL(ioread16);
  39. EXPORT_SYMBOL(ioread16be);
  40. EXPORT_SYMBOL(ioread32);
  41. EXPORT_SYMBOL(ioread32be);
  42. #ifdef __powerpc64__
  43. u64 ioread64(void __iomem *addr)
  44. {
  45. return readq(addr);
  46. }
  47. u64 ioread64be(void __iomem *addr)
  48. {
  49. return readq_be(addr);
  50. }
  51. EXPORT_SYMBOL(ioread64);
  52. EXPORT_SYMBOL(ioread64be);
  53. #endif /* __powerpc64__ */
  54. void iowrite8(u8 val, void __iomem *addr)
  55. {
  56. writeb(val, addr);
  57. }
  58. void iowrite16(u16 val, void __iomem *addr)
  59. {
  60. writew(val, addr);
  61. }
  62. void iowrite16be(u16 val, void __iomem *addr)
  63. {
  64. writew_be(val, addr);
  65. }
  66. void iowrite32(u32 val, void __iomem *addr)
  67. {
  68. writel(val, addr);
  69. }
  70. void iowrite32be(u32 val, void __iomem *addr)
  71. {
  72. writel_be(val, addr);
  73. }
  74. EXPORT_SYMBOL(iowrite8);
  75. EXPORT_SYMBOL(iowrite16);
  76. EXPORT_SYMBOL(iowrite16be);
  77. EXPORT_SYMBOL(iowrite32);
  78. EXPORT_SYMBOL(iowrite32be);
  79. #ifdef __powerpc64__
  80. void iowrite64(u64 val, void __iomem *addr)
  81. {
  82. writeq(val, addr);
  83. }
  84. void iowrite64be(u64 val, void __iomem *addr)
  85. {
  86. writeq_be(val, addr);
  87. }
  88. EXPORT_SYMBOL(iowrite64);
  89. EXPORT_SYMBOL(iowrite64be);
  90. #endif /* __powerpc64__ */
  91. /*
  92. * These are the "repeat read/write" functions. Note the
  93. * non-CPU byte order. We do things in "IO byteorder"
  94. * here.
  95. *
  96. * FIXME! We could make these do EEH handling if we really
  97. * wanted. Not clear if we do.
  98. */
  99. void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
  100. {
  101. readsb(addr, dst, count);
  102. }
  103. void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
  104. {
  105. readsw(addr, dst, count);
  106. }
  107. void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
  108. {
  109. readsl(addr, dst, count);
  110. }
  111. EXPORT_SYMBOL(ioread8_rep);
  112. EXPORT_SYMBOL(ioread16_rep);
  113. EXPORT_SYMBOL(ioread32_rep);
  114. void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
  115. {
  116. writesb(addr, src, count);
  117. }
  118. void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
  119. {
  120. writesw(addr, src, count);
  121. }
  122. void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
  123. {
  124. writesl(addr, src, count);
  125. }
  126. EXPORT_SYMBOL(iowrite8_rep);
  127. EXPORT_SYMBOL(iowrite16_rep);
  128. EXPORT_SYMBOL(iowrite32_rep);
  129. void __iomem *ioport_map(unsigned long port, unsigned int len)
  130. {
  131. return (void __iomem *) (port + _IO_BASE);
  132. }
  133. void ioport_unmap(void __iomem *addr)
  134. {
  135. /* Nothing to do */
  136. }
  137. EXPORT_SYMBOL(ioport_map);
  138. EXPORT_SYMBOL(ioport_unmap);
  139. #ifdef CONFIG_PCI
  140. void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
  141. {
  142. if (isa_vaddr_is_ioport(addr))
  143. return;
  144. if (pcibios_vaddr_is_ioport(addr))
  145. return;
  146. iounmap(addr);
  147. }
  148. EXPORT_SYMBOL(pci_iounmap);
  149. #endif /* CONFIG_PCI */