diff options
Diffstat (limited to 'include/drm/drm_gem.h')
| -rw-r--r-- | include/drm/drm_gem.h | 181 | 
1 files changed, 131 insertions, 50 deletions
diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index 3583b98a1718..c95727425284 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -38,6 +38,121 @@  #include <drm/drm_vma_manager.h> +struct drm_gem_object; + +/** + * struct drm_gem_object_funcs - GEM object functions + */ +struct drm_gem_object_funcs { +	/** +	 * @free: +	 * +	 * Deconstructor for drm_gem_objects. +	 * +	 * This callback is mandatory. +	 */ +	void (*free)(struct drm_gem_object *obj); + +	/** +	 * @open: +	 * +	 * Called upon GEM handle creation. +	 * +	 * This callback is optional. +	 */ +	int (*open)(struct drm_gem_object *obj, struct drm_file *file); + +	/** +	 * @close: +	 * +	 * Called upon GEM handle release. +	 * +	 * This callback is optional. +	 */ +	void (*close)(struct drm_gem_object *obj, struct drm_file *file); + +	/** +	 * @print_info: +	 * +	 * If driver subclasses struct &drm_gem_object, it can implement this +	 * optional hook for printing additional driver specific info. +	 * +	 * drm_printf_indent() should be used in the callback passing it the +	 * indent argument. +	 * +	 * This callback is called from drm_gem_print_info(). +	 * +	 * This callback is optional. +	 */ +	void (*print_info)(struct drm_printer *p, unsigned int indent, +			   const struct drm_gem_object *obj); + +	/** +	 * @export: +	 * +	 * Export backing buffer as a &dma_buf. +	 * If this is not set drm_gem_prime_export() is used. +	 * +	 * This callback is optional. +	 */ +	struct dma_buf *(*export)(struct drm_gem_object *obj, int flags); + +	/** +	 * @pin: +	 * +	 * Pin backing buffer in memory. +	 * +	 * This callback is optional. +	 */ +	int (*pin)(struct drm_gem_object *obj); + +	/** +	 * @unpin: +	 * +	 * Unpin backing buffer. +	 * +	 * This callback is optional. +	 */ +	void (*unpin)(struct drm_gem_object *obj); + +	/** +	 * @get_sg_table: +	 * +	 * Returns a Scatter-Gather table representation of the buffer. +	 * Used when exporting a buffer. +	 * +	 * This callback is mandatory if buffer export is supported. +	 */ +	struct sg_table *(*get_sg_table)(struct drm_gem_object *obj); + +	/** +	 * @vmap: +	 * +	 * Returns a virtual address for the buffer. +	 * +	 * This callback is optional. +	 */ +	void *(*vmap)(struct drm_gem_object *obj); + +	/** +	 * @vunmap: +	 * +	 * Releases the the address previously returned by @vmap. +	 * +	 * This callback is optional. +	 */ +	void (*vunmap)(struct drm_gem_object *obj, void *vaddr); + +	/** +	 * @vm_ops: +	 * +	 * Virtual memory operations used with mmap. +	 * +	 * This is optional but necessary for mmap support. +	 */ +	const struct vm_operations_struct *vm_ops; +}; +  /**   * struct drm_gem_object - GEM buffer object   * @@ -146,6 +261,17 @@ struct drm_gem_object {  	 * simply leave it as NULL.  	 */  	struct dma_buf_attachment *import_attach; + +	/** +	 * @funcs: +	 * +	 * Optional GEM object functions. If this is set, it will be used instead of the +	 * corresponding &drm_driver GEM callbacks. +	 * +	 * New drivers should use this. +	 * +	 */ +	const struct drm_gem_object_funcs *funcs;  };  /** @@ -222,56 +348,6 @@ __drm_gem_object_put(struct drm_gem_object *obj)  void drm_gem_object_put_unlocked(struct drm_gem_object *obj);  void drm_gem_object_put(struct drm_gem_object *obj); -/** - * drm_gem_object_reference - acquire a GEM buffer object reference - * @obj: GEM buffer object - * - * This is a compatibility alias for drm_gem_object_get() and should not be - * used by new code. - */ -static inline void drm_gem_object_reference(struct drm_gem_object *obj) -{ -	drm_gem_object_get(obj); -} - -/** - * __drm_gem_object_unreference - raw function to release a GEM buffer object - *                                reference - * @obj: GEM buffer object - * - * This is a compatibility alias for __drm_gem_object_put() and should not be - * used by new code. - */ -static inline void __drm_gem_object_unreference(struct drm_gem_object *obj) -{ -	__drm_gem_object_put(obj); -} - -/** - * drm_gem_object_unreference_unlocked - release a GEM buffer object reference - * @obj: GEM buffer object - * - * This is a compatibility alias for drm_gem_object_put_unlocked() and should - * not be used by new code. - */ -static inline void -drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) -{ -	drm_gem_object_put_unlocked(obj); -} - -/** - * drm_gem_object_unreference - release a GEM buffer object reference - * @obj: GEM buffer object - * - * This is a compatibility alias for drm_gem_object_put() and should not be - * used by new code. - */ -static inline void drm_gem_object_unreference(struct drm_gem_object *obj) -{ -	drm_gem_object_put(obj); -} -  int drm_gem_handle_create(struct drm_file *file_priv,  			  struct drm_gem_object *obj,  			  u32 *handlep); @@ -293,4 +369,9 @@ int drm_gem_dumb_destroy(struct drm_file *file,  			 struct drm_device *dev,  			 uint32_t handle); +int drm_gem_pin(struct drm_gem_object *obj); +void drm_gem_unpin(struct drm_gem_object *obj); +void *drm_gem_vmap(struct drm_gem_object *obj); +void drm_gem_vunmap(struct drm_gem_object *obj, void *vaddr); +  #endif /* __DRM_GEM_H__ */  |