Lines Matching defs:sg
59 struct drm_sg_mem *sg = NULL;
73 if (dev->sg != NULL)
84 error = drm_sg_alloc_mem(dev, request->size, &sg);
89 dev->sg = sg;
92 request->handle = sg->handle;
100 struct drm_sg_mem *sg;
110 sg = dev->sg;
111 if (sg == NULL)
113 if (sg->handle != request->handle)
116 /* Remove dev->sg. */
117 dev->sg = NULL;
120 drm_sg_free_mem(dev, sg);
132 if (dev->sg == NULL)
137 drm_sg_free_mem(dev, dev->sg);
156 struct drm_sg_mem *const sg =
159 if (sg == NULL)
161 sg->sg_tag = dev->dmat;
162 sg->sg_nsegs_max = (unsigned int)npages;
167 KASSERT(sg->sg_nsegs_max <= (unsigned int)INT_MAX);
169 error = -bus_dmamem_alloc(sg->sg_tag, nbytes, PAGE_SIZE, 0,
170 sg->sg_segs, (int)sg->sg_nsegs_max, &nsegs, BUS_DMA_NOWAIT);
174 sg->sg_nsegs = (unsigned int)nsegs;
185 error = -bus_dmamem_map(sg->sg_tag, sg->sg_segs, nsegs, nbytes,
186 &sg->virtual,
190 sg->sg_size = nbytes;
196 error = -bus_dmamap_create(sg->sg_tag, nbytes, nsegs, nbytes, 0,
197 BUS_DMA_NOWAIT, &sg->sg_map);
205 error = -bus_dmamap_load(sg->sg_tag, sg->sg_map, sg->virtual, nbytes,
216 sg->handle = (unsigned long)(uintptr_t)sg->virtual;
217 KASSERT(sg->virtual == (void *)(uintptr_t)sg->handle);
220 *sgp = sg;
223 fail3: bus_dmamap_destroy(sg->sg_tag, sg->sg_map);
224 fail2: bus_dmamem_unmap(sg->sg_tag, sg->virtual, sg->sg_size);
225 fail1: KASSERT(sg->sg_nsegs <= (unsigned int)INT_MAX);
226 bus_dmamem_free(sg->sg_tag, sg->sg_segs, (int)sg->sg_nsegs);
227 fail0: sg->sg_tag = NULL; /* XXX paranoia */
228 kmem_free(sg, offsetof(struct drm_sg_mem, sg_segs[sg->sg_nsegs_max]));
233 drm_sg_free_mem(struct drm_device *dev, struct drm_sg_mem *sg)
236 bus_dmamap_unload(sg->sg_tag, sg->sg_map);
237 bus_dmamap_destroy(sg->sg_tag, sg->sg_map);
238 bus_dmamem_unmap(sg->sg_tag, sg->virtual, sg->sg_size);
239 KASSERT(sg->sg_nsegs <= (unsigned int)INT_MAX);
240 bus_dmamem_free(sg->sg_tag, sg->sg_segs, (int)sg->sg_nsegs);
241 sg->sg_tag = NULL; /* XXX paranoia */
242 kmem_free(sg, offsetof(struct drm_sg_mem, sg_segs[sg->sg_nsegs_max]));