Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/busdma_machdep.c
Show First 20 Lines • Show All 217 Lines • ▼ Show 20 Lines | |||||
bus_dma_tag_destroy(bus_dma_tag_t dmat) | bus_dma_tag_destroy(bus_dma_tag_t dmat) | ||||
{ | { | ||||
struct bus_dma_tag_common *tc; | struct bus_dma_tag_common *tc; | ||||
tc = (struct bus_dma_tag_common *)dmat; | tc = (struct bus_dma_tag_common *)dmat; | ||||
return (tc->impl->tag_destroy(dmat)); | return (tc->impl->tag_destroy(dmat)); | ||||
} | } | ||||
/* | |||||
* Allocate a handle for mapping from kva/uva/physical | |||||
* address space into bus device space. | |||||
*/ | |||||
int | |||||
bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->map_create(dmat, flags, mapp)); | |||||
} | |||||
/* | |||||
* Destroy a handle for mapping from kva/uva/physical | |||||
* address space into bus device space. | |||||
*/ | |||||
int | |||||
bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->map_destroy(dmat, map)); | |||||
} | |||||
/* | |||||
* Allocate a piece of memory that can be efficiently mapped into | |||||
* bus device space based on the constraints listed in the dma tag. | |||||
* A dmamap to for use with dmamap_load is also allocated. | |||||
*/ | |||||
int | |||||
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, | |||||
bus_dmamap_t *mapp) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->mem_alloc(dmat, vaddr, flags, mapp)); | |||||
} | |||||
/* | |||||
* Free a piece of memory and it's allociated dmamap, that was allocated | |||||
* via bus_dmamem_alloc. Make the same choice for free/contigfree. | |||||
*/ | |||||
void | |||||
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
tc->impl->mem_free(dmat, vaddr, map); | |||||
} | |||||
int | |||||
_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf, | |||||
bus_size_t buflen, int flags, bus_dma_segment_t *segs, int *segp) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->load_phys(dmat, map, buf, buflen, flags, segs, | |||||
segp)); | |||||
} | |||||
int | |||||
_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, bus_dma_segment_t *segs, | |||||
int *segp) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->load_ma(dmat, map, ma, tlen, ma_offs, flags, | |||||
segs, segp)); | |||||
} | |||||
int | |||||
_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, | |||||
bus_size_t buflen, pmap_t pmap, int flags, bus_dma_segment_t *segs, | |||||
int *segp) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->load_buffer(dmat, map, buf, buflen, pmap, flags, segs, | |||||
segp)); | |||||
} | |||||
void | |||||
__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map, | |||||
struct memdesc *mem, bus_dmamap_callback_t *callback, void *callback_arg) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
tc->impl->map_waitok(dmat, map, mem, callback, callback_arg); | |||||
} | |||||
bus_dma_segment_t * | |||||
_bus_dmamap_complete(bus_dma_tag_t dmat, bus_dmamap_t map, | |||||
bus_dma_segment_t *segs, int nsegs, int error) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
return (tc->impl->map_complete(dmat, map, segs, nsegs, error)); | |||||
} | |||||
/* | |||||
* Release the mapping held by map. | |||||
*/ | |||||
void | |||||
_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
tc->impl->map_unload(dmat, map); | |||||
} | |||||
void | |||||
_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op) | |||||
{ | |||||
struct bus_dma_tag_common *tc; | |||||
tc = (struct bus_dma_tag_common *)dmat; | |||||
tc->impl->map_sync(dmat, map, op); | |||||
} |