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