iomap.c 3.2 KB

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