Date: Mon, 18 Jun 2012 04:00:56 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r237215 - projects/altix2/sys/kern Message-ID: <201206180400.q5I40u3J052230@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206180400.q5I40u3J052230>