xref: /openbsd-src/sys/dev/pci/drm/include/drm/drm_gem_dma_helper.h (revision f005ef32267c16bdb134f0e9fa4477dbe07c263a)
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