drm/rockchip: add rk3399 vop big csc support
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / rockchip / rockchip_drm_gem.h
index ad22618473a488b10a10e1155f85bc79e1c8870e..c10582ec0b5917c3569ab15a28a0bc5d9c5cf9cf 100644 (file)
@@ -21,14 +21,33 @@ struct rockchip_gem_object {
        struct drm_gem_object base;
        unsigned int flags;
 
+       struct sg_table *sgt;
        void *kvaddr;
        dma_addr_t dma_addr;
        struct dma_attrs dma_attrs;
+
+#ifdef CONFIG_DRM_DMA_SYNC
+       struct fence *acquire_fence;
+       atomic_t acquire_shared_count;
+       bool acquire_exclusive;
+#endif
+};
+
+/*
+ * rockchip drm GEM object linked list structure.
+ *
+ * @list: list link.
+ * @rockchip_gem_obj: struct rockchhip_gem_object that this entry points to.
+ */
+struct rockchip_gem_object_node {
+       struct list_head                list;
+       struct rockchip_gem_object      *rockchip_gem_obj;
 };
 
 struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj);
 struct drm_gem_object *
-rockchip_gem_prime_import_sg_table(struct drm_device *dev, size_t size,
+rockchip_gem_prime_import_sg_table(struct drm_device *dev,
+                                  struct dma_buf_attachment *attach,
                                   struct sg_table *sgt);
 void *rockchip_gem_prime_vmap(struct drm_gem_object *obj);
 void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
@@ -52,4 +71,27 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 int rockchip_gem_dumb_map_offset(struct drm_file *file_priv,
                                 struct drm_device *dev, uint32_t handle,
                                 uint64_t *offset);
+/*
+ * request gem object creation and buffer allocation as the size
+ * that it is calculated with framebuffer information such as width,
+ * height and bpp.
+ */
+int rockchip_gem_create_ioctl(struct drm_device *dev, void *data,
+                             struct drm_file *file_priv);
+
+/* get buffer offset to map to user space. */
+int rockchip_gem_map_offset_ioctl(struct drm_device *dev, void *data,
+                                 struct drm_file *file_priv);
+
+/*
+ * acquire gem object for CPU access.
+ */
+int rockchip_gem_cpu_acquire_ioctl(struct drm_device *dev, void* data,
+                                  struct drm_file *file_priv);
+/*
+ * release gem object after CPU access.
+ */
+int rockchip_gem_cpu_release_ioctl(struct drm_device *dev, void* data,
+                                  struct drm_file *file_priv);
+
 #endif /* _ROCKCHIP_DRM_GEM_H */