drm/fb_cma_helper: Add support for the fbdev dma-buf API
Add support for the new semi-standard fbdev API for dma-buf exports to
user space.
Change-Id: I8df10b2d214bb75a0c3f42f4c6ce58da9e9573b8
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index c19a625..dd2d817 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -220,16 +220,33 @@
EXPORT_SYMBOL_GPL(drm_fb_cma_debugfs_show);
#endif
+
+struct dma_buf *drm_fb_cma_get_dmabuf(struct fb_info *info)
+{
+ struct drm_fb_helper *helper = info->par;
+ struct drm_device *dev = helper->dev;
+ struct drm_gem_cma_object *cma_obj;
+
+ if (dev->driver->gem_prime_export) {
+ cma_obj = drm_fb_cma_get_gem_obj(helper->fb, 0);
+ return dev->driver->gem_prime_export(dev, &cma_obj->base,
+ O_RDWR);
+ } else
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(drm_fb_cma_get_dmabuf);
+
static struct fb_ops drm_fbdev_cma_ops = {
- .owner = THIS_MODULE,
- .fb_fillrect = drm_fb_helper_sys_fillrect,
- .fb_copyarea = drm_fb_helper_sys_copyarea,
- .fb_imageblit = drm_fb_helper_sys_imageblit,
- .fb_check_var = drm_fb_helper_check_var,
- .fb_set_par = drm_fb_helper_set_par,
- .fb_blank = drm_fb_helper_blank,
- .fb_pan_display = drm_fb_helper_pan_display,
- .fb_setcmap = drm_fb_helper_setcmap,
+ .owner = THIS_MODULE,
+ .fb_fillrect = drm_fb_helper_sys_fillrect,
+ .fb_copyarea = drm_fb_helper_sys_copyarea,
+ .fb_imageblit = drm_fb_helper_sys_imageblit,
+ .fb_check_var = drm_fb_helper_check_var,
+ .fb_set_par = drm_fb_helper_set_par,
+ .fb_blank = drm_fb_helper_blank,
+ .fb_pan_display = drm_fb_helper_pan_display,
+ .fb_setcmap = drm_fb_helper_setcmap,
+ .fb_dmabuf_export = drm_fb_cma_get_dmabuf,
};
static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h
index c54cf3d..9a0a7d1 100644
--- a/include/drm/drm_fb_cma_helper.h
+++ b/include/drm/drm_fb_cma_helper.h
@@ -27,5 +27,7 @@
int drm_fb_cma_debugfs_show(struct seq_file *m, void *arg);
#endif
+struct dma_buf *drm_fb_cma_get_dmabuf(struct fb_info *info);
+
#endif