diff options
author | Thomas White <taw@bitwiz.org.uk> | 2009-05-22 10:32:08 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2009-05-22 10:32:08 +0100 |
commit | 799dc0363fc2c4c98f18dbd9abf39c20811618d9 (patch) | |
tree | b2390bef28ac888db92fde4348c3bc71a26df9ed /drivers/mfd | |
parent | e8950ddf2823a4b2698870b057409fd98abb3aae (diff) |
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 <taw@bitwiz.org.uk>
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/glamo/glamo-buffer.c | 25 |
1 files changed, 24 insertions, 1 deletions
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; } |