diff options
author | mjacob <mjacob@FreeBSD.org> | 1999-07-02 05:05:51 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 1999-07-02 05:05:51 +0000 |
commit | a343f16b65e13c38b39cc0101b3e877c61f83f26 (patch) | |
tree | 3f927ed95dbe80ad088188d9630ffe1355d9e713 | |
parent | 86be82fb5bd1679f3f28fedfb6babf8256125a46 (diff) | |
download | FreeBSD-src-a343f16b65e13c38b39cc0101b3e877c61f83f26.zip FreeBSD-src-a343f16b65e13c38b39cc0101b3e877c61f83f26.tar.gz |
Fix last delta which reinitialized nextpaddr to zero each time through the
loop it was supposed to be in. Correct some ugly formatting. Remember to
initialize the alignment tag. Honor and pass a callers request to contigalloc
if they had a non-zero alignment constraint.
-rw-r--r-- | sys/alpha/alpha/busdma_machdep.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/alpha/alpha/busdma_machdep.c b/sys/alpha/alpha/busdma_machdep.c index 842d6ef..b2267af 100644 --- a/sys/alpha/alpha/busdma_machdep.c +++ b/sys/alpha/alpha/busdma_machdep.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: busdma_machdep.c,v 1.3 1999/06/05 13:29:50 dfr Exp $ + * $Id: busdma_machdep.c,v 1.4 1999/07/01 20:59:56 peter Exp $ */ #include <sys/param.h> @@ -140,6 +140,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment, return (ENOMEM); newtag->parent = parent; + newtag->alignment = alignment; newtag->boundary = boundary; newtag->lowaddr = trunc_page(lowaddr) + (PAGE_SIZE - 1); newtag->highaddr = trunc_page(highaddr) + (PAGE_SIZE - 1); @@ -352,9 +353,9 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, * multi-seg allocations yet though. */ *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, - (flags & BUS_DMA_NOWAIT) - ? M_NOWAIT : M_WAITOK, - 0ul, dmat->lowaddr, 1ul, dmat->boundary); + (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK, + 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul, + dmat->boundary); } if (*vaddr == NULL) return (ENOMEM); @@ -400,6 +401,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, bus_dma_segment_t *sg; int seg; int error; + vm_offset_t nextpaddr; error = 0; @@ -475,17 +477,17 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, seg = 1; sg->ds_len = 0; + nextpaddr = 0; + do { bus_size_t size; - vm_offset_t nextpaddr = 0; paddr = pmap_kextract(vaddr); size = PAGE_SIZE - (paddr & PAGE_MASK); if (size > buflen) size = buflen; - if (map->pagesneeded != 0 - && run_filter(dmat, paddr)) { + if (map->pagesneeded != 0 && run_filter(dmat, paddr)) { paddr = add_bounce_page(dmat, map, vaddr, size); } @@ -506,6 +508,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, vaddr += size; nextpaddr = paddr + size; buflen -= size; + } while (buflen > 0); if (buflen != 0) { |