Home | History | Annotate | Download | only in sunxi

Lines Matching refs:dma

107     size_t align, struct sunxi_codec_dma *dma)
111 dma->dma_size = size;
112 error = bus_dmamem_alloc(sc->sc_dmat, dma->dma_size, align, 0,
113 dma->dma_segs, 1, &dma->dma_nsegs, BUS_DMA_WAITOK);
117 error = bus_dmamem_map(sc->sc_dmat, dma->dma_segs, dma->dma_nsegs,
118 dma->dma_size, &dma->dma_addr, BUS_DMA_WAITOK | BUS_DMA_COHERENT);
122 error = bus_dmamap_create(sc->sc_dmat, dma->dma_size, dma->dma_nsegs,
123 dma->dma_size, 0, BUS_DMA_WAITOK, &dma->dma_map);
127 error = bus_dmamap_load(sc->sc_dmat, dma->dma_map, dma->dma_addr,
128 dma->dma_size, NULL, BUS_DMA_WAITOK);
135 bus_dmamap_destroy(sc->sc_dmat, dma->dma_map);
137 bus_dmamem_unmap(sc->sc_dmat, dma->dma_addr, dma->dma_size);
139 bus_dmamem_free(sc->sc_dmat, dma->dma_segs, dma->dma_nsegs);
145 sunxi_codec_freedma(struct sunxi_codec_softc *sc, struct sunxi_codec_dma *dma)
147 bus_dmamap_unload(sc->sc_dmat, dma->dma_map);
148 bus_dmamap_destroy(sc->sc_dmat, dma->dma_map);
149 bus_dmamem_unmap(sc->sc_dmat, dma->dma_addr, dma->dma_size);
150 bus_dmamem_free(sc->sc_dmat, dma->dma_segs, dma->dma_nsegs);
211 struct sunxi_codec_dma *dma;
214 dma = kmem_alloc(sizeof(*dma), KM_SLEEP);
216 error = sunxi_codec_allocdma(sc, size, 16, dma);
218 kmem_free(dma, sizeof(*dma));
219 device_printf(sc->sc_dev, "couldn't allocate DMA memory (%d)\n",
224 LIST_INSERT_HEAD(&sc->sc_dmalist, dma, dma_list);
226 return dma->dma_addr;
233 struct sunxi_codec_dma *dma;
235 LIST_FOREACH(dma, &sc->sc_dmalist, dma_list)
236 if (dma->dma_addr == addr) {
237 sunxi_codec_freedma(sc, dma);
238 LIST_REMOVE(dma, dma_list);
239 kmem_free(dma, sizeof(*dma));
271 struct sunxi_codec_dma *dma;
280 LIST_FOREACH(dma, &sc->sc_dmalist, dma_list)
281 if (dma->dma_addr == start) {
282 pstart = dma->dma_map->dm_segs[0].ds_addr;
319 /* Start DMA transfer */
323 "failed to start DMA transfer: %d\n", error);
336 struct sunxi_codec_dma *dma;
345 LIST_FOREACH(dma, &sc->sc_dmalist, dma_list)
346 if (dma->dma_addr == start) {
347 pstart = dma->dma_map->dm_segs[0].ds_addr;
383 /* Start DMA transfer */
387 "failed to start DMA transfer: %d\n", error);
401 /* Disable DMA channel */
441 /* Disable DMA channel */
503 aprint_error(": couldn't get dma channel \"%s\"\n", dmaname);