home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-s390 / io.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.3 KB  |  130 lines

  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.  
  11. #ifndef _S390_IO_H
  12. #define _S390_IO_H
  13.  
  14. #ifdef __KERNEL__
  15.  
  16. #include <linux/vmalloc.h>
  17. #include <asm/page.h>
  18.  
  19. #define IO_SPACE_LIMIT 0xffffffff
  20.  
  21. #define __io_virt(x)            ((void *)(PAGE_OFFSET | (unsigned long)(x)))
  22.  
  23. /*
  24.  * Change virtual addresses to physical addresses and vv.
  25.  * These are pretty trivial
  26.  */
  27. static inline unsigned long virt_to_phys(volatile void * address)
  28. {
  29.     unsigned long real_address;
  30.     __asm__ (
  31. #ifndef __s390x__
  32.          "   lra    %0,0(%1)\n"
  33.                  "   jz     0f\n"
  34.                  "   sr     %0,%0\n"
  35. #else /* __s390x__ */
  36.          "   lrag   %0,0(%1)\n"
  37.                  "   jz     0f\n"
  38.                  "   slgr   %0,%0\n"
  39. #endif /* __s390x__ */
  40.                  "0:"
  41.                  : "=a" (real_address) : "a" (address) : "cc" );
  42.         return real_address;
  43. }
  44.  
  45. static inline void * phys_to_virt(unsigned long address)
  46. {
  47.         return __io_virt(address);
  48. }
  49.  
  50. /*
  51.  * Change "struct page" to physical address.
  52.  */
  53. #define page_to_phys(page)    ((page - mem_map) << PAGE_SHIFT)
  54.  
  55. extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
  56.  
  57. static inline void * ioremap (unsigned long offset, unsigned long size)
  58. {
  59.         return __ioremap(offset, size, 0);
  60. }
  61.  
  62. /*
  63.  * This one maps high address device memory and turns off caching for that area.
  64.  * it's useful if some control registers are in such an area and write combining
  65.  * or read caching is not desirable:
  66.  */
  67. static inline void * ioremap_nocache (unsigned long offset, unsigned long size)
  68. {
  69.         return __ioremap(offset, size, 0);
  70. }
  71.  
  72. extern void iounmap(void *addr);
  73.  
  74. /*
  75.  * IO bus memory addresses are also 1:1 with the physical address
  76.  */
  77. #define virt_to_bus virt_to_phys
  78. #define bus_to_virt phys_to_virt
  79.  
  80. /*
  81.  * readX/writeX() are used to access memory mapped devices. On some
  82.  * architectures the memory mapped IO stuff needs to be accessed
  83.  * differently.
  84.  */
  85.  
  86. #define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
  87. #define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
  88. #define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
  89.  
  90. #define readb_relaxed(addr) readb(addr)
  91. #define readw_relaxed(addr) readw(addr)
  92. #define readl_relaxed(addr) readl(addr)
  93. #define __raw_readb readb
  94. #define __raw_readw readw
  95. #define __raw_readl readl
  96.  
  97. #define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
  98. #define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
  99. #define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
  100. #define __raw_writeb writeb
  101. #define __raw_writew writew
  102. #define __raw_writel writel
  103.  
  104. #define memset_io(a,b,c)        memset(__io_virt(a),(b),(c))
  105. #define memcpy_fromio(a,b,c)    memcpy((a),__io_virt(b),(c))
  106. #define memcpy_toio(a,b,c)      memcpy(__io_virt(a),(b),(c))
  107.  
  108. #define inb_p(addr) readb(addr)
  109. #define inb(addr) readb(addr)
  110.  
  111. #define outb(x,addr) ((void) writeb(x,addr))
  112. #define outb_p(x,addr) outb(x,addr)
  113.  
  114. #define mmiowb()
  115.  
  116. /*
  117.  * Convert a physical pointer to a virtual kernel pointer for /dev/mem
  118.  * access
  119.  */
  120. #define xlate_dev_mem_ptr(p)    __va(p)
  121.  
  122. /*
  123.  * Convert a virtual cached pointer to an uncached pointer
  124.  */
  125. #define xlate_dev_kmem_ptr(p)    p
  126.  
  127. #endif /* __KERNEL__ */
  128.  
  129. #endif
  130.