diff options
| author | Richard Purdie <rpurdie@linux.intel.com> | 2009-04-14 15:30:24 +0100 |
|---|---|---|
| committer | Richard Purdie <rpurdie@linux.intel.com> | 2009-04-14 15:30:24 +0100 |
| commit | d620ad6a40daf00196d32f0931800fd23357364f (patch) | |
| tree | 44b2f5d43bfdf35ba3a15ba86aa67f0a8568992e /meta | |
| parent | 1b4c8ad27e271a085672fd143bc2dac4f39f2754 (diff) | |
| download | openembedded-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.patch | 2516 | ||||
| -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 |
