[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |