Lines Matching full:mapping

17 	struct tegra_drm_mapping *mapping =  in tegra_drm_mapping_release()  local
20 if (mapping->sgt) in tegra_drm_mapping_release()
21 dma_unmap_sgtable(mapping->dev, mapping->sgt, mapping->direction, in tegra_drm_mapping_release()
24 host1x_bo_unpin(mapping->dev, mapping->bo, mapping->sgt); in tegra_drm_mapping_release()
25 host1x_bo_put(mapping->bo); in tegra_drm_mapping_release()
27 kfree(mapping); in tegra_drm_mapping_release()
30 void tegra_drm_mapping_put(struct tegra_drm_mapping *mapping) in tegra_drm_mapping_put() argument
32 kref_put(&mapping->ref, tegra_drm_mapping_release); in tegra_drm_mapping_put()
37 struct tegra_drm_mapping *mapping; in tegra_drm_channel_context_close() local
40 xa_for_each(&context->mappings, id, mapping) in tegra_drm_channel_context_close()
41 tegra_drm_mapping_put(mapping); in tegra_drm_channel_context_close()
160 struct tegra_drm_mapping *mapping; in tegra_drm_ioctl_channel_map() local
175 mapping = kzalloc(sizeof(*mapping), GFP_KERNEL); in tegra_drm_ioctl_channel_map()
176 if (!mapping) { in tegra_drm_ioctl_channel_map()
181 kref_init(&mapping->ref); in tegra_drm_ioctl_channel_map()
183 mapping->dev = context->client->base.dev; in tegra_drm_ioctl_channel_map()
184 mapping->bo = tegra_gem_lookup(file, args->handle); in tegra_drm_ioctl_channel_map()
185 if (!mapping->bo) { in tegra_drm_ioctl_channel_map()
192 host1x_bo_pin(mapping->dev, mapping->bo, &mapping->iova); in tegra_drm_ioctl_channel_map()
196 mapping->direction = DMA_BIDIRECTIONAL; in tegra_drm_ioctl_channel_map()
200 mapping->direction = DMA_FROM_DEVICE; in tegra_drm_ioctl_channel_map()
204 mapping->direction = DMA_TO_DEVICE; in tegra_drm_ioctl_channel_map()
211 mapping->sgt = host1x_bo_pin(mapping->dev, mapping->bo, NULL); in tegra_drm_ioctl_channel_map()
212 if (IS_ERR(mapping->sgt)) { in tegra_drm_ioctl_channel_map()
213 err = PTR_ERR(mapping->sgt); in tegra_drm_ioctl_channel_map()
217 err = dma_map_sgtable(mapping->dev, mapping->sgt, mapping->direction, in tegra_drm_ioctl_channel_map()
222 mapping->iova = sg_dma_address(mapping->sgt->sgl); in tegra_drm_ioctl_channel_map()
225 mapping->iova_end = mapping->iova + host1x_to_tegra_bo(mapping->bo)->gem.size; in tegra_drm_ioctl_channel_map()
227 err = xa_alloc(&context->mappings, &args->mapping, mapping, XA_LIMIT(1, U32_MAX), in tegra_drm_ioctl_channel_map()
237 if (mapping->sgt) { in tegra_drm_ioctl_channel_map()
238 dma_unmap_sgtable(mapping->dev, mapping->sgt, mapping->direction, in tegra_drm_ioctl_channel_map()
242 host1x_bo_unpin(mapping->dev, mapping->bo, mapping->sgt); in tegra_drm_ioctl_channel_map()
244 host1x_bo_put(mapping->bo); in tegra_drm_ioctl_channel_map()
245 kfree(mapping); in tegra_drm_ioctl_channel_map()
255 struct tegra_drm_mapping *mapping; in tegra_drm_ioctl_channel_unmap() local
266 mapping = xa_erase(&context->mappings, args->mapping); in tegra_drm_ioctl_channel_unmap()
270 if (!mapping) in tegra_drm_ioctl_channel_unmap()
273 tegra_drm_mapping_put(mapping); in tegra_drm_ioctl_channel_unmap()