Lines Matching refs:sg
141 dma_map_sg(bus_dma_tag_t dmat, struct scatterlist *sg, int nents, int dir)
144 return dma_map_sg_attrs(dmat, sg, nents, dir, 0);
148 dma_map_sg_attrs(bus_dma_tag_t dmat, struct scatterlist *sg, int nents,
155 KASSERT(sg->sg_dmamap == NULL);
156 KASSERT(sg->sg_npgs);
174 error = bus_dmamap_create(dmat, (bus_size_t)sg->sg_npgs << PAGE_SHIFT,
175 nents, PAGE_SIZE, 0, BUS_DMA_WAITOK, &sg->sg_dmamap);
178 KASSERT(sg->sg_dmamap);
180 error = bus_dmamap_load_pages(dmat, sg->sg_dmamap, sg->sg_pgs,
181 (bus_size_t)sg->sg_npgs << PAGE_SHIFT, BUS_DMA_WAITOK|flags);
187 KASSERT(sg->sg_dmamap->dm_nsegs > 0);
188 KASSERT(sg->sg_dmamap->dm_nsegs <= nents);
189 sg->sg_dmat = dmat;
190 ret = sg->sg_dmamap->dm_nsegs;
195 bus_dmamap_unload(dmat, sg->sg_dmamap);
197 if (sg->sg_dmamap)
198 bus_dmamap_destroy(dmat, sg->sg_dmamap);
199 sg->sg_dmamap = NULL;
206 dma_unmap_sg(bus_dma_tag_t dmat, struct scatterlist *sg, int nents, int dir)
209 dma_unmap_sg_attrs(dmat, sg, nents, dir, 0);
213 dma_unmap_sg_attrs(bus_dma_tag_t dmat, struct scatterlist *sg, int nents,
217 KASSERT(sg->sg_dmat == dmat);
219 bus_dmamap_unload(dmat, sg->sg_dmamap);
220 bus_dmamap_destroy(dmat, sg->sg_dmamap);
221 sg->sg_dmamap = NULL;
225 sg_dma_address(const struct scatterlist *sg)
228 KASSERT(sg->sg_dmamap->dm_nsegs == 1);
229 return sg->sg_dmamap->dm_segs[0].ds_addr;
233 sg_dma_len(const struct scatterlist *sg)
236 KASSERT(sg->sg_dmamap->dm_nsegs == 1);
237 return sg->sg_dmamap->dm_segs[0].ds_len;