svn commit: r243976 - in projects/physbio/sys: arm/arm ia64/ia64 mips/mips powerpc/powerpc sparc64/sparc64 x86/x86
Jeff Roberson
jeff at FreeBSD.org
Fri Dec 7 07:00:33 UTC 2012
Author: jeff
Date: Fri Dec 7 07:00:31 2012
New Revision: 243976
URL: http://svnweb.freebsd.org/changeset/base/243976
Log:
- Permit the opacity of maps and tags in callers to *dmamap_load_buffer()
by fetching the default tag set if NULL is passed in.
Sponsored by: EMC / Isilon Storage Division
Modified:
projects/physbio/sys/arm/arm/busdma_machdep-v6.c
projects/physbio/sys/arm/arm/busdma_machdep.c
projects/physbio/sys/ia64/ia64/busdma_machdep.c
projects/physbio/sys/mips/mips/busdma_machdep.c
projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
projects/physbio/sys/sparc64/sparc64/bus_machdep.c
projects/physbio/sys/sparc64/sparc64/iommu.c
projects/physbio/sys/x86/x86/busdma_machdep.c
Modified: projects/physbio/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -729,6 +729,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
struct sync_list *sl;
int seg, error;
+ if (segs == NULL)
+ segs = dmat->segments;
+
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags);
if (error)
@@ -852,7 +855,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->callback_arg = callback_arg;
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
- flags, dmat->segments, &nsegs);
+ flags, NULL, &nsegs);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -922,8 +925,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
{
int nsegs, error;
- error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, dmat->segments, &nsegs,
- flags);
+ error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, NULL, &nsegs, flags);
if (error) {
/* force "no valid mappings" in callback */
@@ -985,7 +987,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
addr, minlen, pmap, flags,
- dmat->segments, &nsegs);
+ NULL, &nsegs);
resid -= minlen;
}
}
Modified: projects/physbio/sys/arm/arm/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -765,6 +765,9 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
bmask = ~(dmat->boundary - 1);
+ if (segs == NULL)
+ segs = dmat->segments;
+
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen,
flags);
@@ -913,7 +916,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->buffer = buf;
map->len = buflen;
error = bus_dmamap_load_buffer(dmat,
- dmat->segments, map, buf, buflen, kernel_pmap,
+ NULL, map, buf, buflen, kernel_pmap,
flags, &nsegs);
if (error == EINPROGRESS)
return (error);
@@ -950,7 +953,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = bus_dmamap_load_buffer(dmat,
- dmat->segments, map, m->m_data, m->m_len,
+ NULL, map, m->m_data, m->m_len,
kernel_pmap, flags, &nsegs);
map->len += m->m_len;
}
@@ -1050,7 +1053,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
caddr_t addr = (caddr_t) iov[i].iov_base;
if (minlen > 0) {
- error = bus_dmamap_load_buffer(dmat, dmat->segments,
+ error = bus_dmamap_load_buffer(dmat, NULL,
map, addr, minlen, pmap, flags, &nsegs);
map->len += minlen;
Modified: projects/physbio/sys/ia64/ia64/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -498,6 +498,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
if (map == NULL)
map = &nobounce_dmamap;
+ if (segs == NULL)
+ segs = dmat->segments;
+
if ((dmat->lowaddr < paddr_max || dmat->boundary > 0 ||
dmat->alignment > 1) && map != &nobounce_dmamap &&
map->pagesneeded == 0) {
@@ -629,7 +632,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
}
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
- flags, dmat->segments, &nsegs);
+ flags, NULL, &nsegs);
if (error == EINPROGRESS)
return (error);
@@ -663,7 +666,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len, kernel_pmap, flags,
- dmat->segments, &nsegs);
+ NULL, &nsegs);
}
}
} else {
@@ -745,8 +748,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map, addr,
- minlen, td, flags, dmat->segments,
- &nsegs);
+ minlen, td, flags, NULL, &nsegs);
resid -= minlen;
}
}
Modified: projects/physbio/sys/mips/mips/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/mips/mips/busdma_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/mips/mips/busdma_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -761,6 +761,9 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
bmask = ~(dmat->boundary - 1);
+ if (segs == NULL)
+ segs = dmat->segments;
+
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen,
flags);
@@ -856,7 +859,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->buffer = buf;
map->len = buflen;
error = bus_dmamap_load_buffer(dmat,
- dmat->segments, map, buf, buflen, kernel_pmap,
+ NULL, map, buf, buflen, kernel_pmap,
flags, &nsegs);
if (error == EINPROGRESS)
return (error);
@@ -893,7 +896,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = bus_dmamap_load_buffer(dmat,
- dmat->segments, map, m->m_data, m->m_len,
+ NULL, map, m->m_data, m->m_len,
kernel_pmap, flags, &nsegs);
map->len += m->m_len;
}
@@ -994,7 +997,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
caddr_t addr = (caddr_t) iov[i].iov_base;
if (minlen > 0) {
- error = bus_dmamap_load_buffer(dmat, dmat->segments,
+ error = bus_dmamap_load_buffer(dmat, NULL,
map, addr, minlen, pmap, flags, &nsegs);
map->len += minlen;
Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -583,6 +583,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
bus_addr_t paddr;
int seg;
+ if (segs == NULL)
+ segs = map->segments;
+
if (map->pagesneeded == 0 && ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0)) {
vm_offset_t vendaddr;
@@ -700,6 +703,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
*segp = seg;
+ map->nsegs = seg;
/*
* Did we fit?
@@ -725,7 +729,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->nsegs = -1;
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
- flags, map->segments, &map->nsegs);
+ flags, NULL, &map->nsegs);
map->nsegs++;
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
@@ -780,7 +784,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len,
kernel_pmap, flags,
- map->segments, &map->nsegs);
+ NULL, &map->nsegs);
}
}
} else {
@@ -887,7 +891,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
addr, minlen, pmap, flags,
- map->segments, &map->nsegs);
+ NULL, &map->nsegs);
resid -= minlen;
}
Modified: projects/physbio/sys/sparc64/sparc64/bus_machdep.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -339,6 +339,9 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t
vm_offset_t vaddr = (vm_offset_t)buf;
int seg;
+ if (segs == NULL)
+ segs = dmat->dt_segments;
+
bmask = ~(dmat->dt_boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -421,7 +424,7 @@ nexus_dmamap_load(bus_dma_tag_t dmat, bu
nsegs = -1;
error = _nexus_dmamap_load_buffer(dmat, buf, buflen, kernel_pmap,
- flags, dmat->dt_segments, &nsegs);
+ flags, NULL, &nsegs);
if (error == 0) {
(*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0);
@@ -452,7 +455,7 @@ nexus_dmamap_load_mbuf(bus_dma_tag_t dma
if (m->m_len > 0) {
error = _nexus_dmamap_load_buffer(dmat,
m->m_data, m->m_len, kernel_pmap, flags,
- dmat->dt_segments, &nsegs);
+ NULL, &nsegs);
}
}
} else {
@@ -531,7 +534,7 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat
if (minlen > 0) {
error = _nexus_dmamap_load_buffer(dmat, addr, minlen,
- pmap, flags, dmat->dt_segments, &nsegs);
+ pmap, flags, NULL, &nsegs);
resid -= minlen;
}
}
Modified: projects/physbio/sys/sparc64/sparc64/iommu.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -865,6 +865,9 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t
if (buflen > dt->dt_maxsize)
return (EINVAL);
+ if (segs == NULL)
+ segs = dt->dt_segments;
+
vaddr = (vm_offset_t)buf;
voffs = vaddr & IO_PAGE_MASK;
amask = (*segp == -1) ? dt->dt_alignment - 1 : 0;
@@ -970,7 +973,7 @@ iommu_dvmamap_load(bus_dma_tag_t dt, bus
IS_UNLOCK(is);
error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen,
- kernel_pmap, flags, dt->dt_segments, &seg);
+ kernel_pmap, flags, NULL, &seg);
IS_LOCK(is);
iommu_map_insq(is, map);
@@ -1014,7 +1017,7 @@ iommu_dvmamap_load_mbuf(bus_dma_tag_t dt
continue;
error = iommu_dvmamap_load_buffer(dt, is, map,
m->m_data, m->m_len, kernel_pmap, flags,
- dt->dt_segments, &nsegs);
+ NULL, &nsegs);
}
} else
error = EINVAL;
@@ -1123,7 +1126,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt,
continue;
error = iommu_dvmamap_load_buffer(dt, is, map,
- iov[i].iov_base, minlen, pmap, flags, dt->dt_segments,
+ iov[i].iov_base, minlen, pmap, flags, NULL,
&nsegs);
resid -= minlen;
}
Modified: projects/physbio/sys/x86/x86/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 06:38:30 2012 (r243975)
+++ projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 07:00:31 2012 (r243976)
@@ -665,6 +665,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
if (map == NULL || map == &contig_dmamap)
map = &nobounce_dmamap;
+ if (segs == NULL)
+ segs = dmat->segments;
+
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen, flags);
if (error)
@@ -759,7 +762,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
}
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
- flags, dmat->segments, &nsegs);
+ flags, NULL, &nsegs);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -829,8 +832,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
{
int nsegs, error;
- error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, dmat->segments, &nsegs,
- flags);
+ error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, NULL, &nsegs, flags);
if (error) {
/* force "no valid mappings" in callback */
@@ -891,7 +893,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
addr, minlen, pmap, flags,
- dmat->segments, &nsegs);
+ NULL, &nsegs);
resid -= minlen;
}
}
More information about the svn-src-projects
mailing list