Sync the bus_dmamap_load back-end functions between alpha and i386. (only

slight, unnecessary differences)
This commit is contained in:
thorpej 1998-06-03 04:15:05 +00:00
parent 591111382b
commit 50be447da3
2 changed files with 18 additions and 15 deletions

View File

@ -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 <sys/cdefs.h> /* 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 <sys/param.h>
#include <sys/systm.h>
@ -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)))

View File

@ -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;