[SPARC64]: First cut at SUN4V PCI IOMMU handling.

Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/arch/sparc64/kernel/pci_sun4v_asm.S b/arch/sparc64/kernel/pci_sun4v_asm.S
index 2f11471..4a12341 100644
--- a/arch/sparc64/kernel/pci_sun4v_asm.S
+++ b/arch/sparc64/kernel/pci_sun4v_asm.S
@@ -12,9 +12,7 @@
 	 */
 	.globl	pci_sun4v_devino_to_sysino
 pci_sun4v_devino_to_sysino:
-	mov	%o1, %o2
-	mov	%o0, %o1
-	mov	HV_FAST_INTR_DEVINO2SYSINO, %o0
+	mov	HV_FAST_INTR_DEVINO2SYSINO, %o5
 	ta	HV_FAST_TRAP
 	retl
 	 mov	%o1, %o0
@@ -29,12 +27,7 @@
 	 */
 	.globl	pci_sun4v_iommu_map
 pci_sun4v_iommu_map:
-	mov	%o4, %o5
-	mov	%o3, %o4
-	mov	%o2, %o3
-	mov	%o1, %o2
-	mov	%o0, %o1
-	mov	HV_FAST_PCI_IOMMU_MAP, %o0
+	mov	HV_FAST_PCI_IOMMU_MAP, %o5
 	ta	HV_FAST_TRAP
 	retl
 	 mov	%o1, %o0
@@ -47,15 +40,29 @@
 	 */
 	.globl	pci_sun4v_iommu_demap
 pci_sun4v_iommu_demap:
-	mov	%o2, %o3
-	mov	%o1, %o2
-	mov	%o0, %o1
-	mov	HV_FAST_PCI_IOMMU_DEMAP, %o0
+	mov	HV_FAST_PCI_IOMMU_DEMAP, %o5
 	ta	HV_FAST_TRAP
 	retl
 	 mov	%o1, %o0
 
 	/* %o0: devhandle
+	 * %o1:	tsbid
+	 * %o2:	&io_attributes
+	 * %o3:	&real_address
+	 *
+	 * returns %o0:	status
+	 */
+	.globl	pci_sun4v_iommu_getmap
+pci_sun4v_iommu_getmap:
+	mov	%o2, %o4
+	mov	HV_FAST_PCI_IOMMU_GETMAP, %o5
+	ta	HV_FAST_TRAP
+	stx	%o1, [%o4]
+	stx	%o2, [%o3]
+	retl
+	 mov	%o0, %o0
+
+	/* %o0: devhandle
 	 * %o1:	pci_device
 	 * %o2:	pci_config_offset
 	 * %o3:	size
@@ -67,11 +74,7 @@
 	 */
 	.globl	pci_sun4v_config_get
 pci_sun4v_config_get:
-	mov	%o3, %o4
-	mov	%o2, %o3
-	mov	%o1, %o2
-	mov	%o0, %o1
-	mov	HV_FAST_PCI_CONFIG_GET, %o0
+	mov	HV_FAST_PCI_CONFIG_GET, %o5
 	ta	HV_FAST_TRAP
 	brnz,a,pn %o1, 1f
 	 mov	-1, %o2
@@ -91,14 +94,9 @@
 	 */
 	.globl	pci_sun4v_config_put
 pci_sun4v_config_put:
-	mov	%o3, %o4
-	mov	%o2, %o3
-	mov	%o1, %o2
-	mov	%o0, %o1
-	mov	HV_FAST_PCI_CONFIG_PUT, %o0
+	mov	HV_FAST_PCI_CONFIG_PUT, %o5
 	ta	HV_FAST_TRAP
 	brnz,a,pn %o1, 1f
 	 mov	-1, %o1
 1:	retl
 	 mov	%o1, %o0
-