Lines Matching refs:dma
114 hyperv_dma_alloc(bus_dma_tag_t dmat, struct hyperv_dma *dma, bus_size_t size, in hyperv_dma_alloc() argument
119 KASSERT(dma != NULL); in hyperv_dma_alloc()
120 KASSERT(dma->segs == NULL); in hyperv_dma_alloc()
123 dma->segs = kmem_zalloc(sizeof(*dma->segs) * nsegs, KM_SLEEP); in hyperv_dma_alloc()
124 dma->nsegs = nsegs; in hyperv_dma_alloc()
126 error = bus_dmamem_alloc(dmat, size, alignment, boundary, dma->segs, in hyperv_dma_alloc()
133 error = bus_dmamem_map(dmat, dma->segs, rseg, size, &dma->addr, in hyperv_dma_alloc()
141 BUS_DMA_WAITOK, &dma->map); in hyperv_dma_alloc()
147 error = bus_dmamap_load(dmat, dma->map, dma->addr, size, NULL, in hyperv_dma_alloc()
155 memset(dma->addr, 0, dma->map->dm_mapsize); in hyperv_dma_alloc()
156 bus_dmamap_sync(dmat, dma->map, 0, dma->map->dm_mapsize, in hyperv_dma_alloc()
159 return dma->addr; in hyperv_dma_alloc()
161 fail4: bus_dmamap_destroy(dmat, dma->map); in hyperv_dma_alloc()
162 fail3: bus_dmamem_unmap(dmat, dma->addr, size); in hyperv_dma_alloc()
163 dma->addr = NULL; in hyperv_dma_alloc()
164 fail2: bus_dmamem_free(dmat, dma->segs, rseg); in hyperv_dma_alloc()
165 fail1: kmem_free(dma->segs, sizeof(*dma->segs) * nsegs); in hyperv_dma_alloc()
166 dma->segs = NULL; in hyperv_dma_alloc()
167 dma->nsegs = 0; in hyperv_dma_alloc()
172 hyperv_dma_free(bus_dma_tag_t dmat, struct hyperv_dma *dma) in hyperv_dma_free() argument
174 bus_size_t size = dma->map->dm_mapsize; in hyperv_dma_free()
175 int rsegs = dma->map->dm_nsegs; in hyperv_dma_free()
177 bus_dmamap_unload(dmat, dma->map); in hyperv_dma_free()
178 bus_dmamap_destroy(dmat, dma->map); in hyperv_dma_free()
179 bus_dmamem_unmap(dmat, dma->addr, size); in hyperv_dma_free()
180 dma->addr = NULL; in hyperv_dma_free()
181 bus_dmamem_free(dmat, dma->segs, rsegs); in hyperv_dma_free()
182 kmem_free(dma->segs, sizeof(*dma->segs) * dma->nsegs); in hyperv_dma_free()
183 dma->segs = NULL; in hyperv_dma_free()
184 dma->nsegs = 0; in hyperv_dma_free()