Blame view

include/drm/drm_gem_cma_helper.h 3.41 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
2
3
  #ifndef __DRM_GEM_CMA_HELPER_H__
  #define __DRM_GEM_CMA_HELPER_H__
740c22ae5   Shawn Guo   drm/cma: include ...
4
  #include <drm/drmP.h>
d9fc9413f   Daniel Vetter   drm: Extract <drm...
5
  #include <drm/drm_gem.h>
740c22ae5   Shawn Guo   drm/cma: include ...
6

d7883f875   Thierry Reding   drm/doc: Add GEM/...
7
8
9
10
11
12
13
  /**
   * struct drm_gem_cma_object - GEM object backed by CMA memory allocations
   * @base: base GEM object
   * @paddr: physical address of the backing memory
   * @sgt: scatter/gather table for imported PRIME buffers
   * @vaddr: kernel virtual address of the backing memory
   */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
14
15
16
  struct drm_gem_cma_object {
  	struct drm_gem_object base;
  	dma_addr_t paddr;
71d7282a0   Laurent Pinchart   drm: GEM CMA: Add...
17
18
19
  	struct sg_table *sgt;
  
  	/* For objects with DMA memory allocated by GEM CMA */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
20
21
22
23
24
25
26
27
  	void *vaddr;
  };
  
  static inline struct drm_gem_cma_object *
  to_drm_gem_cma_obj(struct drm_gem_object *gem_obj)
  {
  	return container_of(gem_obj, struct drm_gem_cma_object, base);
  }
75cccac40   Eric Anholt   drm/cma: Fix rece...
28
29
30
31
32
33
  #ifndef CONFIG_MMU
  #define DRM_GEM_CMA_UNMAPPED_AREA_FOPS \
  	.get_unmapped_area	= drm_gem_cma_get_unmapped_area,
  #else
  #define DRM_GEM_CMA_UNMAPPED_AREA_FOPS
  #endif
d55f7e5d5   Daniel Vetter   drm: Create DEFIN...
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  /**
   * DEFINE_DRM_GEM_CMA_FOPS() - macro to generate file operations for CMA drivers
   * @name: name for the generated structure
   *
   * This macro autogenerates a suitable &struct file_operations for CMA based
   * drivers, which can be assigned to &drm_driver.fops. Note that this structure
   * cannot be shared between drivers, because it contains a reference to the
   * current module using THIS_MODULE.
   *
   * Note that the declaration is already marked as static - if you need a
   * non-static version of this you're probably doing it wrong and will break the
   * THIS_MODULE reference by accident.
   */
  #define DEFINE_DRM_GEM_CMA_FOPS(name) \
  	static const struct file_operations name = {\
  		.owner		= THIS_MODULE,\
  		.open		= drm_open,\
  		.release	= drm_release,\
  		.unlocked_ioctl	= drm_ioctl,\
  		.compat_ioctl	= drm_compat_ioctl,\
  		.poll		= drm_poll,\
  		.read		= drm_read,\
  		.llseek		= noop_llseek,\
  		.mmap		= drm_gem_cma_mmap,\
75cccac40   Eric Anholt   drm/cma: Fix rece...
58
  		DRM_GEM_CMA_UNMAPPED_AREA_FOPS \
d55f7e5d5   Daniel Vetter   drm: Create DEFIN...
59
  	}
d7883f875   Thierry Reding   drm/doc: Add GEM/...
60
  /* free GEM object */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
61
  void drm_gem_cma_free_object(struct drm_gem_object *gem_obj);
d7883f875   Thierry Reding   drm/doc: Add GEM/...
62
  /* create memory region for DRM framebuffer */
6d1782919   Thierry Reding   drm/cma: Introduc...
63
64
65
66
67
  int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
  				     struct drm_device *drm,
  				     struct drm_mode_create_dumb *args);
  
  /* create memory region for DRM framebuffer */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
68
  int drm_gem_cma_dumb_create(struct drm_file *file_priv,
d7883f875   Thierry Reding   drm/doc: Add GEM/...
69
70
  			    struct drm_device *drm,
  			    struct drm_mode_create_dumb *args);
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
71

d7883f875   Thierry Reding   drm/doc: Add GEM/...
72
  /* set vm_flags and we can change the VM attribute to other one at here */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
73
  int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
d7883f875   Thierry Reding   drm/doc: Add GEM/...
74
  /* allocate physical memory */
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
75
  struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
d7883f875   Thierry Reding   drm/doc: Add GEM/...
76
  					      size_t size);
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
77
78
  
  extern const struct vm_operations_struct drm_gem_cma_vm_ops;
62a0d98a1   Benjamin Gaignard   drm: allow to use...
79
80
81
82
83
84
  #ifndef CONFIG_MMU
  unsigned long drm_gem_cma_get_unmapped_area(struct file *filp,
  					    unsigned long addr,
  					    unsigned long len,
  					    unsigned long pgoff,
  					    unsigned long flags);
62a0d98a1   Benjamin Gaignard   drm: allow to use...
85
  #endif
6f646095e   Rob Clark   drm/cma: add debu...
86
87
88
  #ifdef CONFIG_DEBUG_FS
  void drm_gem_cma_describe(struct drm_gem_cma_object *obj, struct seq_file *m);
  #endif
78467dc5f   Joonyoung Shim   drm/cma: add low-...
89
90
  struct sg_table *drm_gem_cma_prime_get_sg_table(struct drm_gem_object *obj);
  struct drm_gem_object *
b5e9c1a25   Maarten Lankhorst   drm: Pass dma-buf...
91
92
  drm_gem_cma_prime_import_sg_table(struct drm_device *dev,
  				  struct dma_buf_attachment *attach,
78467dc5f   Joonyoung Shim   drm/cma: add low-...
93
94
95
96
97
  				  struct sg_table *sgt);
  int drm_gem_cma_prime_mmap(struct drm_gem_object *obj,
  			   struct vm_area_struct *vma);
  void *drm_gem_cma_prime_vmap(struct drm_gem_object *obj);
  void drm_gem_cma_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
b9d474500   Sascha Hauer   DRM: Add DRM GEM ...
98
  #endif /* __DRM_GEM_CMA_HELPER_H__ */