1 /* Public Domain */ 2 3 #ifndef _DRM_DRM_GEM_DMA_HELPER_H 4 #define _DRM_DRM_GEM_DMA_HELPER_H 5 6 #include <drm/drm_gem.h> 7 8 void drm_gem_dma_free_object(struct drm_gem_object *); 9 int drm_gem_dma_dumb_create(struct drm_file *, struct drm_device *, 10 struct drm_mode_create_dumb *); 11 int drm_gem_dma_dumb_create_internal(struct drm_file *, struct drm_device *, 12 struct drm_mode_create_dumb *); 13 int drm_gem_dma_dumb_map_offset(struct drm_file *, struct drm_device *, 14 uint32_t, uint64_t *); 15 struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *, 16 size_t); 17 18 int drm_gem_dma_fault(struct drm_gem_object *, struct uvm_faultinfo *, 19 off_t, vaddr_t, vm_page_t *, int, int, vm_prot_t, int); 20 21 struct sg_table *drm_gem_dma_get_sg_table(struct drm_gem_object *); 22 23 int drm_gem_dma_vmap(struct drm_gem_object *, struct iosys_map *); 24 25 struct drm_gem_dma_object { 26 struct drm_gem_object base; 27 bus_dma_tag_t dmat; 28 bus_dmamap_t dmamap; 29 bus_dma_segment_t dmasegs[1]; 30 size_t dmasize; 31 dma_addr_t dma_addr; 32 caddr_t vaddr; 33 struct sg_table *sgt; 34 bool map_noncoherent; 35 }; 36 37 #define to_drm_gem_dma_obj(gem_obj) container_of(gem_obj, struct drm_gem_dma_object, base) 38 39 #define DEFINE_DRM_GEM_DMA_FOPS(name) struct file_operations name = {}; 40 41 #define DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(x) \ 42 .dumb_create = (x), \ 43 .gem_fault = drm_gem_dma_fault 44 45 #endif 46