From owner-svn-src-projects@FreeBSD.ORG Sun Nov 17 03:08:18 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 94489B8C; Sun, 17 Nov 2013 03:08:18 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 84FC42400; Sun, 17 Nov 2013 03:08:18 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rAH38IQk094060; Sun, 17 Nov 2013 03:08:18 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rAH38IFX094058; Sun, 17 Nov 2013 03:08:18 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201311170308.rAH38IFX094058@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 17 Nov 2013 03:08:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r258248 - in projects/altix2/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.16 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: Sun, 17 Nov 2013 03:08:18 -0000 Author: marcel Date: Sun Nov 17 03:08:17 2013 New Revision: 258248 URL: http://svnweb.freebsd.org/changeset/base/258248 Log: Add some more tag accessor functions: . busdma_tag_get_align() . busdma_tag_get_bndry() Add an I/O MMU private field to the MD's segment. The implementation for sparc64 uses it to save a pointer to the corresponding struct resource. I may remove it later, since it doesn't seem to be necessary per se. Modified: projects/altix2/sys/kern/subr_busdma.c projects/altix2/sys/sys/busdma.h Modified: projects/altix2/sys/kern/subr_busdma.c ============================================================================== --- projects/altix2/sys/kern/subr_busdma.c Sun Nov 17 02:26:09 2013 (r258247) +++ projects/altix2/sys/kern/subr_busdma.c Sun Nov 17 03:08:17 2013 (r258248) @@ -72,6 +72,7 @@ struct busdma_md_seg { vm_paddr_t mds_paddr; vm_offset_t mds_vaddr; vm_size_t mds_size; + uintptr_t mds_iommu; }; struct busdma_md { @@ -625,6 +626,24 @@ busdma_tag_destroy(struct busdma_tag *ta } bus_addr_t +busdma_tag_get_align(struct busdma_tag *tag) +{ + + CTR2(KTR_BUSDMA, "%s: tag=%p", __func__, tag); + + return ((tag != NULL) ? tag->dt_align : 0UL); +} + +bus_addr_t +busdma_tag_get_bndry(struct busdma_tag *tag) +{ + + CTR2(KTR_BUSDMA, "%s: tag=%p", __func__, tag); + + return ((tag != NULL) ? tag->dt_bndry : 0UL); +} + +bus_addr_t busdma_tag_get_maxaddr(struct busdma_tag *tag) { @@ -695,6 +714,19 @@ busdma_md_get_flags(struct busdma_md *md return ((md != NULL) ? md->md_flags : 0); } +uintptr_t +busdma_md_get_iommu(struct busdma_md *md, u_int idx) +{ + struct busdma_md_seg *seg; + uintptr_t iommu; + + CTR3(KTR_BUSDMA, "%s: md=%p, idx=%u", __func__, md, idx); + + seg = _busdma_md_get_seg(md, idx); + iommu = (seg != NULL) ? seg->mds_iommu : 0UL; + return (iommu); +} + u_int busdma_md_get_nsegs(struct busdma_md *md) { @@ -755,6 +787,24 @@ busdma_md_get_vaddr(struct busdma_md *md return (vaddr); } +uintptr_t +busdma_md_set_iommu(struct busdma_md *md, u_int idx, uintptr_t iommu) +{ + struct busdma_md_seg *seg; + uintptr_t prev; + + CTR4(KTR_BUSDMA, "%s: md=%p, idx=%u, iommu=%jx", __func__, md, idx, + (uintmax_t)iommu); + + seg = _busdma_md_get_seg(md, idx); + if (seg != NULL) { + prev = seg->mds_iommu; + seg->mds_iommu = iommu; + } else + prev = 0UL; + return (prev); +} + int busdma_md_load_ccb(busdma_md_t md, union ccb *ccb, busdma_callback_f cb, void *arg, u_int flags) Modified: projects/altix2/sys/sys/busdma.h ============================================================================== --- projects/altix2/sys/sys/busdma.h Sun Nov 17 02:26:09 2013 (r258247) +++ projects/altix2/sys/sys/busdma.h Sun Nov 17 03:08:17 2013 (r258248) @@ -93,6 +93,8 @@ int busdma_tag_derive(busdma_tag_t tag, */ int busdma_tag_destroy(busdma_tag_t tag); +bus_addr_t busdma_tag_get_align(busdma_tag_t tag); +bus_addr_t busdma_tag_get_bndry(busdma_tag_t tag); bus_addr_t busdma_tag_get_maxaddr(busdma_tag_t tag); /* @@ -121,9 +123,11 @@ u_int busdma_md_get_flags(busdma_md_t md u_int busdma_md_get_nsegs(busdma_md_t md); busdma_tag_t busdma_md_get_tag(busdma_md_t md); bus_addr_t busdma_md_get_busaddr(busdma_md_t md, u_int idx); +uintptr_t busdma_md_get_iommu(busdma_md_t md, u_int idx); vm_paddr_t busdma_md_get_paddr(busdma_md_t md, u_int idx); -vm_offset_t busdma_md_get_vaddr(busdma_md_t md, u_int idx); vm_size_t busdma_md_get_size(busdma_md_t md, u_int idx); +vm_offset_t busdma_md_get_vaddr(busdma_md_t md, u_int idx); +uintptr_t busdma_md_set_iommu(busdma_md_t md, u_int idx, uintptr_t); static __inline void * busdma_md_get_pointer(busdma_md_t md, u_int idx)