svn commit: r237215 - projects/altix2/sys/kern

Marcel Moolenaar marcel at FreeBSD.org
Mon Jun 18 04:00:57 UTC 2012


Author: marcel
Date: Mon Jun 18 04:00:56 2012
New Revision: 237215
URL: http://svn.freebsd.org/changeset/base/237215

Log:
  Have the map method apply to a segment for now.

Modified:
  projects/altix2/sys/kern/busdma_if.m
  projects/altix2/sys/kern/subr_busdma.c

Modified: projects/altix2/sys/kern/busdma_if.m
==============================================================================
--- projects/altix2/sys/kern/busdma_if.m	Mon Jun 18 02:08:04 2012	(r237214)
+++ projects/altix2/sys/kern/busdma_if.m	Mon Jun 18 04:00:56 2012	(r237215)
@@ -40,7 +40,14 @@ CODE {
 	}
 
 	static int
-	default_iommu_map_unmap(device_t dev, busdma_md_t md)
+	default_iommu_map(device_t dev, busdma_md_t md, u_int idx,
+	    bus_addr_t *ba_p)
+	{
+		return (0);
+	}
+
+	static int
+	default_iommu_unmap(device_t dev, busdma_md_t md)
 	{
 		return (0);
 	}
@@ -54,9 +61,11 @@ METHOD int iommu_xlate {
 METHOD int iommu_map {
 	device_t	dev;
 	busdma_md_t	md;
-} DEFAULT default_iommu_map_unmap;
+	u_int		idx;
+	bus_addr_t	*ba_p;
+} DEFAULT default_iommu_map;
 
 METHOD int iommu_unmap {
 	device_t	dev;
 	busdma_md_t	md;
-} DEFAULT default_iommu_map_unmap;
+} DEFAULT default_iommu_unmap;

Modified: projects/altix2/sys/kern/subr_busdma.c
==============================================================================
--- projects/altix2/sys/kern/subr_busdma.c	Mon Jun 18 02:08:04 2012	(r237214)
+++ projects/altix2/sys/kern/subr_busdma.c	Mon Jun 18 04:00:56 2012	(r237215)
@@ -241,40 +241,44 @@ _busdma_iommu_xlate(device_t leaf, struc
 }
 
 static int
-_busdma_iommu_map_r(device_t dev, struct busdma_md *md)
+_busdma_iommu_map_r(device_t dev, struct busdma_md *md, u_int idx,
+    bus_addr_t *ba_p)
 {
-	struct busdma_md_seg *seg;
-	u_int idx;
 	int error;
 
-	if (dev == root_bus) {
-		/*
-		 * A bus address and a physical address are one and the same
-		 * at this level.
-		 */
-		for (idx = 0; idx < md->md_nsegs; idx++) {
-			seg = &md->md_seg[idx];
-			seg->mds_busaddr = seg->mds_paddr;
-		}
-		_busdma_md_dump(__func__, dev, md);
+	if (dev == root_bus)
 		return (0);
-	}
 
-	error = _busdma_iommu_map_r(device_get_parent(dev), md);
-	if (!error) {
-		error = BUSDMA_IOMMU_MAP(dev, md);
-		_busdma_md_dump(__func__, dev, md);
-	}
+	error = _busdma_iommu_map_r(device_get_parent(dev), md, idx, ba_p);
+	if (!error)
+		error = BUSDMA_IOMMU_MAP(dev, md, idx, ba_p);
 	return (error);
 }
 
 static int
 _busdma_iommu_map(device_t leaf, struct busdma_md *md)
 {
+	struct busdma_md_seg *seg;
+	device_t dev;
+	u_int idx;
 	int error;
  
-	_busdma_md_dump(__func__, leaf, md);
-	error = _busdma_iommu_map_r(device_get_parent(leaf), md);
+	_busdma_md_dump(__func__, root_bus, md);
+	dev = device_get_parent(leaf);
+	error = 0;
+	for (idx = 0; idx < md->md_nsegs; idx++) {
+		seg = &md->md_seg[idx];
+		/*
+		 * A bus address and a physical address are one and the same
+		 * at this level.
+		 */
+		seg->mds_busaddr = seg->mds_paddr;
+		error = _busdma_iommu_map_r(dev, md, idx, &seg->mds_busaddr);
+		if (error)
+			break;
+	}
+	if (!error)
+		_busdma_md_dump(__func__, leaf, md);
 	return (error);
 }
 


More information about the svn-src-projects mailing list