summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2009-04-14 15:30:24 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2009-04-14 15:30:24 +0100
commitd620ad6a40daf00196d32f0931800fd23357364f (patch)
tree44b2f5d43bfdf35ba3a15ba86aa67f0a8568992e /meta
parent1b4c8ad27e271a085672fd143bc2dac4f39f2754 (diff)
downloadopenembedded-core-d620ad6a40daf00196d32f0931800fd23357364f.tar.gz
openembedded-core-d620ad6a40daf00196d32f0931800fd23357364f.tar.bz2
openembedded-core-d620ad6a40daf00196d32f0931800fd23357364f.zip
libdrm: 2.4.4 -> 2.4.7
Diffstat (limited to 'meta')
-rw-r--r--meta/packages/drm/files/poulsbo.patch2516
-rw-r--r--meta/packages/drm/libdrm_2.4.7.bb (renamed from meta/packages/drm/libdrm_2.4.4.bb)5
2 files changed, 2 insertions, 2519 deletions
diff --git a/meta/packages/drm/files/poulsbo.patch b/meta/packages/drm/files/poulsbo.patch
deleted file mode 100644
index 91f8975f50..0000000000
--- a/meta/packages/drm/files/poulsbo.patch
+++ /dev/null
@@ -1,2516 +0,0 @@
-Index: libdrm-2.4.4/libdrm/xf86drm.c
-===================================================================
---- libdrm-2.4.4.orig/libdrm/xf86drm.c 2009-01-10 01:08:29.000000000 +0000
-+++ libdrm-2.4.4/libdrm/xf86drm.c 2009-02-05 12:23:22.000000000 +0000
-@@ -2402,6 +2402,569 @@
- return 0;
- }
-
-+
-+/*
-+ * Valid flags are
-+ * DRM_FENCE_FLAG_EMIT
-+ * DRM_FENCE_FLAG_SHAREABLE
-+ * DRM_FENCE_MASK_DRIVER
-+ */
-+
-+int drmFenceCreate(int fd, unsigned flags, int fence_class, unsigned type,
-+ drmFence *fence)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.flags = flags;
-+ arg.type = type;
-+ arg.fence_class = fence_class;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
-+ return -errno;
-+ fence->handle = arg.handle;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->flags = arg.flags;
-+ fence->signaled = 0;
-+ return 0;
-+}
-+
-+/*
-+ * Valid flags are
-+ * DRM_FENCE_FLAG_SHAREABLE
-+ * DRM_FENCE_MASK_DRIVER
-+ */
-+
-+int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fence)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.flags = flags;
-+ arg.fence_class = fence_class;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
-+ return -errno;
-+ fence->handle = arg.handle;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->flags = arg.flags;
-+ fence->sequence = arg.sequence;
-+ fence->signaled = 0;
-+ return 0;
-+}
-+
-+int drmFenceReference(int fd, unsigned handle, drmFence *fence)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
-+ return -errno;
-+ fence->handle = arg.handle;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->flags = arg.flags;
-+ fence->signaled = arg.signaled;
-+ return 0;
-+}
-+
-+int drmFenceUnreference(int fd, const drmFence *fence)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = fence->handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
-+ return -errno;
-+ return 0;
-+}
-+
-+int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = fence->handle;
-+ arg.type = flush_type;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
-+ return -errno;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->signaled = arg.signaled;
-+ return arg.error;
-+}
-+
-+int drmFenceUpdate(int fd, drmFence *fence)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = fence->handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
-+ return -errno;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->signaled = arg.signaled;
-+ return 0;
-+}
-+
-+int drmFenceSignaled(int fd, drmFence *fence, unsigned fenceType,
-+ int *signaled)
-+{
-+ if ((fence->flags & DRM_FENCE_FLAG_SHAREABLE) ||
-+ ((fenceType & fence->signaled) != fenceType)) {
-+ int ret = drmFenceFlush(fd, fence, fenceType);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ *signaled = ((fenceType & fence->signaled) == fenceType);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Valid flags are
-+ * DRM_FENCE_FLAG_SHAREABLE
-+ * DRM_FENCE_MASK_DRIVER
-+ */
-+
-+
-+int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
-+{
-+ drm_fence_arg_t arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.fence_class = fence->fence_class;
-+ arg.flags = flags;
-+ arg.handle = fence->handle;
-+ arg.type = emit_type;
-+
-+ if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
-+ return -errno;
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->signaled = arg.signaled;
-+ fence->sequence = arg.sequence;
-+ return 0;
-+}
-+
-+/*
-+ * Valid flags are
-+ * DRM_FENCE_FLAG_WAIT_LAZY
-+ * DRM_FENCE_FLAG_WAIT_IGNORE_SIGNALS
-+ */
-+
-+#define DRM_IOCTL_TIMEOUT_USEC 3000000UL
-+
-+static unsigned long
-+drmTimeDiff(struct timeval *now, struct timeval *then)
-+{
-+ uint64_t val;
-+
-+ val = now->tv_sec - then->tv_sec;
-+ val *= 1000000LL;
-+ val += now->tv_usec;
-+ val -= then->tv_usec;
-+
-+ return (unsigned long) val;
-+}
-+
-+static int
-+drmIoctlTimeout(int fd, unsigned long request, void *argp)
-+{
-+ int haveThen = 0;
-+ struct timeval then, now;
-+ int ret;
-+
-+ do {
-+ ret = ioctl(fd, request, argp);
-+ if (ret != 0 && errno == EAGAIN) {
-+ if (!haveThen) {
-+ gettimeofday(&then, NULL);
-+ haveThen = 1;
-+ }
-+ gettimeofday(&now, NULL);
-+ }
-+ } while (ret != 0 && errno == EAGAIN &&
-+ drmTimeDiff(&now, &then) < DRM_IOCTL_TIMEOUT_USEC);
-+
-+ if (ret != 0)
-+ return ((errno == EAGAIN) ? -EBUSY : -errno);
-+
-+ return 0;
-+}
-+
-+
-+
-+
-+int drmFenceWait(int fd, unsigned flags, drmFence *fence, unsigned flush_type)
-+{
-+ drm_fence_arg_t arg;
-+ int ret;
-+
-+ if (flush_type == 0) {
-+ flush_type = fence->type;
-+ }
-+
-+ if (!(fence->flags & DRM_FENCE_FLAG_SHAREABLE)) {
-+ if ((flush_type & fence->signaled) == flush_type) {
-+ return 0;
-+ }
-+ }
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = fence->handle;
-+ arg.type = flush_type;
-+ arg.flags = flags;
-+
-+
-+ ret = drmIoctlTimeout(fd, DRM_IOCTL_FENCE_WAIT, &arg);
-+ if (ret)
-+ return ret;
-+
-+ fence->fence_class = arg.fence_class;
-+ fence->type = arg.type;
-+ fence->signaled = arg.signaled;
-+ return arg.error;
-+}
-+
-+static void drmBOCopyReply(const struct drm_bo_info_rep *rep, drmBO *buf)
-+{
-+ buf->handle = rep->handle;
-+ buf->flags = rep->flags;
-+ buf->size = rep->size;
-+ buf->offset = rep->offset;
-+ buf->mapHandle = rep->arg_handle;
-+ buf->mask = rep->proposed_flags;
-+ buf->start = rep->buffer_start;
-+ buf->fenceFlags = rep->fence_flags;
-+ buf->replyFlags = rep->rep_flags;
-+ buf->pageAlignment = rep->page_alignment;
-+ buf->tileInfo = rep->tile_info;
-+ buf->hwTileStride = rep->hw_tile_stride;
-+ buf->desiredTileStride = rep->desired_tile_stride;
-+}
-+
-+
-+
-+int drmBOCreate(int fd, unsigned long size,
-+ unsigned pageAlignment, void *user_buffer,
-+ uint64_t mask,
-+ unsigned hint, drmBO *buf)
-+{
-+ struct drm_bo_create_arg arg;
-+ struct drm_bo_create_req *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+ int ret;
-+
-+ memset(buf, 0, sizeof(*buf));
-+ memset(&arg, 0, sizeof(arg));
-+ req->flags = mask;
-+ req->hint = hint;
-+ req->size = size;
-+ req->page_alignment = pageAlignment;
-+ req->buffer_start = (unsigned long) user_buffer;
-+
-+ buf->virtual = NULL;
-+
-+ ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_CREATE, &arg);
-+ if (ret)
-+ return ret;
-+
-+ drmBOCopyReply(rep, buf);
-+ buf->virtual = user_buffer;
-+ buf->mapCount = 0;
-+
-+ return 0;
-+}
-+
-+int drmBOReference(int fd, unsigned handle, drmBO *buf)
-+{
-+ struct drm_bo_reference_info_arg arg;
-+ struct drm_bo_handle_arg *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ req->handle = handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
-+ return -errno;
-+
-+ drmBOCopyReply(rep, buf);
-+ buf->mapVirtual = NULL;
-+ buf->mapCount = 0;
-+ buf->virtual = NULL;
-+
-+ return 0;
-+}
-+
-+int drmBOUnreference(int fd, drmBO *buf)
-+{
-+ struct drm_bo_handle_arg arg;
-+
-+ if (buf->mapVirtual && buf->mapHandle) {
-+ (void) munmap(buf->mapVirtual, buf->start + buf->size);
-+ buf->mapVirtual = NULL;
-+ buf->virtual = NULL;
-+ }
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = buf->handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
-+ return -errno;
-+
-+ buf->handle = 0;
-+ return 0;
-+}
-+
-+
-+/*
-+ * Flags can be DRM_BO_FLAG_READ, DRM_BO_FLAG_WRITE or'ed together
-+ * Hint currently be DRM_BO_HINT_DONT_BLOCK, which makes the
-+ * call return an -EBUSY if it can' immediately honor the mapping request.
-+ */
-+
-+int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
-+ void **address)
-+{
-+ struct drm_bo_map_wait_idle_arg arg;
-+ struct drm_bo_info_req *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+ int ret = 0;
-+
-+ /*
-+ * Make sure we have a virtual address of the buffer.
-+ */
-+
-+ if (!buf->virtual) {
-+ drmAddress virtual;
-+ virtual = mmap(0, buf->size + buf->start,
-+ PROT_READ | PROT_WRITE, MAP_SHARED,
-+ fd, buf->mapHandle);
-+ if (virtual == MAP_FAILED) {
-+ ret = -errno;
-+ }
-+ if (ret)
-+ return ret;
-+ buf->mapVirtual = virtual;
-+ buf->virtual = ((char *) virtual) + buf->start;
-+ }
-+
-+ memset(&arg, 0, sizeof(arg));
-+ req->handle = buf->handle;
-+ req->mask = mapFlags;
-+ req->hint = mapHint;
-+
-+ /*
-+ * May hang if the buffer object is busy.
-+ * This IOCTL synchronizes the buffer.
-+ */
-+
-+ ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_MAP, &arg);
-+ if (ret)
-+ return ret;
-+
-+ drmBOCopyReply(rep, buf);
-+ buf->mapFlags = mapFlags;
-+ ++buf->mapCount;
-+ *address = buf->virtual;
-+
-+ return 0;
-+}
-+
-+
-+int drmBOUnmap(int fd, drmBO *buf)
-+{
-+ struct drm_bo_handle_arg arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.handle = buf->handle;
-+
-+ if (ioctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
-+ return -errno;
-+ }
-+ buf->mapCount--;
-+ return 0;
-+}
-+
-+int drmBOSetStatus(int fd, drmBO *buf,
-+ uint64_t flags, uint64_t mask,
-+ unsigned int hint,
-+ unsigned int desired_tile_stride,
-+ unsigned int tile_info)
-+{
-+
-+ struct drm_bo_map_wait_idle_arg arg;
-+ struct drm_bo_info_req *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+ int ret = 0;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ req->mask = mask;
-+ req->flags = flags;
-+ req->handle = buf->handle;
-+ req->hint = hint;
-+ req->desired_tile_stride = desired_tile_stride;
-+ req->tile_info = tile_info;
-+
-+ ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_SETSTATUS, &arg);
-+ if (ret)
-+ return ret;
-+
-+ drmBOCopyReply(rep, buf);
-+ return 0;
-+}
-+
-+
-+int drmBOInfo(int fd, drmBO *buf)
-+{
-+ struct drm_bo_reference_info_arg arg;
-+ struct drm_bo_handle_arg *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+ int ret = 0;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ req->handle = buf->handle;
-+
-+ ret = ioctl(fd, DRM_IOCTL_BO_INFO, &arg);
-+ if (ret)
-+ return -errno;
-+
-+ drmBOCopyReply(rep, buf);
-+ return 0;
-+}
-+
-+int drmBOWaitIdle(int fd, drmBO *buf, unsigned hint)
-+{
-+ struct drm_bo_map_wait_idle_arg arg;
-+ struct drm_bo_info_req *req = &arg.d.req;
-+ struct drm_bo_info_rep *rep = &arg.d.rep;
-+ int ret = 0;
-+
-+ if ((buf->flags & DRM_BO_FLAG_SHAREABLE) ||
-+ (buf->replyFlags & DRM_BO_REP_BUSY)) {
-+ memset(&arg, 0, sizeof(arg));
-+ req->handle = buf->handle;
-+ req->hint = hint;
-+
-+ ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_WAIT_IDLE, &arg);
-+ if (ret)
-+ return ret;
-+
-+ drmBOCopyReply(rep, buf);
-+ }
-+ return 0;
-+}
-+
-+int drmBOBusy(int fd, drmBO *buf, int *busy)
-+{
-+ if (!(buf->flags & DRM_BO_FLAG_SHAREABLE) &&
-+ !(buf->replyFlags & DRM_BO_REP_BUSY)) {
-+ *busy = 0;
-+ return 0;
-+ }
-+ else {
-+ int ret = drmBOInfo(fd, buf);
-+ if (ret)
-+ return ret;
-+ *busy = (buf->replyFlags & DRM_BO_REP_BUSY);
-+ return 0;
-+ }
-+}
-+
-+int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
-+ unsigned memType)
-+{
-+ struct drm_mm_init_arg arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+
-+ arg.magic = DRM_BO_INIT_MAGIC;
-+ arg.major = DRM_BO_INIT_MAJOR;
-+ arg.minor = DRM_BO_INIT_MINOR;
-+ arg.p_offset = pOffset;
-+ arg.p_size = pSize;
-+ arg.mem_type = memType;
-+
-+ if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
-+ return -errno;
-+ return 0;
-+}
-+
-+int drmMMTakedown(int fd, unsigned memType)
-+{
-+ struct drm_mm_type_arg arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.mem_type = memType;
-+
-+ if (ioctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
-+ return -errno;
-+ return 0;
-+}
-+
-+/*
-+ * If this function returns an error, and lockBM was set to 1,
-+ * the buffer manager is NOT locked.
-+ */
-+
-+int drmMMLock(int fd, unsigned memType, int lockBM, int ignoreNoEvict)
-+{
-+ struct drm_mm_type_arg arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ arg.mem_type = memType;
-+ arg.lock_flags |= (lockBM) ? DRM_BO_LOCK_UNLOCK_BM : 0;
-+ arg.lock_flags |= (ignoreNoEvict) ? DRM_BO_LOCK_IGNORE_NO_EVICT : 0;
-+
-+ return drmIoctlTimeout(fd, DRM_IOCTL_MM_LOCK, &arg);
-+}
-+
-+int drmMMUnlock(int fd, unsigned memType, int unlockBM)
-+{
-+ struct drm_mm_type_arg arg;
-+
-+ memset(&arg, 0, sizeof(arg));
-+
-+ arg.mem_type = memType;
-+ arg.lock_flags |= (unlockBM) ? DRM_BO_LOCK_UNLOCK_BM : 0;
-+
-+ return drmIoctlTimeout(fd, DRM_IOCTL_MM_UNLOCK, &arg);
-+}
-+
-+int drmBOVersion(int fd, unsigned int *major,
-+ unsigned int *minor,
-+ unsigned int *patchlevel)
-+{
-+ struct drm_bo_version_arg arg;
-+ int ret;
-+
-+ memset(&arg, 0, sizeof(arg));
-+ ret = ioctl(fd, DRM_IOCTL_BO_VERSION, &arg);
-+ if (ret)
-+ return -errno;
-+
-+ if (major)
-+ *major = arg.major;
-+ if (minor)
-+ *minor = arg.minor;
-+ if (patchlevel)
-+ *patchlevel = arg.patchlevel;
-+
-+ return 0;
-+}
-+
-+
-+
- #define DRM_MAX_FDS 16
- static struct {
- char *BusID;
-Index: libdrm-2.4.4/libdrm/xf86drm.h
-===================================================================
---- libdrm-2.4.4.orig/libdrm/xf86drm.h 2008-12-17 18:28:24.000000000 +0000
-+++ libdrm-2.4.4/libdrm/xf86drm.h 2009-02-04 16:39:55.000000000 +0000
-@@ -665,4 +665,6 @@
- extern int drmSetMaster(int fd);
- extern int drmDropMaster(int fd);
-
-+#include "xf86mm.h"
-+
- #endif
-Index: libdrm-2.4.4/libdrm/xf86mm.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ libdrm-2.4.4/libdrm/xf86mm.h 2009-02-04 16:39:55.000000000 +0000
-@@ -0,0 +1,140 @@
-+/**************************************************************************
-+ *
-+ * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND. USA.
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sub license, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
-+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ *
-+ **************************************************************************/
-+
-+#ifndef _XF86MM_H_
-+#define _XF86MM_H_
-+#include <stddef.h>
-+#include <stdint.h>
-+#include "drm.h"
-+
-+/*
-+ * Note on multithreaded applications using this interface.
-+ * Libdrm is not threadsafe, so common buffer, TTM, and fence objects need to
-+ * be protected using an external mutex.
-+ *
-+ * Note: Don't protect the following functions, as it may lead to deadlocks:
-+ * drmBOUnmap().
-+ * The kernel is synchronizing and refcounting buffer maps.
-+ * User space only needs to refcount object usage within the same application.
-+ */
-+
-+
-+/*
-+ * List macros heavily inspired by the Linux kernel
-+ * list handling. No list looping yet.
-+ */
-+
-+typedef struct _drmFence
-+{
-+ unsigned handle;
-+ int fence_class;
-+ unsigned type;
-+ unsigned flags;
-+ unsigned signaled;
-+ uint32_t sequence;
-+ unsigned pad[4]; /* for future expansion */
-+} drmFence;
-+
-+typedef struct _drmBO
-+{
-+ unsigned handle;
-+ uint64_t mapHandle;
-+ uint64_t flags;
-+ uint64_t mask;
-+ unsigned mapFlags;
-+ unsigned long size;
-+ unsigned long offset;
-+ unsigned long start;
-+ unsigned replyFlags;
-+ unsigned fenceFlags;
-+ unsigned pageAlignment;
-+ unsigned tileInfo;
-+ unsigned hwTileStride;
-+ unsigned desiredTileStride;
-+ void *virtual;
-+ void *mapVirtual;
-+ int mapCount;
-+ unsigned pad[8]; /* for future expansion */
-+} drmBO;
-+
-+/*
-+ * Fence functions.
-+ */
-+
-+extern int drmFenceCreate(int fd, unsigned flags, int fence_class,
-+ unsigned type, drmFence *fence);
-+extern int drmFenceReference(int fd, unsigned handle, drmFence *fence);
-+extern int drmFenceUnreference(int fd, const drmFence *fence);
-+extern int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type);
-+extern int drmFenceSignaled(int fd, drmFence *fence,
-+ unsigned fenceType, int *signaled);
-+extern int drmFenceWait(int fd, unsigned flags, drmFence *fence,
-+ unsigned flush_type);
-+extern int drmFenceEmit(int fd, unsigned flags, drmFence *fence,
-+ unsigned emit_type);
-+extern int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fence);
-+
-+
-+/*
-+ * Buffer object functions.
-+ */
-+
-+extern int drmBOCreate(int fd, unsigned long size,
-+ unsigned pageAlignment, void *user_buffer,
-+ uint64_t mask, unsigned hint, drmBO *buf);
-+extern int drmBOReference(int fd, unsigned handle, drmBO *buf);
-+extern int drmBOUnreference(int fd, drmBO *buf);
-+extern int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
-+ void **address);
-+extern int drmBOUnmap(int fd, drmBO *buf);
-+extern int drmBOFence(int fd, drmBO *buf, unsigned flags, unsigned fenceHandle);
-+extern int drmBOInfo(int fd, drmBO *buf);
-+extern int drmBOBusy(int fd, drmBO *buf, int *busy);
-+
-+extern int drmBOWaitIdle(int fd, drmBO *buf, unsigned hint);
-+
-+/*
-+ * Initialization functions.
-+ */
-+
-+extern int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
-+ unsigned memType);
-+extern int drmMMTakedown(int fd, unsigned memType);
-+extern int drmMMLock(int fd, unsigned memType, int lockBM, int ignoreNoEvict);
-+extern int drmMMUnlock(int fd, unsigned memType, int unlockBM);
-+extern int drmBOSetStatus(int fd, drmBO *buf,
-+ uint64_t flags, uint64_t mask,
-+ unsigned int hint,
-+ unsigned int desired_tile_stride,
-+ unsigned int tile_info);
-+extern int drmBOVersion(int fd, unsigned int *major,
-+ unsigned int *minor,
-+ unsigned int *patchlevel);
-+
-+
-+#endif
-Index: libdrm-2.4.4/shared-core/drm.h
-===================================================================
---- libdrm-2.4.4.orig/shared-core/drm.h 2008-12-17 18:28:24.000000000 +0000
-+++ libdrm-2.4.4/shared-core/drm.h 2009-02-05 12:20:53.000000000 +0000
-@@ -632,6 +632,8 @@
- unsigned long handle; /**< Used for mapping / unmapping */
- };
-
-+
-+
- /**
- * DRM_IOCTL_SET_VERSION ioctl argument type.
- */
-@@ -1109,6 +1111,32 @@
- #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, uint32_t)
- #define DRM_IOCTL_MODE_REPLACEFB DRM_IOWR(0xB0, struct drm_mode_fb_cmd)
-
-+#define DRM_IOCTL_MM_INIT DRM_IOWR(0xc0, struct drm_mm_init_arg)
-+#define DRM_IOCTL_MM_TAKEDOWN DRM_IOWR(0xc1, struct drm_mm_type_arg)
-+#define DRM_IOCTL_MM_LOCK DRM_IOWR(0xc2, struct drm_mm_type_arg)
-+#define DRM_IOCTL_MM_UNLOCK DRM_IOWR(0xc3, struct drm_mm_type_arg)
-+
-+#define DRM_IOCTL_FENCE_CREATE DRM_IOWR(0xc4, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_REFERENCE DRM_IOWR(0xc6, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_UNREFERENCE DRM_IOWR(0xc7, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_SIGNALED DRM_IOWR(0xc8, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_FLUSH DRM_IOWR(0xc9, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_WAIT DRM_IOWR(0xca, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_EMIT DRM_IOWR(0xcb, struct drm_fence_arg)
-+#define DRM_IOCTL_FENCE_BUFFERS DRM_IOWR(0xcc, struct drm_fence_arg)
-+
-+#define DRM_IOCTL_BO_CREATE DRM_IOWR(0xcd, struct drm_bo_create_arg)
-+#define DRM_IOCTL_BO_MAP DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg)
-+#define DRM_IOCTL_BO_UNMAP DRM_IOWR(0xd0, struct drm_bo_handle_arg)
-+#define DRM_IOCTL_BO_REFERENCE DRM_IOWR(0xd1, struct drm_bo_reference_info_arg)
-+#define DRM_IOCTL_BO_UNREFERENCE DRM_IOWR(0xd2, struct drm_bo_handle_arg)
-+#define DRM_IOCTL_BO_SETSTATUS DRM_IOWR(0xd3, struct drm_bo_map_wait_idle_arg)
-+#define DRM_IOCTL_BO_INFO DRM_IOWR(0xd4, struct drm_bo_reference_info_arg)
-+#define DRM_IOCTL_BO_WAIT_IDLE DRM_IOWR(0xd5, struct drm_bo_map_wait_idle_arg)
-+#define DRM_IOCTL_BO_VERSION DRM_IOR(0xd6, struct drm_bo_version_arg)
-+
-+#define DRM_IOCTL_MODE_ADDMODE DRM_IOWR(0xA7, struct drm_mode_modeinfo)
-+#define DRM_IOCTL_MODE_RMMODE DRM_IOWR(0xA8, unsigned int)
- /*@}*/
-
- /**
-Index: libdrm-2.4.4/shared-core/Makefile.am
-===================================================================
---- libdrm-2.4.4.orig/shared-core/Makefile.am 2008-12-17 18:28:24.000000000 +0000
-+++ libdrm-2.4.4/shared-core/Makefile.am 2009-02-04 16:39:55.000000000 +0000
-@@ -31,6 +31,8 @@
- mach64_drm.h \
- mga_drm.h \
- nouveau_drm.h \
-+ psb_drm.h \
-+ psb_reg.h \
- r128_drm.h \
- radeon_drm.h \
- savage_drm.h \
-Index: libdrm-2.4.4/shared-core/psb_drm.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ libdrm-2.4.4/shared-core/psb_drm.h 2009-02-04 16:39:55.000000000 +0000
-@@ -0,0 +1,359 @@
-+/**************************************************************************
-+ * Copyright (c) 2007, Intel Corporation.
-+ * All Rights Reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms and conditions of the GNU General Public License,
-+ * version 2, as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
-+ * develop this driver.
-+ *
-+ **************************************************************************/
-+/*
-+ */
-+
-+#ifndef _PSB_DRM_H_
-+#define _PSB_DRM_H_
-+
-+#if defined(__linux__) && !defined(__KERNEL__)
-+#include<stdint.h>
-+#endif
-+
-+/*
-+ * Intel Poulsbo driver package version.
-+ *
-+ */
-+/* #define PSB_PACKAGE_VERSION "ED"__DATE__*/
-+#define PSB_PACKAGE_VERSION "2.0.0.32L.0007"
-+
-+#define DRM_PSB_SAREA_MAJOR 0
-+#define DRM_PSB_SAREA_MINOR 1
-+#define PSB_FIXED_SHIFT 16
-+
-+/*
-+ * Public memory types.
-+ */
-+
-+#define DRM_PSB_MEM_MMU DRM_BO_MEM_PRIV1
-+#define DRM_PSB_FLAG_MEM_MMU DRM_BO_FLAG_MEM_PRIV1
-+#define DRM_PSB_MEM_PDS DRM_BO_MEM_PRIV2
-+#define DRM_PSB_FLAG_MEM_PDS DRM_BO_FLAG_MEM_PRIV2
-+#define DRM_PSB_MEM_APER DRM_BO_MEM_PRIV3
-+#define DRM_PSB_FLAG_MEM_APER DRM_BO_FLAG_MEM_PRIV3
-+#define DRM_PSB_MEM_RASTGEOM DRM_BO_MEM_PRIV4
-+#define DRM_PSB_FLAG_MEM_RASTGEOM DRM_BO_FLAG_MEM_PRIV4
-+#define PSB_MEM_RASTGEOM_START 0x30000000
-+
-+typedef int32_t psb_fixed;
-+typedef uint32_t psb_ufixed;
-+
-+static inline psb_fixed psb_int_to_fixed(int a)
-+{
-+ return a * (1 << PSB_FIXED_SHIFT);
-+}
-+
-+static inline psb_ufixed psb_unsigned_to_ufixed(unsigned int a)
-+{
-+ return a << PSB_FIXED_SHIFT;
-+}
-+
-+/*Status of the command sent to the gfx device.*/
-+typedef enum {
-+ DRM_CMD_SUCCESS,
-+ DRM_CMD_FAILED,
-+ DRM_CMD_HANG
-+} drm_cmd_status_t;
-+
-+struct drm_psb_scanout {
-+ uint32_t buffer_id; /* DRM buffer object ID */
-+ uint32_t rotation; /* Rotation as in RR_rotation definitions */
-+ uint32_t stride; /* Buffer stride in bytes */
-+ uint32_t depth; /* Buffer depth in bits (NOT) bpp */
-+ uint32_t width; /* Buffer width in pixels */
-+ uint32_t height; /* Buffer height in lines */
-+ psb_fixed transform[3][3]; /* Buffer composite transform */
-+ /* (scaling, rot, reflect) */
-+};
-+
-+#define DRM_PSB_SAREA_OWNERS 16
-+#define DRM_PSB_SAREA_OWNER_2D 0
-+#define DRM_PSB_SAREA_OWNER_3D 1
-+
-+#define DRM_PSB_SAREA_SCANOUTS 3
-+
-+struct drm_psb_sarea {
-+ /* Track changes of this data structure */
-+
-+ uint32_t major;
-+ uint32_t minor;
-+
-+ /* Last context to touch part of hw */
-+ uint32_t ctx_owners[DRM_PSB_SAREA_OWNERS];
-+
-+ /* Definition of front- and rotated buffers */
-+ uint32_t num_scanouts;
-+ struct drm_psb_scanout scanouts[DRM_PSB_SAREA_SCANOUTS];
-+
-+ int planeA_x;
-+ int planeA_y;
-+ int planeA_w;
-+ int planeA_h;
-+ int planeB_x;
-+ int planeB_y;
-+ int planeB_w;
-+ int planeB_h;
-+ uint32_t msvdx_state;
-+ uint32_t msvdx_context;
-+};
-+
-+#define PSB_RELOC_MAGIC 0x67676767
-+#define PSB_RELOC_SHIFT_MASK 0x0000FFFF
-+#define PSB_RELOC_SHIFT_SHIFT 0
-+#define PSB_RELOC_ALSHIFT_MASK 0xFFFF0000
-+#define PSB_RELOC_ALSHIFT_SHIFT 16
-+
-+#define PSB_RELOC_OP_OFFSET 0 /* Offset of the indicated
-+ * buffer
-+ */
-+#define PSB_RELOC_OP_2D_OFFSET 1 /* Offset of the indicated
-+ * buffer, relative to 2D
-+ * base address
-+ */
-+#define PSB_RELOC_OP_PDS_OFFSET 2 /* Offset of the indicated buffer,
-+ * relative to PDS base address
-+ */
-+#define PSB_RELOC_OP_STRIDE 3 /* Stride of the indicated
-+ * buffer (for tiling)
-+ */
-+#define PSB_RELOC_OP_USE_OFFSET 4 /* Offset of USE buffer
-+ * relative to base reg
-+ */
-+#define PSB_RELOC_OP_USE_REG 5 /* Base reg of USE buffer */
-+
-+struct drm_psb_reloc {
-+ uint32_t reloc_op;
-+ uint32_t where; /* offset in destination buffer */
-+ uint32_t buffer; /* Buffer reloc applies to */
-+ uint32_t mask; /* Destination format: */
-+ uint32_t shift; /* Destination format: */
-+ uint32_t pre_add; /* Destination format: */
-+ uint32_t background; /* Destination add */
-+ uint32_t dst_buffer; /* Destination buffer. Index into buffer_list */
-+ uint32_t arg0; /* Reloc-op dependant */
-+ uint32_t arg1;
-+};
-+
-+#define PSB_BO_FLAG_TA (1ULL << 48)
-+#define PSB_BO_FLAG_SCENE (1ULL << 49)
-+#define PSB_BO_FLAG_FEEDBACK (1ULL << 50)
-+#define PSB_BO_FLAG_USSE (1ULL << 51)
-+
-+#define PSB_ENGINE_2D 0
-+#define PSB_ENGINE_VIDEO 1
-+#define PSB_ENGINE_RASTERIZER 2
-+#define PSB_ENGINE_TA 3
-+#define PSB_ENGINE_HPRAST 4
-+
-+/*
-+ * For this fence class we have a couple of
-+ * fence types.
-+ */
-+
-+#define _PSB_FENCE_EXE_SHIFT 0
-+#define _PSB_FENCE_TA_DONE_SHIFT 1
-+#define _PSB_FENCE_RASTER_DONE_SHIFT 2
-+#define _PSB_FENCE_SCENE_DONE_SHIFT 3
-+#define _PSB_FENCE_FEEDBACK_SHIFT 4
-+
-+#define _PSB_ENGINE_TA_FENCE_TYPES 5
-+#define _PSB_FENCE_TYPE_TA_DONE (1 << _PSB_FENCE_TA_DONE_SHIFT)
-+#define _PSB_FENCE_TYPE_RASTER_DONE (1 << _PSB_FENCE_RASTER_DONE_SHIFT)
-+#define _PSB_FENCE_TYPE_SCENE_DONE (1 << _PSB_FENCE_SCENE_DONE_SHIFT)
-+#define _PSB_FENCE_TYPE_FEEDBACK (1 << _PSB_FENCE_FEEDBACK_SHIFT)
-+
-+#define PSB_ENGINE_HPRAST 4
-+#define PSB_NUM_ENGINES 5
-+
-+#define PSB_TA_FLAG_FIRSTPASS (1 << 0)
-+#define PSB_TA_FLAG_LASTPASS (1 << 1)
-+
-+#define PSB_FEEDBACK_OP_VISTEST (1 << 0)
-+
-+struct drm_psb_scene {
-+ int handle_valid;
-+ uint32_t handle;
-+ uint32_t w;
-+ uint32_t h;
-+ uint32_t num_buffers;
-+};
-+
-+typedef struct drm_psb_cmdbuf_arg {
-+ uint64_t buffer_list; /* List of buffers to validate */
-+ uint64_t clip_rects; /* See i915 counterpart */
-+ uint64_t scene_arg;
-+ uint64_t fence_arg;
-+
-+ uint32_t ta_flags;
-+
-+ uint32_t ta_handle; /* TA reg-value pairs */
-+ uint32_t ta_offset;
-+ uint32_t ta_size;
-+
-+ uint32_t oom_handle;
-+ uint32_t oom_offset;
-+ uint32_t oom_size;
-+
-+ uint32_t cmdbuf_handle; /* 2D Command buffer object or, */
-+ uint32_t cmdbuf_offset; /* rasterizer reg-value pairs */
-+ uint32_t cmdbuf_size;
-+
-+ uint32_t reloc_handle; /* Reloc buffer object */
-+ uint32_t reloc_offset;
-+ uint32_t num_relocs;
-+
-+ int32_t damage; /* Damage front buffer with cliprects */
-+ /* Not implemented yet */
-+ uint32_t fence_flags;
-+ uint32_t engine;
-+
-+ /*
-+ * Feedback;
-+ */
-+
-+ uint32_t feedback_ops;
-+ uint32_t feedback_handle;
-+ uint32_t feedback_offset;
-+ uint32_t feedback_breakpoints;
-+ uint32_t feedback_size;
-+} drm_psb_cmdbuf_arg_t;
-+
-+struct drm_psb_xhw_init_arg {
-+ uint32_t operation;
-+ uint32_t buffer_handle;
-+};
-+
-+/*
-+ * Feedback components:
-+ */
-+
-+/*
-+ * Vistest component. The number of these in the feedback buffer
-+ * equals the number of vistest breakpoints + 1.
-+ * This is currently the only feedback component.
-+ */
-+
-+struct drm_psb_vistest {
-+ uint32_t vt[8];
-+};
-+
-+#define PSB_HW_COOKIE_SIZE 16
-+#define PSB_HW_FEEDBACK_SIZE 8
-+#define PSB_HW_OOM_CMD_SIZE 6
-+
-+struct drm_psb_xhw_arg {
-+ uint32_t op;
-+ int ret;
-+ uint32_t irq_op;
-+ uint32_t issue_irq;
-+ uint32_t cookie[PSB_HW_COOKIE_SIZE];
-+ union {
-+ struct {
-+ uint32_t w;
-+ uint32_t h;
-+ uint32_t size;
-+ uint32_t clear_p_start;
-+ uint32_t clear_num_pages;
-+ } si;
-+ struct {
-+ uint32_t fire_flags;
-+ uint32_t hw_context;
-+ uint32_t offset;
-+ uint32_t engine;
-+ uint32_t flags;
-+ uint32_t rca;
-+ uint32_t num_oom_cmds;
-+ uint32_t oom_cmds[PSB_HW_OOM_CMD_SIZE];
-+ } sb;
-+ struct {
-+ uint32_t pages;
-+ uint32_t size;
-+ } bi;
-+ struct {
-+ uint32_t bca;
-+ uint32_t rca;
-+ uint32_t flags;
-+ } oom;
-+ struct {
-+ uint32_t pt_offset;
-+ uint32_t param_offset;
-+ uint32_t flags;
-+ } bl;
-+ uint32_t feedback[PSB_HW_FEEDBACK_SIZE];
-+ } arg;
-+};
-+
-+#define DRM_PSB_CMDBUF 0x00
-+#define DRM_PSB_XHW_INIT 0x01
-+#define DRM_PSB_XHW 0x02
-+#define DRM_PSB_SCENE_UNREF 0x03
-+/* Controlling the kernel modesetting buffers */
-+#define DRM_PSB_KMS_OFF 0x04
-+#define DRM_PSB_KMS_ON 0x05
-+
-+#define PSB_XHW_INIT 0x00
-+#define PSB_XHW_TAKEDOWN 0x01
-+
-+#define PSB_XHW_FIRE_RASTER 0x00
-+#define PSB_XHW_SCENE_INFO 0x01
-+#define PSB_XHW_SCENE_BIND_FIRE 0x02
-+#define PSB_XHW_TA_MEM_INFO 0x03
-+#define PSB_XHW_RESET_DPM 0x04
-+#define PSB_XHW_OOM