0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _EXYNOS_DRM_GEM_H_
0009 #define _EXYNOS_DRM_GEM_H_
0010
0011 #include <drm/drm_gem.h>
0012 #include <linux/mm_types.h>
0013
0014 #define to_exynos_gem(x) container_of(x, struct exynos_drm_gem, base)
0015
0016 #define IS_NONCONTIG_BUFFER(f) (f & EXYNOS_BO_NONCONTIG)
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 struct exynos_drm_gem {
0039 struct drm_gem_object base;
0040 unsigned int flags;
0041 unsigned long size;
0042 void *cookie;
0043 void *kvaddr;
0044 dma_addr_t dma_addr;
0045 unsigned long dma_attrs;
0046 struct sg_table *sgt;
0047 };
0048
0049
0050 void exynos_drm_gem_destroy(struct exynos_drm_gem *exynos_gem);
0051
0052
0053 struct exynos_drm_gem *exynos_drm_gem_create(struct drm_device *dev,
0054 unsigned int flags,
0055 unsigned long size,
0056 bool kvmap);
0057
0058
0059
0060
0061
0062
0063 int exynos_drm_gem_create_ioctl(struct drm_device *dev, void *data,
0064 struct drm_file *file_priv);
0065
0066
0067 int exynos_drm_gem_map_ioctl(struct drm_device *dev, void *data,
0068 struct drm_file *file_priv);
0069
0070
0071
0072
0073
0074
0075 struct exynos_drm_gem *exynos_drm_gem_get(struct drm_file *filp,
0076 unsigned int gem_handle);
0077
0078
0079
0080
0081
0082 static inline void exynos_drm_gem_put(struct exynos_drm_gem *exynos_gem)
0083 {
0084 drm_gem_object_put(&exynos_gem->base);
0085 }
0086
0087
0088 int exynos_drm_gem_get_ioctl(struct drm_device *dev, void *data,
0089 struct drm_file *file_priv);
0090
0091
0092 void exynos_drm_gem_free_object(struct drm_gem_object *obj);
0093
0094
0095 int exynos_drm_gem_dumb_create(struct drm_file *file_priv,
0096 struct drm_device *dev,
0097 struct drm_mode_create_dumb *args);
0098
0099
0100 struct drm_gem_object *exynos_drm_gem_prime_import(struct drm_device *dev,
0101 struct dma_buf *dma_buf);
0102 struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj);
0103 struct drm_gem_object *
0104 exynos_drm_gem_prime_import_sg_table(struct drm_device *dev,
0105 struct dma_buf_attachment *attach,
0106 struct sg_table *sgt);
0107
0108 #endif