diff --git a/sys/arch/alpha/common/bus_dma.c b/sys/arch/alpha/common/bus_dma.c index 296f165753bc..6fc27a25baaa 100644 --- a/sys/arch/alpha/common/bus_dma.c +++ b/sys/arch/alpha/common/bus_dma.c @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.21 1998/05/29 15:55:34 matt Exp $ */ +/* $NetBSD: bus_dma.c,v 1.22 1998/06/03 04:15:05 thorpej Exp $ */ /*- * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. @@ -42,7 +42,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.21 1998/05/29 15:55:34 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.22 1998/06/03 04:15:05 thorpej Exp $"); #include #include @@ -150,7 +150,7 @@ _bus_dmamap_load_buffer_direct_common(map, buf, buflen, p, flags, wbase, int first; { bus_size_t sgsize; - vm_offset_t curaddr, lastaddr, baddr, bmask; + bus_addr_t curaddr, lastaddr, baddr, bmask; vm_offset_t vaddr = (vm_offset_t)buf; int seg; @@ -182,13 +182,14 @@ _bus_dmamap_load_buffer_direct_common(map, buf, buflen, p, flags, wbase, sgsize = NBPG - ((u_long)vaddr & PGOFSET); if (buflen < sgsize) sgsize = buflen; + /* - * Make sure we don't cross any boundaries + * Make sure we don't cross any boundaries. */ if (map->_dm_boundary > 0) { baddr = (curaddr + map->_dm_boundary) & bmask; - if (baddr - curaddr < sgsize) - sgsize = baddr - curaddr; + if (sgsize > (baddr - curaddr)) + sgsize = (baddr - curaddr); } /* @@ -202,7 +203,7 @@ _bus_dmamap_load_buffer_direct_common(map, buf, buflen, p, flags, wbase, } else { if (curaddr == lastaddr && (map->dm_segs[seg].ds_len + sgsize) <= - map->_dm_maxsegsz && + map->_dm_maxsegsz && (map->_dm_boundary == 0 || (map->dm_segs[seg].ds_addr & bmask) == (curaddr & bmask))) diff --git a/sys/arch/i386/i386/machdep.c b/sys/arch/i386/i386/machdep.c index 41ef4fec606d..277de0116425 100644 --- a/sys/arch/i386/i386/machdep.c +++ b/sys/arch/i386/i386/machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.304 1998/05/29 16:48:09 bouyer Exp $ */ +/* $NetBSD: machdep.c,v 1.305 1998/06/03 04:15:06 thorpej Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -2889,7 +2889,7 @@ _bus_dmamap_load_buffer(map, buf, buflen, p, flags, lastaddrp, segp, first) { bus_size_t sgsize; bus_addr_t curaddr, lastaddr, baddr, bmask; - caddr_t vaddr = buf; + vm_offset_t vaddr = (vm_offset_t)buf; int seg; pmap_t pmap; @@ -2905,7 +2905,7 @@ _bus_dmamap_load_buffer(map, buf, buflen, p, flags, lastaddrp, segp, first) /* * Get the physical address for this segment. */ - curaddr = (bus_addr_t)pmap_extract(pmap, (vm_offset_t)vaddr); + curaddr = pmap_extract(pmap, vaddr); /* * Compute the segment size, and adjust counts. @@ -2913,9 +2913,12 @@ _bus_dmamap_load_buffer(map, buf, buflen, p, flags, lastaddrp, segp, first) sgsize = NBPG - ((u_long)vaddr & PGOFSET); if (buflen < sgsize) sgsize = buflen; - /* If needed, compute upper boundary line and adjust seg size */ + + /* + * Make sure we don't cross any boundaries. + */ if (map->_dm_boundary > 0) { - baddr = ((u_long)curaddr + map->_dm_boundary) & bmask; + baddr = (curaddr + map->_dm_boundary) & bmask; if (sgsize > (baddr - curaddr)) sgsize = (baddr - curaddr); } @@ -2932,13 +2935,12 @@ _bus_dmamap_load_buffer(map, buf, buflen, p, flags, lastaddrp, segp, first) if (curaddr == lastaddr && (map->dm_segs[seg].ds_len + sgsize) <= map->_dm_maxsegsz && - (map->_dm_boundary == 0 || + (map->_dm_boundary == 0 || (map->dm_segs[seg].ds_addr & bmask) == (curaddr & bmask))) map->dm_segs[seg].ds_len += sgsize; else { - seg++; - if (seg >= map->_dm_segcnt) + if (++seg >= map->_dm_segcnt) break; map->dm_segs[seg].ds_addr = curaddr; map->dm_segs[seg].ds_len = sgsize;