drm/msm: Add hint to DRM_IOCTL_MSM_GEM_INFO to return an object IOVA
Modify the 'pad' member of struct drm_msm_gem_info to 'flags'. If the user sets 'flags' to non-zero it means that they want a IOVA for the GEM object instead of a mmap() offset. Return the iova in the 'offset' member. Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> [robclark: s/hint/flags in commit msg] Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
		
							parent
							
								
									e895c7bd31
								
							
						
					
					
						commit
						49fd08baa3
					
				| @ -699,6 +699,17 @@ static int msm_ioctl_gem_cpu_fini(struct drm_device *dev, void *data, | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int msm_ioctl_gem_info_iova(struct drm_device *dev, | ||||
| 		struct drm_gem_object *obj, uint64_t *iova) | ||||
| { | ||||
| 	struct msm_drm_private *priv = dev->dev_private; | ||||
| 
 | ||||
| 	if (!priv->gpu) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	return msm_gem_get_iova(obj, priv->gpu->id, iova); | ||||
| } | ||||
| 
 | ||||
| static int msm_ioctl_gem_info(struct drm_device *dev, void *data, | ||||
| 		struct drm_file *file) | ||||
| { | ||||
| @ -706,14 +717,22 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, | ||||
| 	struct drm_gem_object *obj; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	if (args->pad) | ||||
| 	if (args->flags & ~MSM_INFO_FLAGS) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	obj = drm_gem_object_lookup(file, args->handle); | ||||
| 	if (!obj) | ||||
| 		return -ENOENT; | ||||
| 
 | ||||
| 	args->offset = msm_gem_mmap_offset(obj); | ||||
| 	if (args->flags & MSM_INFO_IOVA) { | ||||
| 		uint64_t iova; | ||||
| 
 | ||||
| 		ret = msm_ioctl_gem_info_iova(dev, obj, &iova); | ||||
| 		if (!ret) | ||||
| 			args->offset = iova; | ||||
| 	} else { | ||||
| 		args->offset = msm_gem_mmap_offset(obj); | ||||
| 	} | ||||
| 
 | ||||
| 	drm_gem_object_unreference_unlocked(obj); | ||||
| 
 | ||||
|  | ||||
| @ -104,10 +104,14 @@ struct drm_msm_gem_new { | ||||
| 	__u32 handle;         /* out */ | ||||
| }; | ||||
| 
 | ||||
| #define MSM_INFO_IOVA	0x01 | ||||
| 
 | ||||
| #define MSM_INFO_FLAGS (MSM_INFO_IOVA) | ||||
| 
 | ||||
| struct drm_msm_gem_info { | ||||
| 	__u32 handle;         /* in */ | ||||
| 	__u32 pad; | ||||
| 	__u64 offset;         /* out, offset to pass to mmap() */ | ||||
| 	__u32 flags;	      /* in - combination of MSM_INFO_* flags */ | ||||
| 	__u64 offset;         /* out, mmap() offset or iova */ | ||||
| }; | ||||
| 
 | ||||
| #define MSM_PREP_READ        0x01 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user