Commit 654bf12b authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/cma-helper: Add DRM_GEM_CMA_DRIVER_OPS to set default GEM CMA functions

The macro to DRM_GEM_CMA_DRIVER_OPS sets GEM callbacks in struct drm_driver
to their defaults for CMA. A variant of the macro is provided for drivers
that override the default .dumb_create callback. Adapt drivers to the changes.

v4:
	* remove parenthesis around dumb_create_func
	* fix grammar in commit message
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarEmil Velikov <emil.velikov@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200605073247.4057-4-tzimmermann@suse.de
parent 06d66201
...@@ -109,6 +109,42 @@ void drm_gem_cma_prime_vunmap(struct drm_gem_object *obj, void *vaddr); ...@@ -109,6 +109,42 @@ void drm_gem_cma_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
struct drm_gem_object * struct drm_gem_object *
drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size); drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size);
/**
* DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE - CMA GEM driver operations
* @dumb_create_func: callback function for .dumb_create
*
* This macro provides a shortcut for setting the default GEM operations in the
* &drm_driver structure.
*
* This macro is a variant of DRM_GEM_CMA_DRIVER_OPS for drivers that
* override the default implementation of &struct rm_driver.dumb_create. Use
* DRM_GEM_CMA_DRIVER_OPS if possible. Drivers that require a virtual address
* on imported buffers should use
* DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead.
*/
#define DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(dumb_create_func) \
.gem_create_object = drm_gem_cma_create_object_default_funcs, \
.dumb_create = (dumb_create_func), \
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table, \
.gem_prime_mmap = drm_gem_cma_prime_mmap
/**
* DRM_GEM_CMA_DRIVER_OPS - CMA GEM driver operations
*
* This macro provides a shortcut for setting the default GEM operations in the
* &drm_driver structure.
*
* Drivers that come with their own implementation of
* &struct drm_driver.dumb_create should use
* DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE() instead. Use
* DRM_GEM_CMA_DRIVER_OPS if possible. Drivers that require a virtual address
* on imported buffers should use DRM_GEM_CMA_DRIVER_OPS_VMAP instead.
*/
#define DRM_GEM_CMA_DRIVER_OPS \
DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(drm_gem_cma_dumb_create)
/** /**
* DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE - CMA GEM driver operations * DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE - CMA GEM driver operations
* ensuring a virtual address * ensuring a virtual address
...@@ -120,12 +156,14 @@ drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size); ...@@ -120,12 +156,14 @@ drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size);
* imported buffers. * imported buffers.
* *
* This macro is a variant of DRM_GEM_CMA_DRIVER_OPS_VMAP for drivers that * This macro is a variant of DRM_GEM_CMA_DRIVER_OPS_VMAP for drivers that
* override the default implementation of &struct rm_driver.dumb_create. Use * override the default implementation of &struct drm_driver.dumb_create. Use
* DRM_GEM_CMA_DRIVER_OPS_VMAP if possible. * DRM_GEM_CMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a
* virtual address on imported buffers should use
* DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE() instead.
*/ */
#define DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(dumb_create_func) \ #define DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(dumb_create_func) \
.gem_create_object = drm_gem_cma_create_object_default_funcs, \ .gem_create_object = drm_gem_cma_create_object_default_funcs, \
.dumb_create = (dumb_create_func), \ .dumb_create = dumb_create_func, \
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \ .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \ .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table_vmap, \ .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table_vmap, \
...@@ -142,7 +180,9 @@ drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size); ...@@ -142,7 +180,9 @@ drm_gem_cma_create_object_default_funcs(struct drm_device *dev, size_t size);
* Drivers that come with their own implementation of * Drivers that come with their own implementation of
* &struct drm_driver.dumb_create should use * &struct drm_driver.dumb_create should use
* DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead. Use * DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE() instead. Use
* DRM_GEM_CMA_DRIVER_OPS_VMAP if possible. * DRM_GEM_CMA_DRIVER_OPS_VMAP if possible. Drivers that do not require a
* virtual address on imported buffers should use DRM_GEM_CMA_DRIVER_OPS
* instead.
*/ */
#define DRM_GEM_CMA_DRIVER_OPS_VMAP \ #define DRM_GEM_CMA_DRIVER_OPS_VMAP \
DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(drm_gem_cma_dumb_create) DRM_GEM_CMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(drm_gem_cma_dumb_create)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment