diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem_vram_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem_vram_helper.c | 94 | 
1 files changed, 45 insertions, 49 deletions
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c index 4de782ca26b2..fd751078bae1 100644 --- a/drivers/gpu/drm/drm_gem_vram_helper.c +++ b/drivers/gpu/drm/drm_gem_vram_helper.c @@ -7,6 +7,8 @@  #include <drm/drm_vram_mm_helper.h>  #include <drm/ttm/ttm_page_alloc.h> +static const struct drm_gem_object_funcs drm_gem_vram_object_funcs; +  /**   * DOC: overview   * @@ -24,7 +26,7 @@ static void drm_gem_vram_cleanup(struct drm_gem_vram_object *gbo)  	 * TTM buffer object in 'bo' has already been cleaned  	 * up; only release the GEM object.  	 */ -	drm_gem_object_release(&gbo->gem); +	drm_gem_object_release(&gbo->bo.base);  }  static void drm_gem_vram_destroy(struct drm_gem_vram_object *gbo) @@ -80,7 +82,10 @@ static int drm_gem_vram_init(struct drm_device *dev,  	int ret;  	size_t acc_size; -	ret = drm_gem_object_init(dev, &gbo->gem, size); +	if (!gbo->bo.base.funcs) +		gbo->bo.base.funcs = &drm_gem_vram_object_funcs; + +	ret = drm_gem_object_init(dev, &gbo->bo.base, size);  	if (ret)  		return ret; @@ -98,7 +103,7 @@ static int drm_gem_vram_init(struct drm_device *dev,  	return 0;  err_drm_gem_object_release: -	drm_gem_object_release(&gbo->gem); +	drm_gem_object_release(&gbo->bo.base);  	return ret;  } @@ -163,7 +168,7 @@ EXPORT_SYMBOL(drm_gem_vram_put);   */  u64 drm_gem_vram_mmap_offset(struct drm_gem_vram_object *gbo)  { -	return drm_vma_node_offset_addr(&gbo->bo.vma_node); +	return drm_vma_node_offset_addr(&gbo->bo.base.vma_node);  }  EXPORT_SYMBOL(drm_gem_vram_mmap_offset); @@ -378,11 +383,11 @@ int drm_gem_vram_fill_create_dumb(struct drm_file *file,  	if (IS_ERR(gbo))  		return PTR_ERR(gbo); -	ret = drm_gem_handle_create(file, &gbo->gem, &handle); +	ret = drm_gem_handle_create(file, &gbo->bo.base, &handle);  	if (ret)  		goto err_drm_gem_object_put_unlocked; -	drm_gem_object_put_unlocked(&gbo->gem); +	drm_gem_object_put_unlocked(&gbo->bo.base);  	args->pitch = pitch;  	args->size = size; @@ -391,7 +396,7 @@ int drm_gem_vram_fill_create_dumb(struct drm_file *file,  	return 0;  err_drm_gem_object_put_unlocked: -	drm_gem_object_put_unlocked(&gbo->gem); +	drm_gem_object_put_unlocked(&gbo->bo.base);  	return ret;  }  EXPORT_SYMBOL(drm_gem_vram_fill_create_dumb); @@ -441,7 +446,7 @@ int drm_gem_vram_bo_driver_verify_access(struct ttm_buffer_object *bo,  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_bo(bo); -	return drm_vma_node_verify_access(&gbo->gem.vma_node, +	return drm_vma_node_verify_access(&gbo->bo.base.vma_node,  					  filp->private_data);  }  EXPORT_SYMBOL(drm_gem_vram_bo_driver_verify_access); @@ -460,21 +465,24 @@ const struct drm_vram_mm_funcs drm_gem_vram_mm_funcs = {  EXPORT_SYMBOL(drm_gem_vram_mm_funcs);  /* - * Helpers for struct drm_driver + * Helpers for struct drm_gem_object_funcs   */  /** - * drm_gem_vram_driver_gem_free_object_unlocked() - \ -	Implements &struct drm_driver.gem_free_object_unlocked - * @gem:	GEM object. Refers to &struct drm_gem_vram_object.gem + * drm_gem_vram_object_free() - \ +	Implements &struct drm_gem_object_funcs.free + * @gem:       GEM object. Refers to &struct drm_gem_vram_object.gem   */ -void drm_gem_vram_driver_gem_free_object_unlocked(struct drm_gem_object *gem) +static void drm_gem_vram_object_free(struct drm_gem_object *gem)  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem);  	drm_gem_vram_put(gbo);  } -EXPORT_SYMBOL(drm_gem_vram_driver_gem_free_object_unlocked); + +/* + * Helpers for dump buffers + */  /**   * drm_gem_vram_driver_create_dumb() - \ @@ -536,19 +544,19 @@ int drm_gem_vram_driver_dumb_mmap_offset(struct drm_file *file,  EXPORT_SYMBOL(drm_gem_vram_driver_dumb_mmap_offset);  /* - * PRIME helpers for struct drm_driver + * PRIME helpers   */  /** - * drm_gem_vram_driver_gem_prime_pin() - \ -	Implements &struct drm_driver.gem_prime_pin + * drm_gem_vram_object_pin() - \ +	Implements &struct drm_gem_object_funcs.pin   * @gem:	The GEM object to pin   *   * Returns:   * 0 on success, or   * a negative errno code otherwise.   */ -int drm_gem_vram_driver_gem_prime_pin(struct drm_gem_object *gem) +static int drm_gem_vram_object_pin(struct drm_gem_object *gem)  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem); @@ -562,31 +570,29 @@ int drm_gem_vram_driver_gem_prime_pin(struct drm_gem_object *gem)  	 */  	return drm_gem_vram_pin(gbo, 0);  } -EXPORT_SYMBOL(drm_gem_vram_driver_gem_prime_pin);  /** - * drm_gem_vram_driver_gem_prime_unpin() - \ -	Implements &struct drm_driver.gem_prime_unpin + * drm_gem_vram_object_unpin() - \ +	Implements &struct drm_gem_object_funcs.unpin   * @gem:	The GEM object to unpin   */ -void drm_gem_vram_driver_gem_prime_unpin(struct drm_gem_object *gem) +static void drm_gem_vram_object_unpin(struct drm_gem_object *gem)  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem);  	drm_gem_vram_unpin(gbo);  } -EXPORT_SYMBOL(drm_gem_vram_driver_gem_prime_unpin);  /** - * drm_gem_vram_driver_gem_prime_vmap() - \ -	Implements &struct drm_driver.gem_prime_vmap + * drm_gem_vram_object_vmap() - \ +	Implements &struct drm_gem_object_funcs.vmap   * @gem:	The GEM object to map   *   * Returns:   * The buffers virtual address on success, or   * NULL otherwise.   */ -void *drm_gem_vram_driver_gem_prime_vmap(struct drm_gem_object *gem) +static void *drm_gem_vram_object_vmap(struct drm_gem_object *gem)  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem);  	int ret; @@ -602,40 +608,30 @@ void *drm_gem_vram_driver_gem_prime_vmap(struct drm_gem_object *gem)  	}  	return base;  } -EXPORT_SYMBOL(drm_gem_vram_driver_gem_prime_vmap);  /** - * drm_gem_vram_driver_gem_prime_vunmap() - \ -	Implements &struct drm_driver.gem_prime_vunmap + * drm_gem_vram_object_vunmap() - \ +	Implements &struct drm_gem_object_funcs.vunmap   * @gem:	The GEM object to unmap   * @vaddr:	The mapping's base address   */ -void drm_gem_vram_driver_gem_prime_vunmap(struct drm_gem_object *gem, -					  void *vaddr) +static void drm_gem_vram_object_vunmap(struct drm_gem_object *gem, +				       void *vaddr)  {  	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem);  	drm_gem_vram_kunmap(gbo);  	drm_gem_vram_unpin(gbo);  } -EXPORT_SYMBOL(drm_gem_vram_driver_gem_prime_vunmap); -/** - * drm_gem_vram_driver_gem_prime_mmap() - \ -	Implements &struct drm_driver.gem_prime_mmap - * @gem:	The GEM object to map - * @vma:	The VMA describing the mapping - * - * Returns: - * 0 on success, or - * a negative errno code otherwise. +/* + * GEM object funcs   */ -int drm_gem_vram_driver_gem_prime_mmap(struct drm_gem_object *gem, -				       struct vm_area_struct *vma) -{ -	struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem); -	gbo->gem.vma_node.vm_node.start = gbo->bo.vma_node.vm_node.start; -	return drm_gem_prime_mmap(gem, vma); -} -EXPORT_SYMBOL(drm_gem_vram_driver_gem_prime_mmap); +static const struct drm_gem_object_funcs drm_gem_vram_object_funcs = { +	.free	= drm_gem_vram_object_free, +	.pin	= drm_gem_vram_object_pin, +	.unpin	= drm_gem_vram_object_unpin, +	.vmap	= drm_gem_vram_object_vmap, +	.vunmap	= drm_gem_vram_object_vunmap +};  |