diff options
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 23 | 
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 8cca91a93bd..dc279706ca7 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -390,6 +390,11 @@ extern int vmw_context_check(struct vmw_private *dev_priv,  			     struct ttm_object_file *tfile,  			     int id,  			     struct vmw_resource **p_res); +extern int vmw_user_lookup_handle(struct vmw_private *dev_priv, +				  struct ttm_object_file *tfile, +				  uint32_t handle, +				  struct vmw_surface **out_surf, +				  struct vmw_dma_buffer **out_buf);  extern void vmw_surface_res_free(struct vmw_resource *res);  extern int vmw_surface_init(struct vmw_private *dev_priv,  			    struct vmw_surface *srf, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index 86c5e4cceb3..1c7f09e2681 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -1190,6 +1190,29 @@ void vmw_resource_unreserve(struct list_head *list)  		write_unlock(lock);  } +/** + * Helper function that looks either a surface or dmabuf. + * + * The pointer this pointed at by out_surf and out_buf needs to be null. + */ +int vmw_user_lookup_handle(struct vmw_private *dev_priv, +			   struct ttm_object_file *tfile, +			   uint32_t handle, +			   struct vmw_surface **out_surf, +			   struct vmw_dma_buffer **out_buf) +{ +	int ret; + +	BUG_ON(*out_surf || *out_buf); + +	ret = vmw_user_surface_lookup_handle(dev_priv, tfile, handle, out_surf); +	if (!ret) +		return 0; + +	ret = vmw_user_dmabuf_lookup(tfile, handle, out_buf); +	return ret; +} +  int vmw_user_surface_lookup_handle(struct vmw_private *dev_priv,  				   struct ttm_object_file *tfile,  |