Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm/arm/busdma_machdep-v4.c
Show First 20 Lines • Show All 1,002 Lines • ▼ Show 20 Lines | while (buflen > 0) { | ||||
buf += sgsize; | buf += sgsize; | ||||
buflen -= sgsize; | buflen -= sgsize; | ||||
} | } | ||||
/* | /* | ||||
* Did we fit? | * Did we fit? | ||||
*/ | */ | ||||
if (buflen != 0) { | if (buflen != 0) { | ||||
_bus_dmamap_unload(dmat, map); | bus_dmamap_unload(dmat, map); | ||||
return (EFBIG); /* XXX better return value here? */ | return (EFBIG); /* XXX better return value here? */ | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
int | int | ||||
_bus_dmamap_load_ma(bus_dma_tag_t dmat, bus_dmamap_t map, | _bus_dmamap_load_ma(bus_dma_tag_t dmat, bus_dmamap_t map, | ||||
struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags, | struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags, | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | while (buflen > 0) { | ||||
buflen -= sgsize; | buflen -= sgsize; | ||||
} | } | ||||
cleanup: | cleanup: | ||||
/* | /* | ||||
* Did we fit? | * Did we fit? | ||||
*/ | */ | ||||
if (buflen != 0) { | if (buflen != 0) { | ||||
_bus_dmamap_unload(dmat, map); | bus_dmamap_unload(dmat, map); | ||||
return (EFBIG); /* XXX better return value here? */ | return (EFBIG); /* XXX better return value here? */ | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
void | void | ||||
__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map, struct memdesc *mem, | _bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map, struct memdesc *mem, | ||||
bus_dmamap_callback_t *callback, void *callback_arg) | bus_dmamap_callback_t *callback, void *callback_arg) | ||||
{ | { | ||||
KASSERT(dmat != NULL, ("dmatag is NULL")); | KASSERT(dmat != NULL, ("dmatag is NULL")); | ||||
KASSERT(map != NULL, ("dmamap is NULL")); | KASSERT(map != NULL, ("dmamap is NULL")); | ||||
map->mem = *mem; | map->mem = *mem; | ||||
map->callback = callback; | map->callback = callback; | ||||
map->callback_arg = callback_arg; | map->callback_arg = callback_arg; | ||||
} | } | ||||
bus_dma_segment_t * | bus_dma_segment_t * | ||||
_bus_dmamap_complete(bus_dma_tag_t dmat, bus_dmamap_t map, | _bus_dmamap_complete(bus_dma_tag_t dmat, bus_dmamap_t map, | ||||
bus_dma_segment_t *segs, int nsegs, int error) | bus_dma_segment_t *segs, int nsegs, int error) | ||||
{ | { | ||||
if (segs == NULL) | if (segs == NULL) | ||||
segs = map->segments; | segs = map->segments; | ||||
return (segs); | return (segs); | ||||
} | } | ||||
/* | /* | ||||
* Release the mapping held by map. | * Release the mapping held by map. | ||||
*/ | */ | ||||
void | void | ||||
_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map) | bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map) | ||||
{ | { | ||||
struct bounce_page *bpage; | struct bounce_page *bpage; | ||||
struct bounce_zone *bz; | struct bounce_zone *bz; | ||||
if ((bz = dmat->bounce_zone) != NULL) { | if ((bz = dmat->bounce_zone) != NULL) { | ||||
while ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) { | while ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) { | ||||
STAILQ_REMOVE_HEAD(&map->bpages, links); | STAILQ_REMOVE_HEAD(&map->bpages, links); | ||||
free_bounce_page(dmat, bpage); | free_bounce_page(dmat, bpage); | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | if (op & BUS_DMASYNC_POSTREAD) { | ||||
if (tempvaddr != 0) | if (tempvaddr != 0) | ||||
pmap_quick_remove_page(tempvaddr); | pmap_quick_remove_page(tempvaddr); | ||||
dmat->bounce_zone->total_bounced++; | dmat->bounce_zone->total_bounced++; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
void | void | ||||
_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op) | bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op) | ||||
{ | { | ||||
struct sync_list *sl, *end; | struct sync_list *sl, *end; | ||||
int bufaligned; | int bufaligned; | ||||
if (op == BUS_DMASYNC_POSTWRITE) | if (op == BUS_DMASYNC_POSTWRITE) | ||||
return; | return; | ||||
if (map->flags & DMAMAP_COHERENT) | if (map->flags & DMAMAP_COHERENT) | ||||
goto drain; | goto drain; | ||||
▲ Show 20 Lines • Show All 266 Lines • Show Last 20 Lines |