Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
[powerpc.git] / arch / powerpc / platforms / pseries / hvCall.S
index 176e8da..c9ff547 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * arch/ppc64/kernel/pSeries_hvCall.S
- *
  * This file contains the generic code to perform a call to the
  * pSeries LPAR hypervisor.
  * NOTE: this file will go away when we move to inline this work.
@@ -129,3 +127,103 @@ _GLOBAL(plpar_hcall_4out)
 
        mtcrf   0xff,r0
        blr                             /* return r3 = status */
+
+/* plpar_hcall_7arg_7ret(unsigned long opcode,         R3
+                        unsigned long arg1,            R4
+                        unsigned long arg2,            R5
+                        unsigned long arg3,            R6
+                        unsigned long arg4,            R7
+                        unsigned long arg5,            R8
+                        unsigned long arg6,            R9
+                        unsigned long arg7,            R10
+                        unsigned long *out1,           112(R1)
+                        unsigned long *out2,           110(R1)
+                        unsigned long *out3,           108(R1)
+                        unsigned long *out4,           106(R1)
+                        unsigned long *out5,           104(R1)
+                        unsigned long *out6,           102(R1)
+                        unsigned long *out7);          100(R1)
+*/
+_GLOBAL(plpar_hcall_7arg_7ret)
+       HMT_MEDIUM
+
+       mfcr    r0
+       stw     r0,8(r1)
+
+       HVSC                            /* invoke the hypervisor */
+
+       lwz     r0,8(r1)
+
+       ld      r11,STK_PARM(r11)(r1)   /* Fetch r4 ret arg */
+       std     r4,0(r11)
+       ld      r11,STK_PARM(r12)(r1)   /* Fetch r5 ret arg */
+       std     r5,0(r11)
+       ld      r11,STK_PARM(r13)(r1)   /* Fetch r6 ret arg */
+       std     r6,0(r11)
+       ld      r11,STK_PARM(r14)(r1)   /* Fetch r7 ret arg */
+       std     r7,0(r11)
+       ld      r11,STK_PARM(r15)(r1)   /* Fetch r8 ret arg */
+       std     r8,0(r11)
+       ld      r11,STK_PARM(r16)(r1)   /* Fetch r9 ret arg */
+       std     r9,0(r11)
+       ld      r11,STK_PARM(r17)(r1)   /* Fetch r10 ret arg */
+       std     r10,0(r11)
+
+       mtcrf   0xff,r0
+
+       blr                             /* return r3 = status */
+
+/* plpar_hcall_9arg_9ret(unsigned long opcode,         R3
+                        unsigned long arg1,            R4
+                        unsigned long arg2,            R5
+                        unsigned long arg3,            R6
+                        unsigned long arg4,            R7
+                        unsigned long arg5,            R8
+                        unsigned long arg6,            R9
+                        unsigned long arg7,            R10
+                        unsigned long arg8,            112(R1)
+                        unsigned long arg9,            110(R1)
+                        unsigned long *out1,           108(R1)
+                        unsigned long *out2,           106(R1)
+                        unsigned long *out3,           104(R1)
+                        unsigned long *out4,           102(R1)
+                        unsigned long *out5,           100(R1)
+                        unsigned long *out6,            98(R1)
+                        unsigned long *out7);           96(R1)
+                        unsigned long *out8,            94(R1)
+                        unsigned long *out9,            92(R1)
+*/
+_GLOBAL(plpar_hcall_9arg_9ret)
+       HMT_MEDIUM
+
+       mfcr    r0
+       stw     r0,8(r1)
+
+       ld      r11,STK_PARM(r11)(r1)    /* put arg8 in R11 */
+       ld      r12,STK_PARM(r12)(r1)    /* put arg9 in R12 */
+
+       HVSC                            /* invoke the hypervisor */
+
+       ld      r0,STK_PARM(r13)(r1)    /* Fetch r4 ret arg */
+       stdx    r4,r0,r0
+       ld      r0,STK_PARM(r14)(r1)    /* Fetch r5 ret arg */
+       stdx    r5,r0,r0
+       ld      r0,STK_PARM(r15)(r1)    /* Fetch r6 ret arg */
+       stdx    r6,r0,r0
+       ld      r0,STK_PARM(r16)(r1)    /* Fetch r7 ret arg */
+       stdx    r7,r0,r0
+       ld      r0,STK_PARM(r17)(r1)    /* Fetch r8 ret arg */
+       stdx    r8,r0,r0
+       ld      r0,STK_PARM(r18)(r1)    /* Fetch r9 ret arg */
+       stdx    r9,r0,r0
+       ld      r0,STK_PARM(r19)(r1)    /* Fetch r10 ret arg */
+       stdx    r10,r0,r0
+       ld      r0,STK_PARM(r20)(r1)    /* Fetch r11 ret arg */
+       stdx    r11,r0,r0
+       ld      r0,STK_PARM(r21)(r1)    /* Fetch r12 ret arg */
+       stdx    r12,r0,r0
+
+       lwz     r0,8(r1)
+       mtcrf   0xff,r0
+
+       blr                             /* return r3 = status */