From 799dc0363fc2c4c98f18dbd9abf39c20811618d9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 22 May 2009 10:32:08 +0100 Subject: Implement glamo_ioctl_gem_mmap This implements the ioctl used for mapping GEM objects into memory. This needs a unit test in glamo-dri-tests, but for the time being appears to make X.org less segfaulty. Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-buffer.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'drivers/mfd/glamo/glamo-buffer.c') diff --git a/drivers/mfd/glamo/glamo-buffer.c b/drivers/mfd/glamo/glamo-buffer.c index a1da63f6e9b..945824a1b15 100644 --- a/drivers/mfd/glamo/glamo-buffer.c +++ b/drivers/mfd/glamo/glamo-buffer.c @@ -85,7 +85,30 @@ fail: int glamo_ioctl_gem_mmap(struct drm_device *dev, void *data, struct drm_file *file_priv) { - printk(KERN_INFO "glamo_ioctl_gem_mmap\n"); + struct drm_glamo_gem_mmap *args = data; + struct drm_gem_object *obj; + loff_t offset; + unsigned long addr; + + obj = drm_gem_object_lookup(dev, file_priv, args->handle); + if (obj == NULL) + return -EBADF; + + offset = args->offset; + + down_write(¤t->mm->mmap_sem); + addr = do_mmap(obj->filp, 0, args->size, + PROT_READ | PROT_WRITE, MAP_SHARED, + args->offset); + up_write(¤t->mm->mmap_sem); + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(obj); + mutex_unlock(&dev->struct_mutex); + if (IS_ERR((void *)addr)) + return addr; + + args->addr_ptr = (uint64_t) addr; + return 0; } -- cgit v1.2.3