1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * omap_gem.h -- OMAP DRM GEM Object Management 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2011 Texas Instruments 6*4882a593Smuzhiyun * Author: Rob Clark <rob@ti.com> 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef __OMAPDRM_GEM_H__ 10*4882a593Smuzhiyun #define __OMAPDRM_GEM_H__ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/types.h> 13*4882a593Smuzhiyun #include <linux/mm_types.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun enum dma_data_direction; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun struct dma_buf; 18*4882a593Smuzhiyun struct drm_device; 19*4882a593Smuzhiyun struct drm_file; 20*4882a593Smuzhiyun struct drm_gem_object; 21*4882a593Smuzhiyun struct drm_mode_create_dumb; 22*4882a593Smuzhiyun struct file; 23*4882a593Smuzhiyun struct list_head; 24*4882a593Smuzhiyun struct page; 25*4882a593Smuzhiyun struct seq_file; 26*4882a593Smuzhiyun struct vm_area_struct; 27*4882a593Smuzhiyun struct vm_fault; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun union omap_gem_size; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* Initialization and Cleanup */ 32*4882a593Smuzhiyun void omap_gem_init(struct drm_device *dev); 33*4882a593Smuzhiyun void omap_gem_deinit(struct drm_device *dev); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #ifdef CONFIG_PM 36*4882a593Smuzhiyun int omap_gem_resume(struct drm_device *dev); 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #ifdef CONFIG_DEBUG_FS 40*4882a593Smuzhiyun void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m); 41*4882a593Smuzhiyun void omap_gem_describe_objects(struct list_head *list, struct seq_file *m); 42*4882a593Smuzhiyun #endif 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /* GEM Object Creation and Deletion */ 45*4882a593Smuzhiyun struct drm_gem_object *omap_gem_new(struct drm_device *dev, 46*4882a593Smuzhiyun union omap_gem_size gsize, u32 flags); 47*4882a593Smuzhiyun struct drm_gem_object *omap_gem_new_dmabuf(struct drm_device *dev, size_t size, 48*4882a593Smuzhiyun struct sg_table *sgt); 49*4882a593Smuzhiyun int omap_gem_new_handle(struct drm_device *dev, struct drm_file *file, 50*4882a593Smuzhiyun union omap_gem_size gsize, u32 flags, u32 *handle); 51*4882a593Smuzhiyun void omap_gem_free_object(struct drm_gem_object *obj); 52*4882a593Smuzhiyun void *omap_gem_vaddr(struct drm_gem_object *obj); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* Dumb Buffers Interface */ 55*4882a593Smuzhiyun int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, 56*4882a593Smuzhiyun u32 handle, u64 *offset); 57*4882a593Smuzhiyun int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev, 58*4882a593Smuzhiyun struct drm_mode_create_dumb *args); 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* mmap() Interface */ 61*4882a593Smuzhiyun int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma); 62*4882a593Smuzhiyun int omap_gem_mmap_obj(struct drm_gem_object *obj, 63*4882a593Smuzhiyun struct vm_area_struct *vma); 64*4882a593Smuzhiyun u64 omap_gem_mmap_offset(struct drm_gem_object *obj); 65*4882a593Smuzhiyun size_t omap_gem_mmap_size(struct drm_gem_object *obj); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* PRIME Interface */ 68*4882a593Smuzhiyun struct dma_buf *omap_gem_prime_export(struct drm_gem_object *obj, int flags); 69*4882a593Smuzhiyun struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev, 70*4882a593Smuzhiyun struct dma_buf *buffer); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun vm_fault_t omap_gem_fault(struct vm_fault *vmf); 73*4882a593Smuzhiyun int omap_gem_roll(struct drm_gem_object *obj, u32 roll); 74*4882a593Smuzhiyun void omap_gem_cpu_sync_page(struct drm_gem_object *obj, int pgoff); 75*4882a593Smuzhiyun void omap_gem_dma_sync_buffer(struct drm_gem_object *obj, 76*4882a593Smuzhiyun enum dma_data_direction dir); 77*4882a593Smuzhiyun int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr); 78*4882a593Smuzhiyun void omap_gem_unpin(struct drm_gem_object *obj); 79*4882a593Smuzhiyun int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages, 80*4882a593Smuzhiyun bool remap); 81*4882a593Smuzhiyun int omap_gem_put_pages(struct drm_gem_object *obj); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun u32 omap_gem_flags(struct drm_gem_object *obj); 84*4882a593Smuzhiyun int omap_gem_rotated_dma_addr(struct drm_gem_object *obj, u32 orient, 85*4882a593Smuzhiyun int x, int y, dma_addr_t *dma_addr); 86*4882a593Smuzhiyun int omap_gem_tiled_stride(struct drm_gem_object *obj, u32 orient); 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #endif /* __OMAPDRM_GEM_H__ */ 89