From d8e4b9ff4dc8bf57e53fa174f977c8fb00ec4e90 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 11 Jun 2009 16:28:49 +0100 Subject: Front buffer kludge This makes the GEM "info" ioctl produce an object handle which can be used to refer to the front buffer (i.e. screen pixmap) in Xorg or otherwise. This is unfortunately necessary since this memory is allocated in the kernel by the framebuffer driver, and is not available to DRM until we move to KMS. Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-cmdq.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'drivers/mfd/glamo/glamo-cmdq.c') diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c index 32fad98be8a..3c410f828da 100644 --- a/drivers/mfd/glamo/glamo-cmdq.c +++ b/drivers/mfd/glamo/glamo-cmdq.c @@ -243,6 +243,7 @@ static int glamo_do_relocation(struct glamodrm_handle *gdrm, struct drm_file *file_priv) { u32 *handles; + u32 front_handle; int *offsets; int nobjs = cbuf->nobjs; int i; @@ -259,6 +260,8 @@ static int glamo_do_relocation(struct glamodrm_handle *gdrm, if ( copy_from_user(offsets, cbuf->obj_pos, nobjs*sizeof(int)) ) return -1; + front_handle = gdrm->front_buffer_handle; + for ( i=0; idriver_private; - if ( gobj == NULL ) { - printk(KERN_WARNING "[glamo-drm] This object has no " - "private data!\n"); - goto fail; + } else { + obj = drm_gem_object_lookup(dev, file_priv, handle); + if ( obj == NULL ) return -1; + + /* Unref the object now, or it'll never get freed. + * This should really happen after the GPU has finished + * the commands which are about to be submitted. */ + drm_gem_object_unreference(obj); + + gobj = obj->driver_private; + if ( gobj == NULL ) { + printk(KERN_WARNING "[glamo-drm] This object " + "has no private data!\n"); + goto fail; + } + + addr = GLAMO_OFFSET_WORK + gobj->block->start; } - addr = GLAMO_OFFSET_WORK + gobj->block->start; addr_low = addr & 0xffff; addr_high = (addr >> 16) & 0x7f; printk(KERN_INFO "Addr low 0x%x, high 0x%x\n", -- cgit v1.2.3