[ppc64] add hcall interface


---

 /dev/null                          |    0 
 arch/ppc64/kernel/pSeries_hvCall.S |   36 ++++++++++++++++++++++++++++++++++++
 include/asm-ppc64/hvcall.h         |   18 ++++++++++++++++++
 3 files changed, 54 insertions(+)

diff -puN arch/ppc64/kernel/pSeries_hvCall.S~ppc64-add_hcall arch/ppc64/kernel/pSeries_hvCall.S
--- 25/arch/ppc64/kernel/pSeries_hvCall.S~ppc64-add_hcall	2004-01-13 23:22:57.000000000 -0800
+++ 25-akpm/arch/ppc64/kernel/pSeries_hvCall.S	2004-01-13 23:22:57.000000000 -0800
@@ -67,3 +67,39 @@ _GLOBAL(plpar_hcall_norets)
 	ld	r0,-8(r1)
 	mtcrf	0xff,r0
 	blr                     /* return r3 = status */
+
+
+/* long plpar_hcall_8arg_2ret(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 *out1);		 120(R1)
+
+ */
+
+	.text
+_GLOBAL(plpar_hcall_8arg_2ret)
+	mfcr	r0
+
+	ld              r11, 112(r1) /* put arg8 and out1 in R11 and R12 */
+	ld              r12, 120(r1)
+
+	std	r0,-8(r1)
+	stdu	r1,-32(r1)
+
+        std     r12,-8(r1)      /* Save out ptr */
+	
+	HSC                    /* invoke the hypervisor */
+
+        ld      r10,-8(r1)      /* Fetch r4 ret arg */
+        std     r4,0(r10)
+
+	ld	r1,0(r1)
+	ld	r0,-8(r1)
+	mtcrf	0xff,r0
+	blr                     /* return r3 = status */
diff -puN -L arch/ppc64/kernel/vio.c /dev/null /dev/null
diff -puN include/asm-ppc64/hvcall.h~ppc64-add_hcall include/asm-ppc64/hvcall.h
--- 25/include/asm-ppc64/hvcall.h~ppc64-add_hcall	2004-01-13 23:22:57.000000000 -0800
+++ 25-akpm/include/asm-ppc64/hvcall.h	2004-01-13 23:22:57.000000000 -0800
@@ -103,3 +103,21 @@ long plpar_hcall(unsigned long opcode,
  * other than status.  Slightly more efficient.
  */
 long plpar_hcall_norets(unsigned long opcode, ...);
+
+/* 
+ * Special hcall interface for ibmveth support.
+ * Takes 8 input parms. Returns a rc and stores the
+ * R4 return value in *out1.
+ */
+long plpar_hcall_8arg_2ret(unsigned long opcode,
+			   unsigned long arg1,
+		  	   unsigned long arg2,
+			   unsigned long arg3,
+			   unsigned long arg4,
+			   unsigned long arg5,
+			   unsigned long arg6,
+			   unsigned long arg7,
+			   unsigned long arg8,
+			   unsigned long *out1);
+
+

_