From owner-svn-src-projects@FreeBSD.ORG Mon Jun 18 04:00:57 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EA22E106566B; Mon, 18 Jun 2012 04:00:56 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CC4448FC18; Mon, 18 Jun 2012 04:00:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5I40u0a052233; Mon, 18 Jun 2012 04:00:56 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5I40u3J052230; Mon, 18 Jun 2012 04:00:56 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201206180400.q5I40u3J052230@svn.freebsd.org> From: Marcel Moolenaar Date: Mon, 18 Jun 2012 04:00:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237215 - projects/altix2/sys/kern X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jun 2012 04:00:57 -0000 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); }