summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-01-16 13:15:16 +0000
committercognet <cognet@FreeBSD.org>2005-01-16 13:15:16 +0000
commit3f738b3942414ab97dc6362bb307c547bb6057c4 (patch)
tree9e65270df8d1e9072b3cc529e5498448ed4722dd
parent69eae68c08ae6b5de2f66e67df223217088dd048 (diff)
downloadFreeBSD-src-3f738b3942414ab97dc6362bb307c547bb6057c4.zip
FreeBSD-src-3f738b3942414ab97dc6362bb307c547bb6057c4.tar.gz
Erm, don't forget to store the mbuf in the dmamap in bus_dmamap_load_mbuf_sg(),
so that bus_dmamap_sync() knows what to invalidate. This makes em(4) work again. While I'm there, remove the unused "first" variable.
-rw-r--r--sys/arm/arm/busdma_machdep.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c
index f665057..c159ec4 100644
--- a/sys/arm/arm/busdma_machdep.c
+++ b/sys/arm/arm/busdma_machdep.c
@@ -99,7 +99,7 @@ struct bus_dmamap {
*/
static __inline int
-bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
+bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
int flags, vm_offset_t *lastaddrp, int *segp);
@@ -424,7 +424,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
* first indicates if this is the first invocation of this function.
*/
static int __inline
-bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
+bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
int flags, vm_offset_t *lastaddrp, int *segp)
{
@@ -526,7 +526,7 @@ bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
(segs[seg].ds_addr & bmask) ==
(curaddr & bmask))) {
segs[seg].ds_len += sgsize;
- goto segdone;
+ goto segdone;
} else {
if (++seg >= dmat->nsegments)
break;
@@ -611,8 +611,10 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
flags |= BUS_DMA_NOWAIT;
*nsegs = -1;
+ map->flags &= ~DMAMAP_TYPE_MASK;
+ map->flags |= DMAMAP_MBUF | DMAMAP_COHERENT;
+ map->buffer = m0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
- int first = 1;
vm_offset_t lastaddr = 0;
struct mbuf *m;
@@ -622,7 +624,6 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
m->m_data, m->m_len,
pmap_kernel(), flags, &lastaddr,
nsegs);
- first = 0;
}
}
} else {
OpenPOWER on IntegriCloud