Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * omap_gem.h -- OMAP DRM GEM Object Management
0004  *
0005  * Copyright (C) 2011 Texas Instruments
0006  * Author: Rob Clark <rob@ti.com>
0007  */
0008 
0009 #ifndef __OMAPDRM_GEM_H__
0010 #define __OMAPDRM_GEM_H__
0011 
0012 #include <linux/types.h>
0013 #include <linux/mm_types.h>
0014 
0015 enum dma_data_direction;
0016 
0017 struct dma_buf;
0018 struct drm_device;
0019 struct drm_file;
0020 struct drm_gem_object;
0021 struct drm_mode_create_dumb;
0022 struct file;
0023 struct list_head;
0024 struct page;
0025 struct seq_file;
0026 struct vm_area_struct;
0027 struct vm_fault;
0028 
0029 union omap_gem_size;
0030 
0031 /* Initialization and Cleanup */
0032 void omap_gem_init(struct drm_device *dev);
0033 void omap_gem_deinit(struct drm_device *dev);
0034 
0035 #ifdef CONFIG_PM
0036 int omap_gem_resume(struct drm_device *dev);
0037 #endif
0038 
0039 #ifdef CONFIG_DEBUG_FS
0040 void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m);
0041 void omap_gem_describe_objects(struct list_head *list, struct seq_file *m);
0042 #endif
0043 
0044 /* GEM Object Creation and Deletion */
0045 struct drm_gem_object *omap_gem_new(struct drm_device *dev,
0046         union omap_gem_size gsize, u32 flags);
0047 struct drm_gem_object *omap_gem_new_dmabuf(struct drm_device *dev, size_t size,
0048         struct sg_table *sgt);
0049 int omap_gem_new_handle(struct drm_device *dev, struct drm_file *file,
0050         union omap_gem_size gsize, u32 flags, u32 *handle);
0051 void *omap_gem_vaddr(struct drm_gem_object *obj);
0052 
0053 /* Dumb Buffers Interface */
0054 int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
0055         u32 handle, u64 *offset);
0056 int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
0057         struct drm_mode_create_dumb *args);
0058 
0059 /* mmap() Interface */
0060 int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
0061 int omap_gem_mmap_obj(struct drm_gem_object *obj,
0062         struct vm_area_struct *vma);
0063 u64 omap_gem_mmap_offset(struct drm_gem_object *obj);
0064 size_t omap_gem_mmap_size(struct drm_gem_object *obj);
0065 
0066 /* PRIME Interface */
0067 struct dma_buf *omap_gem_prime_export(struct drm_gem_object *obj, int flags);
0068 struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev,
0069         struct dma_buf *buffer);
0070 
0071 int omap_gem_roll(struct drm_gem_object *obj, u32 roll);
0072 void omap_gem_cpu_sync_page(struct drm_gem_object *obj, int pgoff);
0073 void omap_gem_dma_sync_buffer(struct drm_gem_object *obj,
0074         enum dma_data_direction dir);
0075 int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr);
0076 void omap_gem_unpin(struct drm_gem_object *obj);
0077 int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages,
0078         bool remap);
0079 int omap_gem_put_pages(struct drm_gem_object *obj);
0080 
0081 u32 omap_gem_flags(struct drm_gem_object *obj);
0082 int omap_gem_rotated_dma_addr(struct drm_gem_object *obj, u32 orient,
0083         int x, int y, dma_addr_t *dma_addr);
0084 int omap_gem_tiled_stride(struct drm_gem_object *obj, u32 orient);
0085 struct sg_table *omap_gem_get_sg(struct drm_gem_object *obj,
0086         enum dma_data_direction dir);
0087 void omap_gem_put_sg(struct drm_gem_object *obj, struct sg_table *sgt);
0088 
0089 #endif /* __OMAPDRM_GEM_H__ */