[SPARC64]: Add sun4v_cpu_qconf() hypervisor call.

Call it from register_one_mondo().

Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S
index bf40b06..f5c8a29 100644
--- a/arch/sparc64/kernel/entry.S
+++ b/arch/sparc64/kernel/entry.S
@@ -1772,3 +1772,15 @@
 	retl
 	 nop
 
+	/* %o0:	type
+	 * %o1:	queue paddr
+	 * %o2:	num queue entries
+	 *
+	 * returns %o0:	status
+	 */
+	.globl	sun4v_cpu_qconf
+sun4v_cpu_qconf:
+	mov	HV_FAST_CPU_QCONF, %o5
+	ta	HV_FAST_TRAP
+	retl
+	 nop
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index 4d9931d..e1729e5 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -939,25 +939,13 @@
 
 static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type)
 {
-	register unsigned long func __asm__("%o5");
-	register unsigned long arg0 __asm__("%o0");
-	register unsigned long arg1 __asm__("%o1");
-	register unsigned long arg2 __asm__("%o2");
+	unsigned long num_entries = 128;
+	unsigned long status;
 
-	func = HV_FAST_CPU_QCONF;
-	arg0 = type;
-	arg1 = paddr;
-	arg2 = 128; /* XXX Implied by Niagara queue offsets. XXX */
-	__asm__ __volatile__("ta	%8"
-			     : "=&r" (func), "=&r" (arg0),
-			       "=&r" (arg1), "=&r" (arg2)
-			     : "0" (func), "1" (arg0),
-			       "2" (arg1), "3" (arg2),
-			       "i" (HV_FAST_TRAP));
-
-	if (arg0 != HV_EOK) {
-		prom_printf("SUN4V: cpu_qconf(%lu) failed with error %lu\n",
-			    type, func);
+	status = sun4v_cpu_qconf(type, paddr, num_entries);
+	if (status != HV_EOK) {
+		prom_printf("SUN4V: sun4v_cpu_qconf(%lu:%lx:%lu) failed, "
+			    "err %lu\n", type, paddr, num_entries, status);
 		prom_halt();
 	}
 }
diff --git a/include/asm-sparc64/hypervisor.h b/include/asm-sparc64/hypervisor.h
index f14992ab..cd5fbcd 100644
--- a/include/asm-sparc64/hypervisor.h
+++ b/include/asm-sparc64/hypervisor.h
@@ -301,6 +301,12 @@
 #define  HV_CPU_QUEUE_RES_ERROR		 0x3e
 #define  HV_CPU_QUEUE_NONRES_ERROR	 0x3f
 
+#ifndef __ASSEMBLY__
+extern unsigned long sun4v_cpu_qconf(unsigned long type,
+				     unsigned long queue_paddr,
+				     unsigned long num_queue_entries);
+#endif
+
 /* cpu_qinfo()
  * TRAP:	HV_FAST_TRAP
  * FUNCTION:	HV_FAST_CPU_QINFO