From owner-svn-src-projects@FreeBSD.ORG Sun Dec 30 00:49:57 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 687BCB3C; Sun, 30 Dec 2012 00:49:57 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 420FB8FC0C; Sun, 30 Dec 2012 00:49:57 +0000 (UTC) Received: from svn.freebsd.org (svn.FreeBSD.org [8.8.178.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBU0nvtO084933; Sun, 30 Dec 2012 00:49:57 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBU0nune084931; Sun, 30 Dec 2012 00:49:56 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201212300049.qBU0nune084931@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 30 Dec 2012 00:49:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244846 - 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.14 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, 30 Dec 2012 00:49:57 -0000 Author: marcel Date: Sun Dec 30 00:49:56 2012 New Revision: 244846 URL: http://svnweb.freebsd.org/changeset/base/244846 Log: o Redefine the BUSDMA_SYNC_ operations to not conflict with the BUS_DMASYNC_ operations. o Add BUSDMA_ALLOC_ZERO for allocation of pre-zeroed memory. 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 Dec 30 00:47:30 2012 (r244845) +++ projects/altix2/sys/kern/subr_busdma.c Sun Dec 30 00:49:56 2012 (r244846) @@ -161,6 +161,8 @@ SYSINIT(busdma_kmem, SI_SUB_KMEM, SI_ORD /* Section 3.2: Debugging & tracing. */ +#define BUSDMA_DEBUG 1 + static void _busdma_mtag_dump(const char *func, device_t dev, struct busdma_mtag *mtag) { @@ -235,6 +237,7 @@ _busdma_data_dump(const char *func, stru continue; pa = MAX(seg->mds_busaddr, addr); sz = MIN(seg->mds_busaddr + seg->mds_size, addr + len) - pa; + sz = MIN(sz, 128); /* XXX arbitrary limit */ va = (void *)(seg->mds_vaddr + (pa - seg->mds_busaddr)); printf("%#jx: %*D\n", (uintmax_t)pa, sz, va, " "); } @@ -731,7 +734,7 @@ busdma_mem_alloc(struct busdma_tag *tag, struct busdma_mtag mtag; vm_size_t maxsz; u_int idx; - int error; + int error, mflags; CTR3(KTR_BUSDMA, "%s: tag=%p, flags=%#x", __func__, tag, flags); @@ -754,6 +757,9 @@ busdma_mem_alloc(struct busdma_tag *tag, goto fail; } + mflags = 0; + mflags |= (flags & BUSDMA_ALLOC_ZERO) ? M_ZERO : 0; + idx = 0; maxsz = tag->dt_maxsz; while (maxsz > 0 && idx < tag->dt_nsegs) { @@ -767,7 +773,7 @@ busdma_mem_alloc(struct busdma_tag *tag, seg->mds_paddr = ~0UL; seg->mds_size = MIN(maxsz, mtag.dmt_maxsz); seg->mds_vaddr = kmem_alloc_contig(kernel_map, seg->mds_size, - 0, mtag.dmt_minaddr, mtag.dmt_maxaddr, mtag.dmt_align, + mflags, mtag.dmt_minaddr, mtag.dmt_maxaddr, mtag.dmt_align, mtag.dmt_bndry, VM_MEMATTR_DEFAULT); if (seg->mds_vaddr == 0) { /* TODO: try a smaller segment size */ @@ -830,7 +836,8 @@ busdma_sync(struct busdma_md *md, u_int CTR3(KTR_BUSDMA, "%s: md=%p, op=%#x", __func__, md, op); - if ((op & BUSDMA_SYNC_PREWRITE) || (op & BUSDMA_SYNC_POSTREAD)) + if ((op & BUSDMA_SYNC_PREWRITE) == BUSDMA_SYNC_PREWRITE || + (op & BUSDMA_SYNC_POSTREAD) == BUSDMA_SYNC_POSTREAD) _busdma_data_dump(__func__, md, 0UL, ~0UL); } @@ -842,6 +849,7 @@ busdma_sync_range(struct busdma_md *md, CTR5(KTR_BUSDMA, "%s: md=%p, op=%#x, addr=%#jx, len=%#jx", __func__, md, op, (uintmax_t)addr, (uintmax_t)len); - if ((op & BUSDMA_SYNC_PREWRITE) || (op & BUSDMA_SYNC_POSTREAD)) + if ((op & BUSDMA_SYNC_PREWRITE) == BUSDMA_SYNC_PREWRITE || + (op & BUSDMA_SYNC_POSTREAD) == BUSDMA_SYNC_POSTREAD) _busdma_data_dump(__func__, md, addr, len); } Modified: projects/altix2/sys/sys/busdma.h ============================================================================== --- projects/altix2/sys/sys/busdma.h Sun Dec 30 00:47:30 2012 (r244845) +++ projects/altix2/sys/sys/busdma.h Sun Dec 30 00:49:56 2012 (r244846) @@ -133,6 +133,8 @@ busdma_md_get_pointer(busdma_md_t md, u_ */ int busdma_mem_alloc(busdma_tag_t tag, u_int flags, busdma_md_t *md_p); +#define BUSDMA_ALLOC_ZERO 0x10000 + /* * busdma_mem_free * returns: errno value @@ -146,10 +148,10 @@ int busdma_stop(busdma_md_t md); void busdma_sync(busdma_md_t md, u_int); void busdma_sync_range(busdma_md_t md, u_int, vm_paddr_t, vm_size_t); -#define BUSDMA_SYNC_READ 0x1 -#define BUSDMA_SYNC_WRITE 0x2 -#define BUSDMA_SYNC_BEFORE 0x0 -#define BUSDMA_SYNC_AFTER 0x4 +#define BUSDMA_SYNC_READ 0x10000 +#define BUSDMA_SYNC_WRITE 0x20000 +#define BUSDMA_SYNC_BEFORE 0x40000 +#define BUSDMA_SYNC_AFTER 0x80000 #define BUSDMA_SYNC_PREREAD (BUSDMA_SYNC_BEFORE | BUSDMA_SYNC_READ) #define BUSDMA_SYNC_PREWRITE (BUSDMA_SYNC_BEFORE | BUSDMA_SYNC_WRITE)