fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / asm-s390 / io.h
index b05825d..efb7de9 100644 (file)
 static inline unsigned long virt_to_phys(volatile void * address)
 {
        unsigned long real_address;
-       __asm__ (
+       asm volatile(
 #ifndef __s390x__
-                "   lra    %0,0(%1)\n"
-                 "   jz     0f\n"
-                 "   sr     %0,%0\n"
+                "      lra     %0,0(%1)\n"
 #else /* __s390x__ */
-                "   lrag   %0,0(%1)\n"
-                 "   jz     0f\n"
-                 "   slgr   %0,%0\n"
+                "      lrag    %0,0(%1)\n"
 #endif /* __s390x__ */
+                "      jz      0f\n"
+                "      la      %0,0\n"
                  "0:"
-                 : "=a" (real_address) : "a" (address) : "cc" );
+                : "=a" (real_address) : "a" (address) : "cc");
         return real_address;
 }
 
@@ -47,11 +45,6 @@ static inline void * phys_to_virt(unsigned long address)
         return __io_virt(address);
 }
 
-/*
- * Change "struct page" to physical address.
- */
-#define page_to_phys(page)     ((page - mem_map) << PAGE_SHIFT)
-
 extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
 
 static inline void * ioremap (unsigned long offset, unsigned long size)
@@ -86,20 +79,25 @@ extern void iounmap(void *addr);
 #define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
 #define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
 #define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
+#define readq(addr) (*(volatile unsigned long long *) __io_virt(addr))
 
 #define readb_relaxed(addr) readb(addr)
 #define readw_relaxed(addr) readw(addr)
 #define readl_relaxed(addr) readl(addr)
+#define readq_relaxed(addr) readq(addr)
 #define __raw_readb readb
 #define __raw_readw readw
 #define __raw_readl readl
+#define __raw_readq readq
 
 #define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
 #define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
 #define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
+#define writeq(b,addr) (*(volatile unsigned long long *) __io_virt(addr) = (b))
 #define __raw_writeb writeb
 #define __raw_writew writew
 #define __raw_writel writel
+#define __raw_writeq writeq
 
 #define memset_io(a,b,c)        memset(__io_virt(a),(b),(c))
 #define memcpy_fromio(a,b,c)    memcpy((a),__io_virt(b),(c))
@@ -111,7 +109,7 @@ extern void iounmap(void *addr);
 #define outb(x,addr) ((void) writeb(x,addr))
 #define outb_p(x,addr) outb(x,addr)
 
-#define mmiowb()
+#define mmiowb()       do { } while (0)
 
 /*
  * Convert a physical pointer to a virtual kernel pointer for /dev/mem