[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [IA64] hypercall cleanup



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 2a2aaef05d70a033057deb47aa2cf3f709d754b8
# Parent  4f03ac87d31be45c95c8ff3d638ef6b059a2fa2c
[IA64] hypercall cleanup

hypercall clean up.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>

diff -r 4f03ac87d31b -r 2a2aaef05d70 
linux-2.6-xen-sparse/include/asm-ia64/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Fri Feb 24 15:23:33 2006
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Fri Feb 24 15:24:58 2006
@@ -46,6 +46,74 @@
  * Assembler stubs for hyper-calls.
  */
 
+#define _hypercall0(type, name)                                        \
+({                                                             \
+       long __res;                                             \
+       __asm__ __volatile__ (";;\n"                            \
+                             "mov r2=%1\n"                     \
+                             "break 0x1000 ;;\n"               \
+                             "mov %0=r8 ;;\n"                  \
+                             : "=r" (__res)                    \
+                             : "i" (__HYPERVISOR_##name)       \
+                             : "r2","r8"                       \
+                               "memory" );                     \
+       (type)__res;                                            \
+})
+
+#define _hypercall1(type, name, a1)                            \
+({                                                             \
+       long __res;                                             \
+       __asm__ __volatile__ (";;\n"                            \
+                             "mov r14=%2\n"                    \
+                             "mov r2=%1\n"                     \
+                             "break 0x1000 ;;\n"               \
+                             "mov %0=r8 ;;\n"                  \
+                             : "=r" (__res)                    \
+                             : "i" (__HYPERVISOR_##name),      \
+                               "r" ((unsigned long)(a1))       \
+                             : "r14","r2","r8",                \
+                               "memory" );                     \
+       (type)__res;                                            \
+})
+
+#define _hypercall2(type, name, a1, a2)                                \
+({                                                             \
+       long __res;                                             \
+       __asm__ __volatile__ (";;\n"                            \
+                             "mov r14=%2\n"                    \
+                             "mov r15=%3\n"                    \
+                             "mov r2=%1\n"                     \
+                             "break 0x1000 ;;\n"               \
+                             "mov %0=r8 ;;\n"                  \
+                             : "=r" (__res)                    \
+                             : "i" (__HYPERVISOR_##name),      \
+                               "r" ((unsigned long)(a1)),      \
+                               "r" ((unsigned long)(a2))       \
+                             : "r14","r15","r2","r8",          \
+                               "memory" );                     \
+       (type)__res;                                            \
+})
+
+#define _hypercall3(type, name, a1, a2, a3)                    \
+({                                                             \
+       long __res;                                             \
+       __asm__ __volatile__ (";;\n"                            \
+                             "mov r14=%2\n"                    \
+                             "mov r15=%3\n"                    \
+                             "mov r16=%4\n"                    \
+                             "mov r2=%1\n"                     \
+                             "break 0x1000 ;;\n"               \
+                             "mov %0=r8 ;;\n"                  \
+                             : "=r" (__res)                    \
+                             : "i" (__HYPERVISOR_##name),      \
+                               "r" ((unsigned long)(a1)),      \
+                               "r" ((unsigned long)(a2)),      \
+                               "r" ((unsigned long)(a3))       \
+                             : "r14","r15","r16","r2","r8",    \
+                               "memory" );                     \
+       (type)__res;                                            \
+})
+
 #if 0
 static inline int
 HYPERVISOR_set_trap_table(
@@ -369,24 +437,14 @@
 HYPERVISOR_memory_op(
     unsigned int cmd, void *arg)
 {
-    int ret;
-    __asm__ __volatile__ ( ";; mov r14=%2 ; mov r15=%3 ; mov r2=%1 ; break 
0x1000 ;; mov %0=r8 ;;"
-        : "=r" (ret)
-        : "i" (__HYPERVISOR_memory_op), "r"(cmd), "r"(arg)
-        : "r14","r15","r2","r8","memory" );
-    return ret;
+    return _hypercall2(int, memory_op, cmd, arg);
 }
 
 static inline int
 HYPERVISOR_event_channel_op(
     void *op)
 {
-    int ret;
-    __asm__ __volatile__ ( ";; mov r14=%2 ; mov r2=%1 ; break 0x1000 ;; mov 
%0=r8 ;;"
-        : "=r" (ret)
-        : "i" (__HYPERVISOR_event_channel_op), "r"(op)
-        : "r14","r2","r8","memory" );
-    return ret;
+    return _hypercall1(int, event_channel_op, op);
 }
 
 #if 0
@@ -414,12 +472,7 @@
 HYPERVISOR_console_io(
     int cmd, int count, char *str)
 {
-    int ret;
-    __asm__ __volatile__ ( ";; mov r14=%2 ; mov r15=%3 ; mov r16=%4 ; mov 
r2=%1 ; break 0x1000 ;; mov %0=r8 ;;"
-        : "=r" (ret)
-        : "i" (__HYPERVISOR_console_io), "r"(cmd), "r"(count), "r"(str)
-        : "r14","r15","r16","r2","r8","memory" );
-    return ret;
+    return _hypercall3(int, console_io, cmd, count, str);
 }
 
 #if 0
@@ -447,12 +500,7 @@
 HYPERVISOR_grant_table_op(
     unsigned int cmd, void *uop, unsigned int count)
 {
-    int ret;
-    __asm__ __volatile__ ( ";; mov r14=%2 ; mov r15=%3 ; mov r16=%4 ; mov 
r2=%1 ; break 0x1000 ;; mov %0=r8 ;;"
-        : "=r" (ret)
-        : "i" (__HYPERVISOR_grant_table_op), "r"(cmd), "r"(uop), "r"(count)
-        : "r14","r15","r16","r2","r8","memory" );
-    return ret;
+    return _hypercall3(int, grant_table_op, cmd, uop, count);
 }
 
 #if 0

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.