[PATCH] drm/exynos: Add exynos drm specific fb_mmap function
Rahul Sharma
rahul.sharma at samsung.com
Wed Nov 7 03:08:10 PST 2012
From: Prathyush K <prathyush.k at samsung.com>
This patch adds a exynos drm specific implementation of fb_mmap
which supports mapping a non-contiguous buffer to user space.
This new function does not assume that the frame buffer is contiguous
and calls dma_mmap_writecombine for mapping the buffer to user space.
dma_mmap_writecombine will be able to map a contiguous buffer as well
as non-contig buffer depending on whether an IOMMU mapping is created
for drm or not.
Signed-off-by: Prathyush K <prathyush.k at samsung.com>
Signed-off-by: Rahul Sharma <rahul.sharma at samsung.com>
---
drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 67eb6ba..3939f7f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -46,8 +46,34 @@ struct exynos_drm_fbdev {
struct exynos_drm_gem_obj *exynos_gem_obj;
};
+static int exynos_drm_fb_mmap(struct fb_info *info,
+ struct vm_area_struct *vma)
+{
+ DRM_DEBUG_KMS("%s\n", __func__);
+
+ if (!vma || !info) {
+ DRM_ERROR("invalid arguments vma 0x%x, info 0x%x.\n",
+ (unsigned int)vma, (unsigned int)info);
+ return -EINVAL;
+ }
+
+ if (!info->screen_base || info->screen_size == 0) {
+ DRM_ERROR("invalid screen information.\n");
+ return -EINVAL;
+ }
+
+ vma->vm_pgoff = 0;
+ vma->vm_flags |= VM_IO;
+ if (dma_mmap_writecombine(info->device, vma, info->screen_base,
+ info->fix.smem_start, vma->vm_end - vma->vm_start))
+ return -EAGAIN;
+
+ return 0;
+}
+
static struct fb_ops exynos_drm_fb_ops = {
.owner = THIS_MODULE,
+ .fb_mmap = exynos_drm_fb_mmap,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
--
1.7.0.4
More information about the dri-devel
mailing list