Commit 7698799f authored by Noralf Trønnes's avatar Noralf Trønnes
Browse files

drm/prime: Add drm_gem_prime_mmap()

parent f0014881
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -651,6 +651,43 @@ out_unlock:
}
EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);

/**
 * drm_gem_prime_mmap - PRIME mmap function for GEM drivers
 * @obj: GEM object
 * @vma: Virtual address range
 *
 * This function sets up a userspace mapping for PRIME exported buffers using
 * the same codepath that is used for regular GEM buffer mapping on the DRM fd.
 * The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
 * called to set up the mapping.
 *
 * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
 */
int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
{
	/* Used by drm_gem_mmap() to lookup the GEM object */
	struct drm_file priv = {
		.minor = obj->dev->primary,
	};
	struct file fil = {
		.private_data = &priv,
	};
	int ret;

	ret = drm_vma_node_allow(&obj->vma_node, &priv);
	if (ret)
		return ret;

	vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);

	ret = obj->dev->driver->fops->mmap(&fil, vma);

	drm_vma_node_revoke(&obj->vma_node, &priv);

	return ret;
}
EXPORT_SYMBOL(drm_gem_prime_mmap);

/**
 * drm_gem_prime_import_dev - core implementation of the import callback
 * @dev: drm_device to import into
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
int drm_gem_prime_handle_to_fd(struct drm_device *dev,
			       struct drm_file *file_priv, uint32_t handle, uint32_t flags,
			       int *prime_fd);
int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
					    struct dma_buf *dma_buf);