io.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. * include/asm-s390/io.h
  3. *
  4. * S390 version
  5. * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  6. * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  7. *
  8. * Derived from "include/asm-i386/io.h"
  9. */
  10. #ifndef _S390_IO_H
  11. #define _S390_IO_H
  12. #ifdef __KERNEL__
  13. #include <linux/vmalloc.h>
  14. #include <asm/page.h>
  15. #define IO_SPACE_LIMIT 0xffffffff
  16. #define __io_virt(x) ((void *)(PAGE_OFFSET | (unsigned long)(x)))
  17. /*
  18. * Change virtual addresses to physical addresses and vv.
  19. * These are pretty trivial
  20. */
  21. static inline unsigned long virt_to_phys(volatile void * address)
  22. {
  23. unsigned long real_address;
  24. asm volatile(
  25. " lra %0,0(%1)\n"
  26. " jz 0f\n"
  27. " la %0,0\n"
  28. "0:"
  29. : "=a" (real_address) : "a" (address) : "cc");
  30. return real_address;
  31. }
  32. static inline void * phys_to_virt(unsigned long address)
  33. {
  34. return __io_virt(address);
  35. }
  36. extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
  37. static inline void * ioremap (unsigned long offset, unsigned long size)
  38. {
  39. return __ioremap(offset, size, 0);
  40. }
  41. /*
  42. * This one maps high address device memory and turns off caching for that area.
  43. * it's useful if some control registers are in such an area and write combining
  44. * or read caching is not desirable:
  45. */
  46. static inline void * ioremap_nocache (unsigned long offset, unsigned long size)
  47. {
  48. return __ioremap(offset, size, 0);
  49. }
  50. extern void iounmap(void *addr);
  51. /*
  52. * IO bus memory addresses are also 1:1 with the physical address
  53. */
  54. #define virt_to_bus virt_to_phys
  55. #define bus_to_virt phys_to_virt
  56. /*
  57. * readX/writeX() are used to access memory mapped devices. On some
  58. * architectures the memory mapped IO stuff needs to be accessed
  59. * differently.
  60. */
  61. #define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
  62. #define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
  63. #define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
  64. #define readq(addr) (*(volatile unsigned long long *) __io_virt(addr))
  65. #define readb_relaxed(addr) readb(addr)
  66. #define readw_relaxed(addr) readw(addr)
  67. #define readl_relaxed(addr) readl(addr)
  68. #define readq_relaxed(addr) readq(addr)
  69. #define __raw_readb readb
  70. #define __raw_readw readw
  71. #define __raw_readl readl
  72. #define __raw_readq readq
  73. #define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
  74. #define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
  75. #define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
  76. #define writeq(b,addr) (*(volatile unsigned long long *) __io_virt(addr) = (b))
  77. #define __raw_writeb writeb
  78. #define __raw_writew writew
  79. #define __raw_writel writel
  80. #define __raw_writeq writeq
  81. #define memset_io(a,b,c) memset(__io_virt(a),(b),(c))
  82. #define memcpy_fromio(a,b,c) memcpy((a),__io_virt(b),(c))
  83. #define memcpy_toio(a,b,c) memcpy(__io_virt(a),(b),(c))
  84. #define inb_p(addr) readb(addr)
  85. #define inb(addr) readb(addr)
  86. #define outb(x,addr) ((void) writeb(x,addr))
  87. #define outb_p(x,addr) outb(x,addr)
  88. #define mmiowb() do { } while (0)
  89. /*
  90. * Convert a physical pointer to a virtual kernel pointer for /dev/mem
  91. * access
  92. */
  93. #define xlate_dev_mem_ptr(p) __va(p)
  94. /*
  95. * Convert a virtual cached pointer to an uncached pointer
  96. */
  97. #define xlate_dev_kmem_ptr(p) p
  98. #endif /* __KERNEL__ */
  99. #endif