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