--- libdrm-2.4.56.orig/autogen.sh
+++ libdrm-2.4.56/autogen.sh
@@ -0,0 +1,6 @@
+#! /bin/sh
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+autoreconf --force --install --verbose "$srcdir"
+test -n "$NOCONFIGURE" || "$srcdir/configure" --enable-maintainer-mode "$@"
--- libdrm-2.4.56.orig/RELEASING
+++ libdrm-2.4.56/RELEASING
@@ -0,0 +1,66 @@
+The release criteria for libdrm is essentially "if you need a release,
+make one".  There is no designated release engineer or maintainer.
+Anybody is free to make a release if there's a certain feature or bug
+fix they need in a released version of libdrm.
+
+When new ioctl definitions are merged into drm-next, we will add
+support to libdrm, at which point we typically create a new release.
+However, this is up to whoever is driving the feature in question.
+
+Follow these steps to release a new version of libdrm:
+
+  1) Ensure that there are no local, uncommitted/unpushed
+     modifications. You're probably in a good state if both "git diff
+     HEAD" and "git log master..origin/master" give no output.
+
+  3) Bump the version number in configure.ac. We seem to have settled
+     for 2.4.x as the versioning scheme for libdrm, so just bump the
+     micro version.
+
+  4) Run autoconf and then re-run ./configure so the build system
+     picks up the new version number.
+
+  5) Verify that the code passes "make distcheck".  libdrm is tricky
+     to distcheck since the test suite will need to become drm master.
+     This means that you need to run it outside X, that is, in text
+     mode (KMS or no KMS doesn't matter).
+
+     Running "make distcheck" should result in no warnings or errors
+     and end with a message of the form:
+
+	=============================================
+	libdrm-X.Y.Z archives ready for distribution:
+	libdrm-X.Y.Z.tar.gz
+	libdrm-X.Y.Z.tar.bz2
+	=============================================
+
+     Make sure that the version number reported by distcheck and in
+     the tarball names matches the number you bumped to in configure.ac.
+
+  6) Commit the configure.ac change and make an annotated tag for that
+     commit with the version number of the release as the name and a
+     message of "libdrm X.Y.Z".  For example, for the 2.4.16 release
+     the command is:
+
+	git tag -a 2.4.16 -m "libdrm 2.4.16"
+
+  7) Push the commit and tag by saying
+
+	git push --tags origin master
+
+     assuming the remote for the upstream libdrm repo is called origin.
+
+  6) Use the release.sh script from the xorg/util/modular repo to
+     upload the tarballs to the freedesktop.org download area and
+     create an annouce email template.  The script takes three
+     arguments: a "section", the previous tag and the new tag we just
+     created.  For 2.4.16 again, the command is:
+
+	../modular/release.sh libdrm 2.4.15 2.4.16
+
+     This copies the two tarballs to freedesktop.org and creates
+     libdrm-2.4.16.announce which has a detailed summary of the
+     changes, links to the tarballs, MD5 and SHA1 sums and pre-filled
+     out email headers.  Fill out the blank between the email headers
+     and the list of changes with a brief message of what changed or
+     what prompted this release.  Send out the email and you're done!
--- libdrm-2.4.56.orig/tests/auth.c
+++ libdrm-2.4.56/tests/auth.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * 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, sublicense,
+ * 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 above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <limits.h>
+#include "drmtest.h"
+
+enum auth_event {
+	SERVER_READY,
+	CLIENT_MAGIC,
+	CLIENT_DONE,
+};
+
+int commfd[2];
+
+static void wait_event(int pipe, enum auth_event expected_event)
+{
+	int ret;
+	enum auth_event event;
+	unsigned char in;
+
+	ret = read(commfd[pipe], &in, 1);
+	if (ret == -1)
+		err(1, "read error");
+	event = in;
+
+	if (event != expected_event)
+		errx(1, "unexpected event: %d\n", event);
+}
+
+static void
+send_event(int pipe, enum auth_event send_event)
+{
+	int ret;
+	unsigned char event;
+
+	event = send_event;
+	ret = write(commfd[pipe], &event, 1);
+	if (ret == -1)
+		err(1, "failed to send event %d", event);
+}
+
+static void client()
+{
+	struct drm_auth auth;
+	int drmfd, ret;
+
+	/* XXX: Should make sure we open the same DRM as the master */
+	wait_event(0, SERVER_READY);
+
+	drmfd = drm_open_any();
+
+	/* Get a client magic number and pass it to the master for auth. */
+	auth.magic = 0; /* Quiet valgrind */
+	ret = ioctl(drmfd, DRM_IOCTL_GET_MAGIC, &auth);
+	if (ret == -1)
+		err(1, "Couldn't get client magic");
+	send_event(0, CLIENT_MAGIC);
+	ret = write(commfd[0], &auth.magic, sizeof(auth.magic));
+	if (ret == -1)
+		err(1, "Couldn't write auth data");
+
+	/* Signal that the client is completely done. */
+	send_event(0, CLIENT_DONE);
+}
+
+static void server()
+{
+	int drmfd, ret;
+	struct drm_auth auth;
+
+	drmfd = drm_open_any_master();
+
+	auth.magic = 0xd0d0d0d0;
+	ret = ioctl(drmfd, DRM_IOCTL_AUTH_MAGIC, &auth);
+	if (ret != -1 || errno != EINVAL)
+		errx(1, "Authenticating bad magic succeeded\n");
+
+	send_event(1, SERVER_READY);
+
+	wait_event(1, CLIENT_MAGIC);
+	ret = read(commfd[1], &auth.magic, sizeof(auth.magic));
+	if (ret == -1)
+		err(1, "Failure to read client magic");
+
+	ret = ioctl(drmfd, DRM_IOCTL_AUTH_MAGIC, &auth);
+	if (ret == -1)
+		err(1, "Failure to authenticate client magic\n");
+
+	wait_event(1, CLIENT_DONE);
+}
+
+/**
+ * Checks DRM authentication mechanisms.
+ */
+int main(int argc, char **argv)
+{
+	int ret;
+
+	ret = pipe(commfd);
+	if (ret == -1)
+		err(1, "Couldn't create pipe");
+
+	ret = fork();
+	if (ret == -1)
+		err(1, "failure to fork client");
+	if (ret == 0)
+		client();
+	else
+		server();
+
+	return 0;
+}
+
--- libdrm-2.4.56.orig/tests/lock.c
+++ libdrm-2.4.56/tests/lock.c
@@ -0,0 +1,263 @@
+/*
+ * Copyright © 2007 Intel Corporation
+ *
+ * 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, sublicense,
+ * 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 above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ * Authors:
+ *    Eric Anholt <eric@anholt.net>
+ *
+ */
+
+/** @file lock.c
+ * Tests various potential failures of the DRM locking mechanisms
+ */
+
+#include <limits.h>
+#include "drmtest.h"
+
+enum auth_event {
+	SERVER_READY,
+	CLIENT_MAGIC,
+	SERVER_LOCKED,
+	CLIENT_LOCKED,
+};
+
+int commfd[2];
+unsigned int lock1 = 0x00001111;
+unsigned int lock2 = 0x00002222;
+
+/* return time in milliseconds */
+static unsigned int
+get_millis()
+{
+	struct timeval tv;
+
+	gettimeofday(&tv, NULL);
+	return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+}
+
+static void
+wait_event(int pipe, enum auth_event expected_event)
+{
+	int ret;
+	enum auth_event event;
+	unsigned char in;
+
+	ret = read(commfd[pipe], &in, 1);
+	if (ret == -1)
+		err(1, "read error");
+	event = in;
+
+	if (event != expected_event)
+		errx(1, "unexpected event: %d\n", event);
+}
+
+static void
+send_event(int pipe, enum auth_event send_event)
+{
+	int ret;
+	unsigned char event;
+
+	event = send_event;
+	ret = write(commfd[pipe], &event, 1);
+	if (ret == -1)
+		err(1, "failed to send event %d", event);
+}
+
+static void
+client_auth(int drmfd)
+{
+	struct drm_auth auth;
+	int ret;
+
+	/* Get a client magic number and pass it to the master for auth. */
+	ret = ioctl(drmfd, DRM_IOCTL_GET_MAGIC, &auth);
+	if (ret == -1)
+		err(1, "Couldn't get client magic");
+	send_event(0, CLIENT_MAGIC);
+	ret = write(commfd[0], &auth.magic, sizeof(auth.magic));
+	if (ret == -1)
+		err(1, "Couldn't write auth data");
+}
+
+static void
+server_auth(int drmfd)
+{
+	struct drm_auth auth;
+	int ret;
+
+	send_event(1, SERVER_READY);
+	wait_event(1, CLIENT_MAGIC);
+	ret = read(commfd[1], &auth.magic, sizeof(auth.magic));
+	if (ret == -1)
+		err(1, "Failure to read client magic");
+
+	ret = ioctl(drmfd, DRM_IOCTL_AUTH_MAGIC, &auth);
+	if (ret == -1)
+		err(1, "Failure to authenticate client magic\n");
+}
+
+/** Tests that locking is successful in normal conditions */
+static void
+test_lock_unlock(int drmfd)
+{
+	int ret;
+
+	ret = drmGetLock(drmfd, lock1, 0);
+	if (ret != 0)
+		err(1, "Locking failed");
+	ret = drmUnlock(drmfd, lock1);
+	if (ret != 0)
+		err(1, "Unlocking failed");
+}
+
+/** Tests that unlocking the lock while it's not held works correctly */
+static void
+test_unlock_unlocked(int drmfd)
+{
+	int ret;
+
+	ret = drmUnlock(drmfd, lock1);
+	if (ret == 0)
+		err(1, "Unlocking unlocked lock succeeded");
+}
+
+/** Tests that unlocking a lock held by another context fails appropriately */
+static void
+test_unlock_unowned(int drmfd)
+{
+	int ret;
+
+	ret = drmGetLock(drmfd, lock1, 0);
+	assert(ret == 0);
+	ret = drmUnlock(drmfd, lock2);
+	if (ret == 0)
+		errx(1, "Unlocking other context's lock succeeded");
+	ret = drmUnlock(drmfd, lock1);
+	assert(ret == 0);
+}
+
+/**
+ * Tests that an open/close by the same process doesn't result in the lock
+ * being dropped.
+ */
+static void test_open_close_locked(drmfd)
+{
+	int ret, tempfd;
+
+	ret = drmGetLock(drmfd, lock1, 0);
+	assert(ret == 0);
+	/* XXX: Need to make sure that this is the same device as drmfd */
+	tempfd = drm_open_any();
+	close(tempfd);
+	ret = drmUnlock(drmfd, lock1);
+	if (ret != 0)
+		errx(1, "lock lost during open/close by same pid");
+}
+
+static void client()
+{
+	int drmfd, ret;
+	unsigned int time;
+
+	wait_event(0, SERVER_READY);
+
+	/* XXX: Should make sure we open the same DRM as the master */
+	drmfd = drm_open_any();
+
+	client_auth(drmfd);
+
+	/* Wait for the server to grab the lock, then grab it ourselves (to
+	 * contest it).  Hopefully we hit it within the window of when the
+	 * server locks.
+	 */
+	wait_event(0, SERVER_LOCKED);
+	ret = drmGetLock(drmfd, lock2, 0);
+	time = get_millis();
+	if (ret != 0)
+		err(1, "Failed to get lock on client\n");
+	drmUnlock(drmfd, lock2);
+
+	/* Tell the server that our locking completed, and when it did */
+	send_event(0, CLIENT_LOCKED);
+	ret = write(commfd[0], &time, sizeof(time));
+
+	close(drmfd);
+	exit(0);
+}
+
+static void server()
+{
+	int drmfd, tempfd, ret;
+	unsigned int client_time, unlock_time;
+
+	drmfd = drm_open_any_master();
+
+	test_lock_unlock(drmfd);
+	test_unlock_unlocked(drmfd);
+	test_unlock_unowned(drmfd);
+	test_open_close_locked(drmfd);
+
+	/* Perform the authentication sequence with the client. */
+	server_auth(drmfd);
+
+	/* Now, test that the client attempting to lock while the server
+	 * holds the lock works correctly.
+	 */
+	ret = drmGetLock(drmfd, lock1, 0);
+	assert(ret == 0);
+	send_event(1, SERVER_LOCKED);
+	/* Wait a while for the client to do its thing */
+	sleep(1);
+	ret = drmUnlock(drmfd, lock1);
+	assert(ret == 0);
+	unlock_time = get_millis();
+
+	wait_event(1, CLIENT_LOCKED);
+	ret = read(commfd[1], &client_time, sizeof(client_time));
+	if (ret == -1)
+		err(1, "Failure to read client magic");
+
+	if (client_time < unlock_time)
+		errx(1, "Client took lock before server released it");
+
+	close(drmfd);
+}
+
+int main(int argc, char **argv)
+{
+	int ret;
+
+
+	ret = pipe(commfd);
+	if (ret == -1)
+		err(1, "Couldn't create pipe");
+
+	ret = fork();
+	if (ret == -1)
+		err(1, "failure to fork client");
+	if (ret == 0)
+		client();
+	else
+		server();
+
+	return 0;
+}
+
--- libdrm-2.4.56.orig/debian/libdrm2.install
+++ libdrm-2.4.56/debian/libdrm2.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm.so.2*
--- libdrm-2.4.56.orig/debian/libdrm-radeon1.install
+++ libdrm-2.4.56/debian/libdrm-radeon1.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_radeon.so.1*
--- libdrm-2.4.56.orig/debian/libdrm-intel1.install
+++ libdrm-2.4.56/debian/libdrm-intel1.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_intel.so.1*
--- libdrm-2.4.56.orig/debian/libdrm-exynos1.install
+++ libdrm-2.4.56/debian/libdrm-exynos1.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_exynos.so.1*
--- libdrm-2.4.56.orig/debian/libdrm-exynos1.symbols
+++ libdrm-2.4.56/debian/libdrm-exynos1.symbols
@@ -0,0 +1,20 @@
+libdrm_exynos.so.1 libdrm-exynos1 #MINVER#
+ exynos_bo_create@Base 0
+ exynos_bo_destroy@Base 0
+ exynos_bo_from_name@Base 0
+ exynos_bo_get_info@Base 0
+ exynos_bo_get_name@Base 0
+ exynos_bo_handle@Base 0
+ exynos_bo_map@Base 0
+ exynos_device_create@Base 0
+ exynos_device_destroy@Base 0
+ exynos_prime_fd_to_handle@Base 0
+ exynos_prime_handle_to_fd@Base 0
+ exynos_vidi_connection@Base 0
+ g2d_blend@Base 0
+ g2d_copy@Base 0
+ g2d_copy_with_scale@Base 0
+ g2d_exec@Base 0
+ g2d_fini@Base 0
+ g2d_init@Base 0
+ g2d_solid_fill@Base 0
--- libdrm-2.4.56.orig/debian/control
+++ libdrm-2.4.56/debian/control
@@ -0,0 +1,279 @@
+Source: libdrm
+Priority: optional
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+XSBC-Orig-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Build-Depends:
+ debhelper (>= 9),
+ dh-autoreconf,
+ quilt,
+ xsltproc,
+ docbook-xsl,
+ libx11-dev,
+ pkg-config,
+ libpthread-stubs0-dev,
+ libudev-dev [linux-any],
+ libpciaccess-dev,
+ valgrind [amd64 armhf i386 mips mipsel powerpc s390x],
+ libbsd-dev [kfreebsd-any],
+Standards-Version: 3.9.4
+Section: libs
+Vcs-Git: git://git.debian.org/git/pkg-xorg/lib/libdrm
+Vcs-Browser: http://git.debian.org/?p=pkg-xorg/lib/libdrm.git
+
+Package: libdrm-dev
+Section: libdevel
+Architecture: any
+Depends:
+ libdrm2 (= ${binary:Version}),
+ libdrm-intel1 (= ${binary:Version}) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32],
+ libdrm-radeon1 (= ${binary:Version}),
+ libdrm-nouveau2 (= ${binary:Version}) [linux-any],
+ libdrm-omap1 (= ${binary:Version}) [any-arm],
+ libdrm-freedreno1 (= ${binary:Version}) [any-arm],
+ libdrm-exynos1 (= ${binary:Version}) [any-arm],
+ ${misc:Depends},
+Multi-Arch: same
+Replaces:
+ linux-libc-dev (<< 2.6.32-10)
+Description: Userspace interface to kernel DRM services -- development files
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the development environment for libdrm.
+
+Package: libdrm2
+Section: libs
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Description: Userspace interface to kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the runtime environment for libdrm.
+
+Package: libdrm2-udeb
+Package-Type: udeb
+Section: debian-installer
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Description: Userspace interface to kernel DRM services -- runtime
+ This is a udeb, or a microdeb, for the debian-installer.
+
+Package: libdrm2-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Depends:
+ libdrm2 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides debugging symbols for the libdrm2 package.
+
+Package: libdrm-intel1
+Section: libs
+Architecture: amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to intel-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-intel1-dbg
+Section: debug
+Priority: extra
+Architecture: amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32
+Depends:
+ libdrm-intel1 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to intel-specific kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-intel1 package.
+
+Package: libdrm-nouveau2
+Section: libs
+Architecture: linux-any
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to nouveau-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-nouveau2-dbg
+Section: debug
+Priority: extra
+Architecture: linux-any
+Depends: libdrm-nouveau2 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to nouveau-specific kernel DRM -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-nouveau2 package.
+
+Package: libdrm-radeon1
+Section: libs
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to radeon-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-radeon1-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Depends:
+ libdrm-radeon1 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to radeon-specific kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-radeon1 package.
+
+Package: libdrm-omap1
+Section: libs
+Architecture: any-arm
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to omap-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-omap1-dbg
+Section: debug
+Priority: extra
+Architecture: any-arm
+Depends:
+ libdrm-omap1 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to omap-specific kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-omap1 package.
+
+Package: libdrm-freedreno1
+Section: libs
+Architecture: any-arm
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to msm/kgsl kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-freedreno1-dbg
+Section: debug
+Priority: extra
+Architecture: any-arm
+Depends:
+ libdrm-freedreno1 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to msm/kgsl kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-freedreno1 package.
+
+Package: libdrm-exynos1
+Section: libs
+Architecture: any-arm
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: Userspace interface to exynos-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+
+Package: libdrm-exynos1-dbg
+Section: debug
+Priority: extra
+Architecture: any-arm
+Depends:
+ libdrm-exynos1 (= ${binary:Version}),
+ ${misc:Depends},
+Multi-Arch: same
+Description: Userspace interface to exynos-specific kernel DRM services -- debugging symbols
+ This library implements the userspace interface to the kernel DRM
+ services.  DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the debugging symbols for the libdrm-exynos1 package.
--- libdrm-2.4.56.orig/debian/README.source
+++ libdrm-2.4.56/debian/README.source
@@ -0,0 +1,55 @@
+------------------------------------------------------
+Quick Guide To Patching This Package For The Impatient
+------------------------------------------------------
+
+1. Make sure you have quilt installed
+2. Unpack the package as usual with "dpkg-source -x"
+3. Run the "patch" target in debian/rules
+4. Create a new patch with "quilt new" (see quilt(1))
+5. Edit all the files you want to include in the patch with "quilt edit" 
+   (see quilt(1)).
+6. Write the patch with "quilt refresh" (see quilt(1))
+7. Run the "clean" target in debian/rules
+
+Alternatively, instead of using quilt directly, you can drop the patch in to 
+debian/patches and add the name of the patch to debian/patches/series.
+
+While building from git, dpkg-source can complain about symlinks vs.
+normal files mismatches. To work around this issue, before uploading,
+and without committing:
+
+  find -type l | while read dest; do src=$(readlink -f $dest); rm $dest; cp $src $dest; done
+
+------------------------------------
+Guide To The X Strike Force Packages
+------------------------------------
+
+The X Strike Force team maintains X packages in git repositories on
+git.debian.org in the pkg-xorg subdirectory. Most upstream packages
+are actually maintained in git repositories as well, so they often
+just need to be pulled into git.debian.org in a "upstream-*" branch.
+Otherwise, the upstream sources are manually installed in the Debian
+git repository.
+
+The .orig.tar.gz upstream source file could be generated using this
+"upstream-*" branch in the Debian git repository but it is actually
+copied from upstream tarballs directly.
+
+Due to X.org being highly modular, packaging all X.org applications
+as their own independent packages would have created too many Debian
+packages. For this reason, some X.org applications have been grouped
+into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils,
+x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils.
+Most packages, including the X.org server itself and all libraries
+and drivers are, however maintained independently.
+
+The Debian packaging is added by creating the "debian-*" git branch
+which contains the aforementioned "upstream-*" branch plus the debian/
+repository files.
+When a patch has to be applied to the Debian package, two solutions
+are involved:
+* If the patch is available in one of the upstream branches, it
+  may be git'cherry-picked into the Debian repository. In this
+  case, it appears directly in the .diff.gz.
+* Otherwise, the patch is added to debian/patches/ which is managed
+  with quilt as documented in /usr/share/doc/quilt/README.source.
--- libdrm-2.4.56.orig/debian/libdrm-dev.install
+++ libdrm-2.4.56/debian/libdrm-dev.install
@@ -0,0 +1,6 @@
+usr/include/*
+usr/lib/*/lib*.a
+usr/lib/*/lib*.so
+usr/lib/*/pkgconfig/*
+usr/share/man/man3/*
+usr/share/man/man7/*
--- libdrm-2.4.56.orig/debian/libdrm-freedreno1.install
+++ libdrm-2.4.56/debian/libdrm-freedreno1.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_freedreno.so.1*
--- libdrm-2.4.56.orig/debian/rules
+++ libdrm-2.4.56/debian/rules
@@ -0,0 +1,106 @@
+#!/usr/bin/make -f
+
+###
+### Configuration, decide what to build
+###
+
+# Some variables:
+DEB_HOST_ARCH_OS  ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
+DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
+
+confflags = \
+	--enable-radeon \
+	--disable-libkms \
+	$()
+
+# Linux vs. the rest:
+ifeq (linux, $(DEB_HOST_ARCH_OS))
+	confflags += --enable-udev
+	confflags += --enable-vmwgfx
+	confflags += --enable-nouveau
+	NOUVEAU = yes
+else
+	confflags += --disable-udev
+	confflags += --disable-vmwgfx
+	confflags += --disable-nouveau
+	NOUVEAU = no
+	# kfreebsd mangles freebsd's sys/types.h
+	confflags += CFLAGS="$(shell pkg-config --cflags libbsd-overlay)"
+endif
+
+# Intel is only on x86:
+ifneq (,$(filter amd64 i386,$(DEB_HOST_ARCH_CPU)))
+ifneq (,$(filter linux kfreebsd,$(DEB_HOST_ARCH_OS)))
+	INTEL = yes
+endif
+endif
+ifeq ($(INTEL), yes)
+	confflags += --enable-intel
+else
+	confflags += --disable-intel
+endif
+
+# Omap and freedreno are only on arm
+ifneq (,$(filter arm,$(DEB_HOST_ARCH_CPU)))
+	ARM = yes
+endif
+ifeq ($(ARM), yes)
+	confflags += --enable-omap-experimental-api
+	confflags += --enable-freedreno-experimental-api
+	confflags += --enable-exynos-experimental-api
+else
+	confflags += --disable-omap-experimental-api
+	confflags += --disable-freedreno-experimental-api
+	confflags += --disable-exynos-experimental-api
+endif
+
+###
+### Actual build
+###
+
+override_dh_auto_configure:
+	dh_auto_configure -- --disable-silent-rules --enable-static=yes $(confflags)
+
+override_dh_auto_test:
+	dh_auto_test || echo "Test suite failure, but keeping on anyway"
+
+override_dh_auto_install:
+	dh_auto_install --destdir=debian/tmp
+
+override_dh_install:
+	find debian/tmp -name '*.la' -delete
+	dh_install --fail-missing
+
+override_dh_strip:
+	dh_strip -plibdrm2 --dbg-package=libdrm2-dbg
+ifeq ($(INTEL), yes)
+	dh_strip -plibdrm-intel1 --dbg-package=libdrm-intel1-dbg
+endif
+ifeq ($(NOUVEAU), yes)
+	dh_strip -plibdrm-nouveau2 --dbg-package=libdrm-nouveau2-dbg
+endif
+	dh_strip -plibdrm-radeon1 --dbg-package=libdrm-radeon1-dbg
+ifeq ($(ARM), yes)
+	dh_strip -plibdrm-omap1 --dbg-package=libdrm-omap1-dbg
+	dh_strip -plibdrm-freedreno1 --dbg-package=libdrm-freedreno1-dbg
+	dh_strip -plibdrm-exynos1 --dbg-package=libdrm-exynos1-dbg
+endif
+	dh_strip -s --remaining-packages
+
+override_dh_makeshlibs:
+	dh_makeshlibs -plibdrm2 -V'libdrm2 (>= 2.4.46)' --add-udeb=libdrm2-udeb -- -c4
+ifeq ($(INTEL), yes)
+	dh_makeshlibs -plibdrm-intel1 -V'libdrm-intel1 (>= 2.4.46)' -- -c4
+endif
+ifeq ($(NOUVEAU), yes)
+	dh_makeshlibs -plibdrm-nouveau2 -V'libdrm-nouveau2 (>= 2.4.38)' -- -c4
+endif
+	dh_makeshlibs -plibdrm-radeon1 -V'libdrm-radeon1 (>= 2.4.39)' -- -c4
+ifeq ($(ARM), yes)
+	dh_makeshlibs -plibdrm-omap1 -V'libdrm-omap1 (>= 2.4.38)' -- -c4
+	dh_makeshlibs -plibdrm-freedreno1 -V'libdrm-freedreno1' -- -c4
+	dh_makeshlibs -plibdrm-exynos1 -V'libdrm-exynos1' -- -c4
+endif
+
+%:
+	dh $@ --with quilt,autoreconf --builddirectory=build/
--- libdrm-2.4.56.orig/debian/changelog
+++ libdrm-2.4.56/debian/changelog
@@ -0,0 +1,749 @@
+libdrm (2.4.56-1~ubuntu2) precise; urgency=medium
+
+  * No change rebuild in the security pocket
+
+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com>  Thu, 12 Feb 2015 10:56:21 -0500
+
+libdrm (2.4.56-1~ubuntu1) trusty-proposed; urgency=medium
+
+  * Copy package back to trusty. (LP: #1400626)
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 09 Dec 2014 10:21:05 +0100
+
+libdrm (2.4.56-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Enable building freedreno and exynos on arm. (Closes: #741509)
+  * Add a squashed patch from upstream to hide all private symbols.
+    - 03_hide_symbols.diff
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Wed, 06 Aug 2014 12:15:26 +0200
+
+libdrm (2.4.54-1) unstable; urgency=medium
+
+  [ Andreas Boll ]
+  * New upstream release.
+  * Add 02_fix_qxl_drm_h.diff (Closes: #746807).
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 10 May 2014 15:38:16 +0200
+
+libdrm (2.4.53-1) unstable; urgency=medium
+
+  [ Timo Aaltonen ]
+  * New upstream release.
+    - 02_kbsd_modeset.diff dropped, upstream
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 27 Apr 2014 22:15:55 +0200
+
+libdrm (2.4.52-1) unstable; urgency=medium
+
+  [ Julien Cristau ]
+  * Remove Cyril Brulebois from Uploaders.
+
+  [ Maarten Lankhorst ]
+  * New upstream release.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Fri, 24 Jan 2014 13:41:57 +0100
+
+libdrm (2.4.51-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Julien Cristau <jcristau@debian.org>  Mon, 20 Jan 2014 13:45:50 +0100
+
+libdrm (2.4.50-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Thu, 19 Dec 2013 10:49:57 +0100
+
+libdrm (2.4.49-2) unstable; urgency=low
+
+  * Cherry-pick a commit from upstream to fix a radeonsi regression.
+    - c8a437f4c76: radeon: Update unaligned offset for 2D->1D tiling
+      transition on SI
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Tue, 26 Nov 2013 15:25:45 +0100
+
+libdrm (2.4.49-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Mon, 25 Nov 2013 11:36:32 +0100
+
+libdrm (2.4.46-4) unstable; urgency=low
+
+  [ Colin Watson ]
+  * Declare libdrm-dev Multi-Arch: same.
+
+  [ Maarten Lankhorst ]
+  * Cherry-pick upstream patch to fix relocations for all cards <nv50.
+  * Do not require valgrind on armel.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Thu, 07 Nov 2013 14:11:38 +0100
+
+libdrm (2.4.46-3) unstable; urgency=low
+
+  * Make drmCheckModesettingSupported work on FreeBSD.  Thanks, Christoph
+    Egger!
+  * Stop building libkms.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 19 Sep 2013 21:24:52 +0200
+
+libdrm (2.4.46-2) unstable; urgency=low
+
+  * Build libdrm-radeon1 on kfreebsd (closes: #684593).
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 21 Aug 2013 21:05:44 +0200
+
+libdrm (2.4.46-1) unstable; urgency=low
+
+  [ Sven Joachim ]
+  * New upstream release.
+  * Bump libdrm2's and libdrm-intel1's symbols and shlibs.
+  * Build libdrm-intel1 on x32 (Closes: #712515).
+  * Disable silent rules.
+
+ -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com>  Mon, 05 Aug 2013 13:44:46 +0200
+
+libdrm (2.4.45-3) unstable; urgency=low
+
+  * Team upload.
+
+  * debian/patches/03_build_against_librt.diff:
+    + Removed, no longer needed with our current glibc version.
+      Thanks to Julien Cristau for pointing it out.
+  * Upload to unstable.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Thu, 06 Jun 2013 23:13:12 +0200
+
+libdrm (2.4.45-2) experimental; urgency=low
+
+  [ Sven Joachim ]
+  * Only build-depend on valgrind on architectures where
+    valgrind is actually available.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 30 May 2013 10:03:37 +0200
+
+libdrm (2.4.45-1) experimental; urgency=low
+
+  * Team upload.
+
+  [ Julien Cristau ]
+  * Bump libdrm2 shlibs to 2.4.38.
+
+  [ Maarten Lankhorst ]
+  * New upstream release.
+  * Build-depend on xsltproc and docbook-xsl.
+  * Add valgrind to build-depends.
+
+  [ Timo Aaltonen ]
+  * control: Bump policy to 3.9.4, no changes.
+
+  [ Emilio Pozuelo Monfort ]
+  * Upload to experimental.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Thu, 16 May 2013 00:09:59 +0200
+
+libdrm (2.4.40-1) experimental; urgency=low
+
+  [ Maarten Lankhorst ]
+  * New upstream release.
+    - Nouveau ABI change, replace libdrm-nouveau1a with libdrm-nouveau2.
+
+  [ Timo Aaltonen ]
+  * Bump libdrm-intel1's and libdrm-nouveau2's shlibs due to new symbols.
+  * Hardcode the version for libdrm-omap1's shlibs.
+
+  [ Christopher James Halse Rogers ]
+  * Add libdrm2-udeb; Xserver 1.13 wants libdrm for hotplug config, so
+    will be needed for the 1.13 xserver-xorg-core-udeb.
+
+  [ Sven Joachim ]
+  * Bump libdrm-radeon1's symbols and shlibs.
+  * Mark some internal libdrm-nouveau2 symbols as private.
+  * Drop patch 02_build_libkms_against_in_tree_drm.diff, applied upstream.
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 17 Nov 2012 18:50:33 +0100
+
+libdrm (2.4.33-3) unstable; urgency=low
+
+  * Add missing dependency on libdrm-omap1 to libdrm-dev (thanks, Robert
+    Hooker!).  Make some arm matching a bit simpler.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 21 Jun 2012 23:22:22 +0200
+
+libdrm (2.4.33-2) unstable; urgency=low
+
+  [ Sebastian Reichel ]
+  * Build libdrm_omap (closes: #667572).
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 21 Jun 2012 22:39:22 +0200
+
+libdrm (2.4.33-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 02 Apr 2012 01:28:22 +0000
+
+libdrm (2.4.32-1) unstable; urgency=low
+
+  [ Robert Hooker ]
+  * New upstream release (2.4.31).
+  * Bump libdrm2 and libdrm-radeon1 symbols and shlibs to account for
+    recent changes.
+
+  [ Cyril Brulebois ]
+  * New upstream release (2.4.32).
+  * Bump libdrm-intel1's symbols and shlibs accordingly.
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 19 Mar 2012 19:56:12 +0000
+
+libdrm (2.4.30-1) unstable; urgency=low
+
+  * New upstream release.
+  * Bump libdrm2's and libdrm-intel1's symbols and shlibs accordingly.
+  * Document the symlink dance when building from git in README.source.
+
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 06 Jan 2012 20:04:37 +0100
+
+libdrm (2.4.29-1) unstable; urgency=low
+
+  * New upstream release:
+    - assert()s are now gone (Closes: #651316).
+  * Update libdrm-intel1's symbols and shlibs accordingly.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 13 Dec 2011 13:16:22 +0100
+
+libdrm (2.4.28-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 06 Dec 2011 15:17:50 +0100
+
+libdrm (2.4.27-1) unstable; urgency=low
+
+  * New upstream release:
+    - Push the new Intel API for use by mesa.
+    - Usual bug fixes.
+  * Update libdrm-intel1's symbols and shlibs accordingly.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 01 Nov 2011 19:30:54 +0100
+
+libdrm (2.4.26-1) unstable; urgency=low
+
+  * New upstream release:
+    - Fix two important intel bugs.
+  * Add libpciaccess-dev build-dep.
+  * Update libdrm-intel1.symbols and shlibs for new aperture-related symbol.
+
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 24 Jun 2011 17:07:04 +0200
+
+libdrm (2.4.25-3) unstable; urgency=low
+
+  * Team upload.
+
+  [ Steve Langasek ]
+  * Build for multiarch.
+
+  [ Julien Cristau ]
+  * Add lintian overrides for symbols-declares-dependency-on-other-package (we
+    use that for private symbols).
+  * Bump Standards-Version to 3.9.2.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 09 Jun 2011 20:05:53 +0200
+
+libdrm (2.4.25-2) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 16 May 2011 19:14:49 +0200
+
+libdrm (2.4.25-1) experimental; urgency=low
+
+  * New upstream release.
+  * Update libdrm2.symbols and shlibs.
+  * Update libkms1.symbols, marking dumb_create@Base as private.
+  * Switch to dh:
+    - Bump compat/build-dep to 8.
+    - Use dh-autoreconf.
+    - Tidy old build-deps.
+    - Testsuite now automatically gets run.
+  * Accordingly, add a build-dep to fix FTBFS during make check:
+    - 03_build_against_librt.diff
+  * Add libudev-dev build-dep on Linux so that detection works.
+  * Since the testsuite just got enabled, let's not bail out if it fails.
+  * Remove xsfbs as it's no longer needed.
+  * Bump Standards-Version (no changes needed).
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 19 Apr 2011 02:57:29 +0200
+
+libdrm (2.4.24-2) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 10 Apr 2011 22:57:02 +0200
+
+libdrm (2.4.24-1) experimental; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * New upstream release.
+  * Add new internal radeon symbols to libkms1.symbols
+
+  [ Cyril Brulebois ]
+  * Just as a reminder, not adding a lintian override for the following
+    warning, since patches were sent upstream to stop exporting private
+    symbols: symbols-declares-dependency-on-other-package
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 05 Mar 2011 20:27:23 +0100
+
+libdrm (2.4.23-3) unstable; urgency=low
+
+  * Cherry-pick from upstream:
+    - intel: Fallback to old exec if no mrb_exec is available
+    - intel: Set the public handle after opening by name
+    - intel: Remember named bo
+  * The first of those fixes should fix some failures to submit batch
+    buffer (Closes: #612766).
+  * Bump dependency to 2.4.23-3 for the drm_intel_bo_mrb_exec symbol in
+    libdrm-intel1's symbols file. While the former version is alright
+    from a shared object point of view, runtime doesn't seem to agree
+    (Closes: #609299).
+  * Bump the libdrm-intel1 shlibs version for consistency.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 16 Feb 2011 11:44:44 +0100
+
+libdrm (2.4.23-2) unstable; urgency=low
+
+  * Upload to unstable.
+  * Update Uploaders list. Thanks, David & Brice!
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 05 Feb 2011 11:26:44 +0100
+
+libdrm (2.4.23-1) experimental; urgency=low
+
+  [ Sven Joachim ]
+  * New upstream release.
+  * Rename the libdrm-nouveau1 package to libdrm-nouveau1a, since upstream
+    broke the ABI without changing the soname.
+    - Make libdrm-nouveau1a{,-dbg} conflict with libdrm-nouveau1{,-dbg} and
+      remove the Breaks against xserver-xorg-video-nouveau.
+    - Adjust the lintian override.
+    - Bump libdrm-nouveau shlibs and symbols versions to 2.4.23.
+  * Use dh_prep instead of the deprecated dh_clean -k in debian/rules.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 23 Dec 2010 17:56:54 +0100
+
+libdrm (2.4.22-2) experimental; urgency=low
+
+  * Cherry-pick some commits from upstream to make the intel video driver
+    2.13.901 buildable:
+     - 057fab33: intel: Prepare for BLT ring split
+     - 36245771: intel: enable relaxed fence allocation for i915
+     - 49447a9b: intel: initialize bufmgr.bo_mrb_exec unconditionally
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 07 Nov 2010 22:51:12 +0100
+
+libdrm (2.4.22-1) experimental; urgency=low
+
+  [ Sven Joachim ]
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 02 Oct 2010 00:41:05 +0200
+
+libdrm (2.4.21-2) experimental; urgency=low
+
+  [ Sven Joachim ]
+  * Bump libdrm-nouveau shlibs and symbols versions to 2.4.21-1 to ensure
+    that packages built against this version are not used with squeeze's
+    libdrm-nouveau1.
+  * Add a lintian override for the symbols-file-contains-debian-revision
+    warning.  Bump debhelper compatibility level to 6 for dh_lintian.
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 25 Aug 2010 23:14:40 +0200
+
+libdrm (2.4.21-1) experimental; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * debian/rules:
+    - Add libkms to build
+    - Build vmwgfx experimental API.  The drm module is available in the 2.6.34
+      kernel so we might as well build the userspace bits.
+  * debian/control:
+    - Add libkms1, libkms1-dbg packages on linux
+  * debian/patches/02_build_libkms_against_in_tree_drm:
+    - Link libkms against libdrm as it uses symbols from libdrm.
+
+  [ Robert Hooker ]
+  * New upstream release.
+  * Refresh 02_build_libkms_against_in_tree_drm.
+  * Update libdrm-intel1.symbols, libdrm-radeon1.symbols and shlibs.
+
+  [ Julien Cristau ]
+  * Update the copyright file to hopefully include all licenses variations and
+    copyright statements from the source tree.
+  * Mark new libdrm_radeon symbols private.  They shouldn't actually be
+    exported.
+  * Same with libkms.  Also don't set a minimum version to 2.4.20, since we
+    didn't ship it before anyway.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 10 Jun 2010 23:24:54 +0200
+
+libdrm (2.4.20-3) experimental; urgency=low
+
+  [ Sven Joachim ]
+  * Update libdrm-nouveau1 to the ABI of Linux 2.6.34.
+    - Drop 03_revert_abi_change.diff.
+    - Bump libdrm-nouveau shlibs and symbols versions to 2.4.20-3~
+      to ensure that packages built against this version are not used
+      with an older libdrm-nouveau1 version.
+    - Add versioned Breaks against xserver-xorg-video-nouveau to force
+      an upgrade of that package and prevent X segfaults.
+  * Include full SONAME in libdrm-nouveau1.install.
+  * Update xsfbs to 81fc271788605b52e85c2d11635a0371fb44605e0.
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 26 May 2010 10:33:22 +0200
+
+libdrm (2.4.20-2) experimental; urgency=low
+
+  * Upload again, faking a new upstream version, since a screw-up on
+    ftpmaster side trashed all files from experimental.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 28 Apr 2010 01:54:44 +0200
+
+libdrm (2.4.20-1) experimental; urgency=low
+
+  * New upstream release.
+    + Cherry-pick upstream fixes 107ccd92 and 332739e3.
+  * Update libdrm-intel1.symbols, libdrm-radeon1.symbols and shlibs.
+  * Disable libkms for now.
+
+ -- Brice Goglin <bgoglin@debian.org>  Fri, 16 Apr 2010 07:14:41 +0200
+
+libdrm (2.4.18-5) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 14 Apr 2010 13:02:34 +0200
+
+libdrm (2.4.18-4) experimental; urgency=low
+
+  * Steal 03_revert_abi_change.diff from Ubuntu to revert the nouveau ABI
+    change.  Current Debian kernels support only the old ABI.
+    Thanks Sven Joachim!
+  * Build a libdrm-nouveau1 package on Linux architectures (Closes: #568162).
+    Patch adapted from the Ubuntu package. Thanks Sven Joachim!
+
+ -- Brice Goglin <bgoglin@debian.org>  Wed, 24 Mar 2010 22:27:00 +0100
+
+libdrm (2.4.18-3) unstable; urgency=low
+
+  * Include full SONAME in libdrm*.install to prevent accidental breakage.
+  * Add back the drm headers in libdrm-dev.
+
+ -- Julien Cristau <jcristau@debian.org>  Tue, 16 Mar 2010 12:28:50 +0100
+
+libdrm (2.4.18-2) unstable; urgency=low
+
+  * Fix FTBFS on non-Linux architectures (Closes: #570851): Replace
+    --{enable,disable}-radeon-experimental-api configure flag with
+    --{enable,disable}-radeon since it got renamed.
+  * Add ${misc:Depends} where it was missing, and fold all Depends.
+  * Bump Standards-Version from 3.8.3 to 3.8.4 (no changes needed).
+  * Add myself to Uploaders.
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 22 Feb 2010 15:31:47 +0100
+
+libdrm (2.4.18-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Brice Goglin <bgoglin@debian.org>  Thu, 18 Feb 2010 08:06:14 +0100
+
+libdrm (2.4.17-1) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * New upstream release, closes: #560434, #567831.
+  * Update patch 01_default_perms.diff to account for upstream move of libdrm
+    to toplevel.
+  * Update libdrm2.symbols and shlibs.
+  * Update libdrm-intel1.symbols and shlibs.
+  * Bump debhelper build-dep, we use dh_strip --remaining-packages (closes:
+    #558443).  Thanks, Sergio Gelato!
+  * Enable libdrm_radeon, interface to kernel graphics memory management on
+    radeon (closes: #558786).
+  * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
+    good reason.  Thanks, Colin Watson!
+  * Remove myself from Uploaders
+
+  [ Brice Goglin ]
+  * Bump linux-libc-dev dependency to 2.6.32, thanks Piotr Engelking,
+    closes: #561224.
+  * Add libdrm-radeon1 symbols and update shlibs.
+  * Update debian/copyright.
+
+  [ Timo Aaltonen ]
+  * Update libdrm2.symbols and shlibs.
+
+ -- Brice Goglin <bgoglin@debian.org>  Sun, 31 Jan 2010 20:12:38 +0100
+
+libdrm (2.4.15-1) unstable; urgency=low
+
+  * New upstream release.
+    + update libdrm-intel1 symbols and shlibs
+  * Only build libdrm-intel on x86 (linux and kfreebsd).
+
+ -- Julien Cristau <jcristau@debian.org>  Mon, 23 Nov 2009 17:00:57 +0100
+
+libdrm (2.4.14-1) unstable; urgency=low
+
+  * Parse space-separated DEB_BUILD_OPTIONS, and handle parallel=N.
+  * New upstream release.
+  * Bump Standards-Version to 3.8.3.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 24 Sep 2009 21:53:09 +0200
+
+libdrm (2.4.13-1) unstable; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * debian/control:
+    + Remove scary 'built from DRM snapshot' warning from long description of
+      libdrm-intel1{,-dbg}
+
+  [ Julien Cristau ]
+  * New upstream release.
+  * Update libdrm-intel1.symbols.
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 05 Sep 2009 13:15:36 +0200
+
+libdrm (2.4.12-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Brice Goglin <bgoglin@debian.org>  Tue, 21 Jul 2009 15:29:03 +0200
+
+libdrm (2.4.11-1) unstable; urgency=low
+
+  * New upstream release.
+  * Also pull in additional fix for libdrm-intel: Only do BO caching up to
+    64MB objects.
+  * Update libdrm-intel1.symbols and bump shlibs.
+  * Add README.source from xsfbs.  Bump Standards-Version to 3.8.1.
+  * Remove Thierry Reding from Uploaders, he doesn't seem to be around anymore
+    :(
+
+ -- Julien Cristau <jcristau@debian.org>  Mon, 08 Jun 2009 16:22:04 +0200
+
+libdrm (2.4.9-2) unstable; urgency=low
+
+  * Ship all drm headers on kfreebsd, again.
+  * Move -dbg packages to new debug section.
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 03 May 2009 18:55:42 +0200
+
+libdrm (2.4.9-1) unstable; urgency=low
+
+  [ Brice Goglin ]
+  * New upstream release.
+    + Remove buggy symlinks for the upstream tarball.
+  * Add myself to Uploaders.
+
+  [ Julien Cristau ]
+  * Make the linux-libc-dev dependency linux-only (closes: #521253).  Thanks,
+    Petr Salinger!
+
+ -- Brice Goglin <bgoglin@debian.org>  Sat, 11 Apr 2009 23:12:49 +0200
+
+libdrm (2.4.5-2) unstable; urgency=low
+
+  * Add drm_mode.h to the list of headers we don't ship.
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 25 Mar 2009 10:56:53 +0100
+
+libdrm (2.4.5-1) unstable; urgency=low
+
+  * New upstream release. (closes: #505740)
+
+  [ Timo Aaltonen ]
+  * debian/rules:
+    -Run autoreconf at build time, build-depend on automake and libtool.
+     (closes: #482727)
+    -Add a debian/libdrm2.symbols file and '-c4' parameter to dh_makeshlibs
+     to fail if new symbols are added. Don't use Debian versions for now.
+
+  [ Julien Cristau ]
+  * Add a new package for the intel-specific bits (libdrm-intel1)
+  * Build-depend on pkg-config and libpthread-stubs0-dev (closes: #502078).
+    Thanks, Frank Lichtenheld!
+  * Don't mention *.la in libdrm-dev.install.
+  * Make libdrm-dev depend on libdrm-intel1 on x86.
+  * On Linux, let udev create the device files.
+  * Let linux-libc-dev provide some drm headers, drop them from libdrm-dev.
+    Add dependency on linux-libc-dev >= 2.6.28.
+  * Set libdrm2 shlibs to 2.4.3, libdrm-intel1 shlibs to 2.4.5.  Update
+    symbols files.
+
+ -- Julien Cristau <jcristau@debian.org>  Tue, 24 Mar 2009 22:20:50 +0100
+
+libdrm (2.3.1-2) unstable; urgency=high
+
+  * Remove from the source package a bunch of files that are only used by the
+    kernel drm component.  This gets rid of the mga, r128 and radeon
+    microcode, and thus closes: #502675.  Thanks, Ben Hutchings!
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 19 Oct 2008 14:26:37 +0200
+
+libdrm (2.3.1-1) unstable; urgency=low
+
+  [ Brice Goglin ]
+  * Update upstream URL in debian/copyright.
+  * Bump Standards-Version to 3.7.3 (no changes).
+  * Drop the XS- prefix from Vcs-Git and Vcs-Browser fields in debian/control.
+  * Install the upstream ChangeLog.
+
+  [ Julien Cristau ]
+  * New upstream release (needed for mesa 7.1 and newer xserver).
+  * Note: this release removes the memory manager (TTM) interface used by the
+    i915tex dri driver.
+  * debian/rules: don't call configure with --host if we're not
+    cross-building, and fix some rules dependencies.
+
+  [ Timo Aaltonen ]
+  * Bump the shlibs to 2.3.1.
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 13 Jul 2008 19:07:49 +0200
+
+libdrm (2.3.0-4) unstable; urgency=low
+
+  [ David Nusinow ]
+  * Add NEWS.Debian explaining the change in the last upload to interested
+    administrators.
+
+  [ Julien Cristau ]
+  * Upload to unstable.
+
+ -- Julien Cristau <jcristau@debian.org>  Fri, 20 Apr 2007 05:06:34 +0200
+
+libdrm (2.3.0-3) experimental; urgency=low
+
+  * Add myself to uploaders
+  * Patch libdrm to default to device permission 666 so we don't have to do it
+    in xorg.conf. The only way libdrm can do anything is through the server
+    anyway. This can still be overridden by a user's xorg.conf. This change
+    also requires adding quilt to the build-depends
+
+ -- David Nusinow <dnusinow@debian.org>  Sun, 15 Apr 2007 13:08:50 -0400
+
+libdrm (2.3.0-2) unstable; urgency=low
+
+  * Update my email address in debian/control.
+  * Add XS-Vcs-Git and XS-Vcs-Browser in debian/control.
+  * Upload to unstable.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 12 Apr 2007 19:06:57 +0200
+
+libdrm (2.3.0-1) experimental; urgency=low
+
+  [ Thierry Reding ]
+  * New upstream release.
+  * Set the Debian X Strike Force as maintainer.
+  * Add myself to uploaders.
+  * Add a debugging symbol package for libdrm2.
+
+  [ Julien Cristau ]
+  * Bump shlibs to libdrm2 >= 2.3.0.
+  * Add myself to uploaders.
+  * Add build-dep on dpkg-dev >= 1.13.19 to make sure that the binary:Version
+    substvar is available.
+  * libdrm2-dbg depends on libdrm2 (= ${binary:Version}).
+  * Don't install libdrm.la, and use dh_install --list-missing.
+
+ -- Julien Cristau <julien.cristau@ens-lyon.org>  Thu,  4 Jan 2007 18:56:08 +0100
+
+libdrm (2.2.0-0.1) experimental; urgency=low
+
+  * Non-maintainer upload.
+  * New upstream release.
+  * Bump Standards-Version to 3.7.2, no changes required.
+  * Bump debhelper compatibility to 5 and adjust build-dependency.
+  * Don't try to install pkgconfig files from usr/share/pkgconfig because
+    there is nothing in that directory.
+
+ -- Thierry Reding <thierry@gilfi.de>  Sat, 18 Nov 2006 19:50:26 +0100
+
+libdrm (2.0.2-0.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * New upstream release (closes: #377166).
+    - Includes a fix for FTBFS on GNU/kFreeBSD (closes: #332994).
+  * Manually force static build.
+
+ -- Andres Salomon <dilinger@debian.org>  Sat, 23 Sep 2006 06:32:23 +0000
+
+libdrm (2.0.1-1) unstable; urgency=high
+
+  * New upstream release
+    - Fixes a pathological hash table smash discovered by the Coverity scanner
+    - updates the installed header files for various new #defines
+
+ -- David Nusinow <dnusinow@debian.org>  Tue,  4 Apr 2006 23:46:05 -0400
+
+libdrm (2.0-1) experimental; urgency=low
+
+  * First upload to Debian
+
+ -- David Nusinow <dnusinow@debian.org>  Thu,  5 Jan 2006 22:45:27 -0500
+
+libdrm (2.0-0ubuntu1) dapper; urgency=low
+
+  * New upstream release.
+  * Change binary package from libdrm1 to libdrm2, following soversion bump.
+
+ -- Daniel Stone <daniel.stone@ubuntu.com>  Mon, 12 Dec 2005 13:05:22 +1100
+
+libdrm (1.0.5-0ubuntu1) dapper; urgency=low
+
+  * New upstream version.
+
+ -- Daniel Stone <daniel.stone@ubuntu.com>  Wed,  2 Nov 2005 01:56:07 +1100
+
+libdrm (1.0.3-3) unstable; urgency=low
+
+  * Yay for understandable bug reports! *gmprf*
+  * debian/control:libdrm1 =~ s/development/runtime/ (closes: bug#325515)
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Fri, 16 Sep 2005 09:46:05 -0600
+
+libdrm (1.0.3-2) unstable; urgency=low
+
+  * libdrm.pc.in: add -ldrm to Libs
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Thu, 08 Sep 2005 20:49:01 -0600
+
+libdrm (1.0.3-1) unstable; urgency=low
+
+  * New upstream
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Sun, 28 Aug 2005 11:12:07 -0600
+
+libdrm (1.0.2-3) unstable; urgency=low
+
+  * debian/control: it's "Direct Rendering Infraestructure".  I was rather
+    sure it stand for interface... thanks Michel.  (closes: bug#324514)
+  * debian/control: forgot to actually write this in the file.  Build-Depends
+    on libx11-dev.  Thanks Kurt (closes: bug#324560)
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Sun, 28 Aug 2005 11:01:41 -0600
+
+libdrm (1.0.2-2) unstable; urgency=low
+
+  * Forgot to fix the other broken bit :-P
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Fri, 19 Aug 2005 22:01:32 -0600
+
+libdrm (1.0.2-1) unstable; urgency=low
+
+  * Initial release. Closes: #324074
+
+ -- Marcelo E. Magallon <mmagallo@debian.org>  Fri, 19 Aug 2005 21:11:18 -0600
+
--- libdrm-2.4.56.orig/debian/libdrm-radeon1.symbols
+++ libdrm-2.4.56/debian/libdrm-radeon1.symbols
@@ -0,0 +1,45 @@
+libdrm_radeon.so.1 libdrm-radeon1 #MINVER#
+ radeon_bo_debug@Base 2.4.17
+ radeon_bo_get_handle@Base 2.4.17
+ radeon_bo_get_src_domain@Base 2.4.17
+ radeon_bo_get_tiling@Base 2.4.17
+ radeon_bo_is_busy@Base 2.4.17
+ radeon_bo_is_referenced_by_cs@Base 2.4.17
+ radeon_bo_is_static@Base 2.4.17
+ radeon_bo_manager_gem_ctor@Base 2.4.17
+ radeon_bo_manager_gem_dtor@Base 2.4.17
+ radeon_bo_map@Base 2.4.17
+ radeon_bo_open@Base 2.4.17
+ radeon_bo_ref@Base 2.4.17
+ radeon_bo_set_tiling@Base 2.4.17
+ radeon_bo_unmap@Base 2.4.17
+ radeon_bo_unref@Base 2.4.17
+ radeon_bo_wait@Base 2.4.17
+ radeon_cs_begin@Base 2.4.17
+ radeon_cs_create@Base 2.4.17
+ radeon_cs_destroy@Base 2.4.17
+ radeon_cs_emit@Base 2.4.17
+ radeon_cs_end@Base 2.4.17
+ radeon_cs_erase@Base 2.4.17
+ radeon_cs_get_id@Base 2.4.20
+ radeon_cs_manager_gem_ctor@Base 2.4.17
+ radeon_cs_manager_gem_dtor@Base 2.4.17
+ radeon_cs_need_flush@Base 2.4.17
+ radeon_cs_print@Base 2.4.17
+ radeon_cs_set_limit@Base 2.4.17
+ radeon_cs_space_add_persistent_bo@Base 2.4.17
+ radeon_cs_space_check@Base 2.4.17
+ radeon_cs_space_check_with_bo@Base 2.4.17
+ radeon_cs_space_reset_bos@Base 2.4.17
+ radeon_cs_space_set_flush@Base 2.4.17
+ radeon_cs_write_reloc@Base 2.4.17
+ radeon_gem_bo_open_prime@Base 2.4.39
+ radeon_gem_get_kernel_name@Base 2.4.17
+ radeon_gem_get_reloc_in_cs@Base 2.4.20
+ radeon_gem_name_bo@Base 2.4.17
+ radeon_gem_prime_share_bo@Base 2.4.39
+ radeon_gem_set_domain@Base 2.4.17
+ radeon_surface_best@Base 2.4.31
+ radeon_surface_init@Base 2.4.31
+ radeon_surface_manager_free@Base 2.4.31
+ radeon_surface_manager_new@Base 2.4.31
--- libdrm-2.4.56.orig/debian/libdrm-nouveau2.symbols
+++ libdrm-2.4.56/debian/libdrm-nouveau2.symbols
@@ -0,0 +1,37 @@
+libdrm_nouveau.so.2 libdrm-nouveau2 #MINVER#
+| libdrm-nouveau-private
+ nouveau_bo_map@Base 2.4.34
+ nouveau_bo_name_get@Base 2.4.34
+ nouveau_bo_name_ref@Base 2.4.34
+ nouveau_bo_new@Base 2.4.34
+ nouveau_bo_prime_handle_ref@Base 2.4.38
+ nouveau_bo_ref@Base 2.4.34
+ nouveau_bo_set_prime@Base 2.4.38
+ nouveau_bo_wait@Base 2.4.34
+ nouveau_bo_wrap@Base 2.4.34
+ nouveau_bufctx_del@Base 2.4.34
+ nouveau_bufctx_mthd@Base 2.4.34
+ nouveau_bufctx_new@Base 2.4.34
+ nouveau_bufctx_refn@Base 2.4.34
+ nouveau_bufctx_reset@Base 2.4.34
+ nouveau_client_del@Base 2.4.34
+ nouveau_client_new@Base 2.4.34
+ nouveau_device_del@Base 2.4.34
+ nouveau_device_open@Base 2.4.34
+ nouveau_device_open_existing@Base 0 1
+ nouveau_device_wrap@Base 2.4.34
+ nouveau_getparam@Base 2.4.34
+ nouveau_object_del@Base 2.4.34
+ nouveau_object_find@Base 2.4.34
+ nouveau_object_new@Base 2.4.34
+ nouveau_pushbuf_bufctx@Base 2.4.34
+ nouveau_pushbuf_data@Base 2.4.34
+ nouveau_pushbuf_del@Base 2.4.34
+ nouveau_pushbuf_kick@Base 2.4.34
+ nouveau_pushbuf_new@Base 2.4.34
+ nouveau_pushbuf_refd@Base 2.4.34
+ nouveau_pushbuf_refn@Base 2.4.34
+ nouveau_pushbuf_reloc@Base 2.4.34
+ nouveau_pushbuf_space@Base 2.4.34
+ nouveau_pushbuf_validate@Base 2.4.34
+ nouveau_setparam@Base 2.4.34
--- libdrm-2.4.56.orig/debian/libdrm-nouveau2.install
+++ libdrm-2.4.56/debian/libdrm-nouveau2.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_nouveau.so.2*
--- libdrm-2.4.56.orig/debian/libdrm-intel1.symbols
+++ libdrm-2.4.56/debian/libdrm-intel1.symbols
@@ -0,0 +1,69 @@
+libdrm_intel.so.1 libdrm-intel1 #MINVER#
+ drm_intel_bo_alloc@Base 2.4.1
+ drm_intel_bo_alloc_for_render@Base 2.4.5
+ drm_intel_bo_alloc_tiled@Base 2.4.15
+ drm_intel_bo_busy@Base 2.4.13
+ drm_intel_bo_disable_reuse@Base 2.4.10
+ drm_intel_bo_emit_reloc@Base 2.4.1
+ drm_intel_bo_emit_reloc_fence@Base 2.4.20
+ drm_intel_bo_exec@Base 2.4.1
+ drm_intel_bo_fake_alloc_static@Base 2.4.1
+ drm_intel_bo_fake_disable_backing_store@Base 2.4.1
+ drm_intel_bo_flink@Base 2.4.1
+ drm_intel_bo_gem_create_from_name@Base 2.4.1
+ drm_intel_bo_gem_create_from_prime@Base 2.4.38
+ drm_intel_bo_gem_export_to_prime@Base 2.4.38
+ drm_intel_bo_get_subdata@Base 2.4.1
+ drm_intel_bo_get_tiling@Base 2.4.1
+ drm_intel_bo_is_reusable@Base 2.4.21
+ drm_intel_bo_madvise@Base 2.4.16
+ drm_intel_bo_map@Base 2.4.1
+ drm_intel_bo_mrb_exec@Base 2.4.23-3~
+ drm_intel_bo_pin@Base 2.4.1
+ drm_intel_bo_reference@Base 2.4.1
+ drm_intel_bo_references@Base 2.4.15
+ drm_intel_bo_set_tiling@Base 2.4.1
+ drm_intel_bo_subdata@Base 2.4.1
+ drm_intel_bo_unmap@Base 2.4.1
+ drm_intel_bo_unpin@Base 2.4.1
+ drm_intel_bo_unreference@Base 2.4.1
+ drm_intel_bo_wait_rendering@Base 2.4.1
+ drm_intel_bufmgr_check_aperture_space@Base 2.4.1
+ drm_intel_bufmgr_destroy@Base 2.4.1
+ drm_intel_bufmgr_fake_contended_lock_take@Base 2.4.1
+ drm_intel_bufmgr_fake_evict_all@Base 2.4.1
+ drm_intel_bufmgr_fake_init@Base 2.4.1
+ drm_intel_bufmgr_fake_set_exec_callback@Base 2.4.1
+ drm_intel_bufmgr_fake_set_fence_callback@Base 2.4.1
+ drm_intel_bufmgr_fake_set_last_dispatch@Base 2.4.1
+ drm_intel_bufmgr_gem_enable_fenced_relocs@Base 2.4.20
+ drm_intel_bufmgr_gem_enable_reuse@Base 2.4.1
+ drm_intel_bufmgr_gem_get_devid@Base 2.4.32
+ drm_intel_bufmgr_gem_init@Base 2.4.1
+ drm_intel_bufmgr_gem_set_aub_dump@Base 2.4.32
+ drm_intel_bufmgr_gem_set_aub_filename@Base 2.4.46
+ drm_intel_bufmgr_gem_set_aub_annotations@Base 2.4.34
+ drm_intel_bufmgr_gem_set_vma_cache_size@Base 2.4.29
+ drm_intel_bufmgr_set_debug@Base 2.4.1
+ drm_intel_decode@Base 2.4.30
+ drm_intel_decode_context_alloc@Base 2.4.30
+ drm_intel_decode_context_free@Base 2.4.30
+ drm_intel_decode_set_batch_pointer@Base 2.4.30
+ drm_intel_decode_set_dump_past_end@Base 2.4.30
+ drm_intel_decode_set_head_tail@Base 2.4.30
+ drm_intel_decode_set_output_file@Base 2.4.30
+ drm_intel_gem_bo_aub_dump_bmp@Base 2.4.32
+ drm_intel_gem_bo_clear_relocs@Base 2.4.27
+ drm_intel_gem_bo_context_exec@Base 2.4.36
+ drm_intel_gem_bo_get_reloc_count@Base 2.4.27
+ drm_intel_gem_bo_map_gtt@Base 2.4.3
+ drm_intel_gem_bo_map_unsynchronized@Base 2.4.32
+ drm_intel_gem_bo_start_gtt_access@Base 2.4.3
+ drm_intel_gem_bo_unmap_gtt@Base 2.4.9
+ drm_intel_gem_bo_wait@Base 2.4.36
+ drm_intel_gem_context_create@Base 2.4.37
+ drm_intel_gem_context_destroy@Base 2.4.37
+ drm_intel_get_aperture_sizes@Base 2.4.26
+ drm_intel_get_pipe_from_crtc_id@Base 2.4.11
+ drm_intel_get_reset_stats@Base 2.4.48
+ drm_intel_reg_read@Base 2.4.38
--- libdrm-2.4.56.orig/debian/copyright
+++ libdrm-2.4.56/debian/copyright
@@ -0,0 +1,316 @@
+This package was downloaded from
+http://dri.freedesktop.org/libdrm/
+
+It was debianized by Marcelo E. Magallon <mmagallo@debian.org> on
+Fri, 19 Aug 2005 21:11:18 -0600.
+
+
+ Copyright 2005 Adam Jackson.
+
+ 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 on 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 above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ 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 ADAM JACKSON 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.
+
+
+ Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
+ Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
+ 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, sublicense, 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 above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ 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
+ NONINFRINGEMENT.  IN NO EVENT SHALL PRECISION INSIGHT 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.
+
+
+ Copyright (c) 2007-2008 Dave Airlie <airlied@linux.ie>
+ Copyright (c) 2007-2008 Jakob Bornecrantz <wallbraker@gmail.com>
+ Copyright (c) 2008 Red Hat Inc.
+ Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
+ Copyright (c) 2007-2009 Intel Corporation
+
+ 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, sublicense,
+ 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 above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ 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 NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS 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.
+
+
+ Copyright 2002-2006 Tungsten Graphics, Inc., Cedar Park, Texas.
+ 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, sublicense,
+ 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 above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ TUNGSTEN GRAPHICS 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.
+
+
+ Copyright 2000 Gareth Hughes
+ Copyright 2002 Frank C. Earl
+ Copyright 2002-2003 Leif Delgass
+ 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, sublicense,
+ 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 above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ THE COPYRIGHT OWNER(S) 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.
+
+
+ Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ Copyright 2005 Stephane Marchesin.
+ 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, sublicense,
+ 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 above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ VA LINUX SYSTEMS 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.
+
+
+ Copyright 2004  Felix Kuehling
+ 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 above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial portions
+ of the Software.
+
+ 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 FELIX KUEHLING 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.
+
+
+ Copyright 2005 Eric Anholt
+ Copyright © 2007-2008 Intel Corporation
+ Copyright © 2008 Jérôme Glisse
+ 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, sublicense,
+ 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 above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS 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.
+
+
+ Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ Copyright 2001-2003 S3 Graphics, Inc. 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 above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial portions
+ of the Software.
+
+ 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
+ VIA, S3 GRAPHICS, 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.
+
+
+ Copyright © 2009 VMware, Inc., Palo Alto, CA., USA
+ Copyright © 2007-2009 Red Hat Inc.
+ Copyright © 2007 Intel Corporation
+ Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA
+ Copyright © 2008 Dave Airlie
+ Copyright © 2008 Jérôme Glisse
+ Copyright © 2008 Nicolai Haehnle
+ 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 above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial portions
+ of the Software.
+
+ 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.
+
+
+ Copyright (C) 1999 Wittawat Yamwong
+
+ 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, sublicense,
+ 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 above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ WITTAWAT YAMWONG, OR ANY OTHER CONTRIBUTORS 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.
+
+
+ Copyright (c) 2007 Nouveau Project
+
+ 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, sublicense,
+ 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 above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ THE AUTHORS 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.
+
+
+ Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+
+ 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
+ on 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 above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ 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 AUTHOR(S) AND/OR THEIR 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.
--- libdrm-2.4.56.orig/debian/compat
+++ libdrm-2.4.56/debian/compat
@@ -0,0 +1 @@
+9
--- libdrm-2.4.56.orig/debian/watch
+++ libdrm-2.4.56/debian/watch
@@ -0,0 +1,3 @@
+#git=git://anongit.freedesktop.org/mesa/drm
+version=3
+http://dri.freedesktop.org/libdrm/libdrm-(.*)\.tar\.gz
--- libdrm-2.4.56.orig/debian/libdrm-omap1.install
+++ libdrm-2.4.56/debian/libdrm-omap1.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm_omap.so.1*
--- libdrm-2.4.56.orig/debian/libdrm2-udeb.install
+++ libdrm-2.4.56/debian/libdrm2-udeb.install
@@ -0,0 +1 @@
+usr/lib/*/libdrm.so.2*
--- libdrm-2.4.56.orig/debian/libdrm2.symbols
+++ libdrm-2.4.56/debian/libdrm2.symbols
@@ -0,0 +1,150 @@
+libdrm.so.2 libdrm2 #MINVER#
+ drmAddBufs@Base 2.3.1
+ drmAddContextPrivateMapping@Base 2.3.1
+ drmAddContextTag@Base 2.3.1
+ drmAddMap@Base 2.3.1
+ drmAgpAcquire@Base 2.3.1
+ drmAgpAlloc@Base 2.3.1
+ drmAgpBase@Base 2.3.1
+ drmAgpBind@Base 2.3.1
+ drmAgpDeviceId@Base 2.3.1
+ drmAgpEnable@Base 2.3.1
+ drmAgpFree@Base 2.3.1
+ drmAgpGetMode@Base 2.3.1
+ drmAgpMemoryAvail@Base 2.3.1
+ drmAgpMemoryUsed@Base 2.3.1
+ drmAgpRelease@Base 2.3.1
+ drmAgpSize@Base 2.3.1
+ drmAgpUnbind@Base 2.3.1
+ drmAgpVendorId@Base 2.3.1
+ drmAgpVersionMajor@Base 2.3.1
+ drmAgpVersionMinor@Base 2.3.1
+ drmAllocCpy@Base 2.4.3
+ drmAuthMagic@Base 2.3.1
+ drmAvailable@Base 2.3.1
+ drmCheckModesettingSupported@Base 2.4.3
+ drmClose@Base 2.3.1
+ drmCloseOnce@Base 2.3.1
+ drmCommandNone@Base 2.3.1
+ drmCommandRead@Base 2.3.1
+ drmCommandWrite@Base 2.3.1
+ drmCommandWriteRead@Base 2.3.1
+ drmCreateContext@Base 2.3.1
+ drmCreateDrawable@Base 2.3.1
+ drmCtlInstHandler@Base 2.3.1
+ drmCtlUninstHandler@Base 2.3.1
+ drmDMA@Base 2.3.1
+ drmDelContextTag@Base 2.3.1
+ drmDestroyContext@Base 2.3.1
+ drmDestroyDrawable@Base 2.3.1
+ drmDropMaster@Base 2.4.3
+ drmError@Base 2.3.1
+ drmFinish@Base 2.3.1
+ drmFree@Base 2.3.1
+ drmFreeBufs@Base 2.3.1
+ drmFreeBusid@Base 2.3.1
+ drmFreeReservedContextList@Base 2.3.1
+ drmFreeVersion@Base 2.3.1
+ drmGetBufInfo@Base 2.3.1
+ drmGetBusid@Base 2.3.1
+ drmGetCap@Base 2.4.25
+ drmGetClient@Base 2.3.1
+ drmGetContextFlags@Base 2.3.1
+ drmGetContextPrivateMapping@Base 2.3.1
+ drmGetContextTag@Base 2.3.1
+ drmGetDeviceNameFromFd@Base 2.4.16
+ drmGetEntry@Base 2.3.1
+ drmGetHashTable@Base 2.3.1
+ drmGetInterruptFromBusID@Base 2.3.1
+ drmGetLibVersion@Base 2.3.1
+ drmGetLock@Base 2.3.1
+ drmGetMagic@Base 2.3.1
+ drmGetMap@Base 2.3.1
+ drmGetReservedContextList@Base 2.3.1
+ drmGetStats@Base 2.3.1
+ drmGetVersion@Base 2.3.1
+ drmHandleEvent@Base 2.4.16
+ drmHashCreate@Base 2.3.1
+ drmHashDelete@Base 2.3.1
+ drmHashDestroy@Base 2.3.1
+ drmHashFirst@Base 2.3.1
+ drmHashInsert@Base 2.3.1
+ drmHashLookup@Base 2.3.1
+ drmHashNext@Base 2.3.1
+ drmIoctl@Base 2.4.3
+ drmMalloc@Base 2.3.1
+ drmMap@Base 2.3.1
+ drmMapBufs@Base 2.3.1
+ drmMarkBufs@Base 2.3.1
+ drmModeAddFB2@Base 2.4.30
+ drmModeAddFB@Base 2.4.3
+ drmModeAttachMode@Base 2.4.3
+ drmModeConnectorSetProperty@Base 2.4.3
+ drmModeCrtcGetGamma@Base 2.4.3
+ drmModeCrtcSetGamma@Base 2.4.3
+ drmModeDetachMode@Base 2.4.3
+ drmModeDirtyFB@Base 2.4.17
+ drmModeFreeConnector@Base 2.4.3
+ drmModeFreeCrtc@Base 2.4.3
+ drmModeFreeEncoder@Base 2.4.3
+ drmModeFreeFB@Base 2.4.3
+ drmModeFreeModeInfo@Base 2.4.3
+ drmModeFreeObjectProperties@Base 2.4.36
+ drmModeFreePlane@Base 2.4.30
+ drmModeFreePlaneResources@Base 2.4.31
+ drmModeFreeProperty@Base 2.4.3
+ drmModeFreePropertyBlob@Base 2.4.3
+ drmModeFreeResources@Base 2.4.3
+ drmModeGetConnector@Base 2.4.3
+ drmModeGetCrtc@Base 2.4.3
+ drmModeGetEncoder@Base 2.4.3
+ drmModeGetFB@Base 2.4.3
+ drmModeGetPlane@Base 2.4.30
+ drmModeGetPlaneResources@Base 2.4.30
+ drmModeGetProperty@Base 2.4.3
+ drmModeGetPropertyBlob@Base 2.4.3
+ drmModeGetResources@Base 2.4.3
+ drmModeMoveCursor@Base 2.4.3
+ drmModeObjectGetProperties@Base 2.4.36
+ drmModeObjectSetProperty@Base 2.4.36
+ drmModePageFlip@Base 2.4.17
+ drmModeRmFB@Base 2.4.3
+ drmModeSetCrtc@Base 2.4.3
+ drmModeSetCursor2@Base 2.4.46
+ drmModeSetCursor@Base 2.4.3
+ drmModeSetPlane@Base 2.4.30
+ drmMsg@Base 2.4.1
+ drmOpen@Base 2.3.1
+ drmOpenControl@Base 2.4.3
+ drmOpenOnce@Base 2.3.1
+ drmPrimeFDToHandle@Base 2.4.38
+ drmPrimeHandleToFD@Base 2.4.38
+ drmRandom@Base 2.3.1
+ drmRandomCreate@Base 2.3.1
+ drmRandomDestroy@Base 2.3.1
+ drmRandomDouble@Base 2.3.1
+ drmRmMap@Base 2.3.1
+ drmSLCreate@Base 2.3.1
+ drmSLDelete@Base 2.3.1
+ drmSLDestroy@Base 2.3.1
+ drmSLDump@Base 2.3.1
+ drmSLFirst@Base 2.3.1
+ drmSLInsert@Base 2.3.1
+ drmSLLookup@Base 2.3.1
+ drmSLLookupNeighbors@Base 2.3.1
+ drmSLNext@Base 2.3.1
+ drmScatterGatherAlloc@Base 2.3.1
+ drmScatterGatherFree@Base 2.3.1
+ drmSetBusid@Base 2.3.1
+ drmSetClientCap@Base 2.4.47
+ drmSetContextFlags@Base 2.3.1
+ drmSetDebugMsgFunction@Base 2.3.1
+ drmSetInterfaceVersion@Base 2.3.1
+ drmSetMaster@Base 2.4.3
+ drmSetServerInfo@Base 2.3.1
+ drmSwitchToContext@Base 2.3.1
+ drmUnlock@Base 2.3.1
+ drmUnmap@Base 2.3.1
+ drmUnmapBufs@Base 2.3.1
+ drmUpdateDrawableInfo@Base 2.3.1
+ drmWaitVBlank@Base 2.3.1
--- libdrm-2.4.56.orig/debian/libdrm-nouveau2.lintian-overrides
+++ libdrm-2.4.56/debian/libdrm-nouveau2.lintian-overrides
@@ -0,0 +1 @@
+libdrm-nouveau2: symbols-declares-dependency-on-other-package libdrm-nouveau-private
--- libdrm-2.4.56.orig/debian/libdrm-freedreno1.symbols
+++ libdrm-2.4.56/debian/libdrm-freedreno1.symbols
@@ -0,0 +1,34 @@
+libdrm_freedreno.so.1 libdrm-freedreno1 #MINVER#
+ fd_bo_cpu_fini@Base 0
+ fd_bo_cpu_prep@Base 0
+ fd_bo_del@Base 0
+ fd_bo_from_fbdev@Base 0
+ fd_bo_from_handle@Base 0
+ fd_bo_from_name@Base 0
+ fd_bo_get_name@Base 0
+ fd_bo_handle@Base 0
+ fd_bo_map@Base 0
+ fd_bo_new@Base 0
+ fd_bo_ref@Base 0
+ fd_bo_size@Base 0
+ fd_device_del@Base 0
+ fd_device_new@Base 0
+ fd_device_new_dup@Base 0
+ fd_device_ref@Base 0
+ fd_pipe_del@Base 0
+ fd_pipe_get_param@Base 0
+ fd_pipe_new@Base 0
+ fd_pipe_wait@Base 0
+ fd_ringbuffer_del@Base 0
+ fd_ringbuffer_emit_reloc_ring@Base 0
+ fd_ringbuffer_flush@Base 0
+ fd_ringbuffer_new@Base 0
+ fd_ringbuffer_reloc@Base 0
+ fd_ringbuffer_reset@Base 0
+ fd_ringbuffer_set_parent@Base 0
+ fd_ringbuffer_timestamp@Base 0
+ fd_ringmarker_del@Base 0
+ fd_ringmarker_dwords@Base 0
+ fd_ringmarker_flush@Base 0
+ fd_ringmarker_mark@Base 0
+ fd_ringmarker_new@Base 0
--- libdrm-2.4.56.orig/debian/libdrm2.NEWS
+++ libdrm-2.4.56/debian/libdrm2.NEWS
@@ -0,0 +1,8 @@
+libdrm (2.3.0-4) experimental; urgency=low
+
+  * We are now shipping libdrm with the default permissions set to 666,
+    rather than the upstream default of 660. If you have untrusted users,
+    you should configure the X server to explicitly use a mode of 660 in
+    the xorg.conf.
+
+ -- David Nusinow <dnusinow@debian.org>  Wed, 18 Apr 2007 22:44:21 -0400
--- libdrm-2.4.56.orig/debian/libdrm-omap1.symbols
+++ libdrm-2.4.56/debian/libdrm-omap1.symbols
@@ -0,0 +1,19 @@
+libdrm_omap.so.1 libdrm-omap1 #MINVER#
+ omap_bo_cpu_fini@Base 2.4.33
+ omap_bo_cpu_prep@Base 2.4.33
+ omap_bo_del@Base 2.4.33
+ omap_bo_dmabuf@Base 2.4.34
+ omap_bo_from_dmabuf@Base 2.4.38
+ omap_bo_from_name@Base 2.4.33
+ omap_bo_get_name@Base 2.4.33
+ omap_bo_handle@Base 2.4.33
+ omap_bo_map@Base 2.4.33
+ omap_bo_new@Base 2.4.33
+ omap_bo_new_tiled@Base 2.4.33
+ omap_bo_ref@Base 2.4.38
+ omap_bo_size@Base 2.4.33
+ omap_device_del@Base 2.4.33
+ omap_device_new@Base 2.4.33
+ omap_device_ref@Base 2.4.38
+ omap_get_param@Base 2.4.33
+ omap_set_param@Base 2.4.33
--- libdrm-2.4.56.orig/debian/patches/series
+++ libdrm-2.4.56/debian/patches/series
@@ -0,0 +1,2 @@
+01_default_perms.diff
+03_hide_symbols.diff
\ No newline at end of file
--- libdrm-2.4.56.orig/debian/patches/03_hide_symbols.diff
+++ libdrm-2.4.56/debian/patches/03_hide_symbols.diff
@@ -0,0 +1,2389 @@
+diff --git a/Makefile.am b/Makefile.am
+index 826c30d..65680da 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -69,6 +69,7 @@ libdrm_la_SOURCES =				\
+ 	xf86drmSL.c				\
+ 	xf86drmMode.c				\
+ 	xf86atomic.h				\
++	libdrm.h				\
+ 	libdrm_lists.h
+ 
+ libdrmincludedir = ${includedir}
+diff --git a/configure.ac b/configure.ac
+index 5e9cb6c..bb0559a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
+ 	    [kernel_source="$with_kernel_source"])
+ AC_SUBST(kernel_source)
+ 
++dnl Add flags for gcc and g++
++if test "x$GCC" = xyes; then
++    # Enable -fvisibility=hidden if using a gcc that supports it
++    save_CFLAGS="$CFLAGS"
++    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
++    VISIBILITY_CFLAGS="-fvisibility=hidden"
++    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
++    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
++                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
++
++    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
++    CFLAGS=$save_CFLAGS
++
++    if test "x$VISIBILITY_CFLAGS" != x; then
++        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
++    fi
++
++    AC_SUBST([VISIBILITY_CFLAGS])
++fi
++
+ AC_SUBST(WARN_CFLAGS)
+ AC_CONFIG_FILES([
+ 	Makefile
+diff --git a/exynos/Makefile.am b/exynos/Makefile.am
+index 0a2663a..06bee00 100644
+--- a/exynos/Makefile.am
++++ b/exynos/Makefile.am
+@@ -1,5 +1,6 @@
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/exynos \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/exynos/exynos_drm.c b/exynos/exynos_drm.c
+index 5fff259..4c7dd13 100644
+--- a/exynos/exynos_drm.c
++++ b/exynos/exynos_drm.c
+@@ -38,6 +38,7 @@
+ 
+ #include <xf86drm.h>
+ 
++#include "libdrm.h"
+ #include "exynos_drm.h"
+ #include "exynos_drmif.h"
+ 
+@@ -48,7 +49,7 @@
+  *
+  * if true, return the device object else NULL.
+  */
+-struct exynos_device * exynos_device_create(int fd)
++drm_public struct exynos_device * exynos_device_create(int fd)
+ {
+ 	struct exynos_device *dev;
+ 
+@@ -69,7 +70,7 @@ struct exynos_device * exynos_device_create(int fd)
+  *
+  * @dev: exynos drm device object.
+  */
+-void exynos_device_destroy(struct exynos_device *dev)
++drm_public void exynos_device_destroy(struct exynos_device *dev)
+ {
+ 	free(dev);
+ }
+@@ -87,8 +88,8 @@ void exynos_device_destroy(struct exynos_device *dev)
+  *
+  * if true, return a exynos buffer object else NULL.
+  */
+-struct exynos_bo * exynos_bo_create(struct exynos_device *dev,
+-						size_t size, uint32_t flags)
++drm_public struct exynos_bo * exynos_bo_create(struct exynos_device *dev,
++					       size_t size, uint32_t flags)
+ {
+ 	struct exynos_bo *bo;
+ 	struct drm_exynos_gem_create req = {
+@@ -141,8 +142,8 @@ fail:
+  *
+  * if true, return 0 else negative.
+  */
+-int exynos_bo_get_info(struct exynos_device *dev, uint32_t handle,
+-			size_t *size, uint32_t *flags)
++drm_public int exynos_bo_get_info(struct exynos_device *dev, uint32_t handle,
++				  size_t *size, uint32_t *flags)
+ {
+ 	int ret;
+ 	struct drm_exynos_gem_info req = {
+@@ -167,7 +168,7 @@ int exynos_bo_get_info(struct exynos_device *dev, uint32_t handle,
+  *
+  * @bo: a exynos buffer object to be destroyed.
+  */
+-void exynos_bo_destroy(struct exynos_bo *bo)
++drm_public void exynos_bo_destroy(struct exynos_bo *bo)
+ {
+ 	if (!bo)
+ 		return;
+@@ -199,7 +200,8 @@ void exynos_bo_destroy(struct exynos_bo *bo)
+  * if true, return a exynos buffer object else NULL.
+  *
+  */
+-struct exynos_bo * exynos_bo_from_name(struct exynos_device *dev, uint32_t name)
++drm_public struct exynos_bo *
++exynos_bo_from_name(struct exynos_device *dev, uint32_t name)
+ {
+ 	struct exynos_bo *bo;
+ 	struct drm_gem_open req = {
+@@ -241,7 +243,7 @@ err_free_bo:
+  *
+  * if true, return 0 else negative.
+  */
+-int exynos_bo_get_name(struct exynos_bo *bo, uint32_t *name)
++drm_public int exynos_bo_get_name(struct exynos_bo *bo, uint32_t *name)
+ {
+ 	if (!bo->name) {
+ 		struct drm_gem_flink req = {
+@@ -264,7 +266,7 @@ int exynos_bo_get_name(struct exynos_bo *bo, uint32_t *name)
+ 	return 0;
+ }
+ 
+-uint32_t exynos_bo_handle(struct exynos_bo *bo)
++drm_public uint32_t exynos_bo_handle(struct exynos_bo *bo)
+ {
+ 	return bo->handle;
+ }
+@@ -277,7 +279,7 @@ uint32_t exynos_bo_handle(struct exynos_bo *bo)
+  *
+  * if true, user pointer mmaped else NULL.
+  */
+-void *exynos_bo_map(struct exynos_bo *bo)
++drm_public void *exynos_bo_map(struct exynos_bo *bo)
+ {
+ 	if (!bo->vaddr) {
+ 		struct exynos_device *dev = bo->dev;
+@@ -309,8 +311,8 @@ void *exynos_bo_map(struct exynos_bo *bo)
+  *
+  * @return: 0 on success, -1 on error, and errno will be set
+  */
+-int exynos_prime_handle_to_fd(struct exynos_device *dev, uint32_t handle,
+-					int *fd)
++drm_public int
++exynos_prime_handle_to_fd(struct exynos_device *dev, uint32_t handle, int *fd)
+ {
+ 	return drmPrimeHandleToFD(dev->fd, handle, 0, fd);
+ }
+@@ -324,8 +326,8 @@ int exynos_prime_handle_to_fd(struct exynos_device *dev, uint32_t handle,
+  *
+  * @return: 0 on success, -1 on error, and errno will be set
+  */
+-int exynos_prime_fd_to_handle(struct exynos_device *dev, int fd,
+-					uint32_t *handle)
++drm_public int
++exynos_prime_fd_to_handle(struct exynos_device *dev, int fd, uint32_t *handle)
+ {
+ 	return drmPrimeFDToHandle(dev->fd, fd, handle);
+ }
+@@ -347,8 +349,9 @@ int exynos_prime_fd_to_handle(struct exynos_device *dev, int fd,
+  *
+  * if true, return 0 else negative.
+  */
+-int exynos_vidi_connection(struct exynos_device *dev, uint32_t connect,
+-				uint32_t ext, void *edid)
++drm_public int
++exynos_vidi_connection(struct exynos_device *dev, uint32_t connect,
++		       uint32_t ext, void *edid)
+ {
+ 	struct drm_exynos_vidi_connection req = {
+ 		.connection	= connect,
+diff --git a/exynos/exynos_fimg2d.c b/exynos/exynos_fimg2d.c
+index fc281b6..ce1ba1e 100644
+--- a/exynos/exynos_fimg2d.c
++++ b/exynos/exynos_fimg2d.c
+@@ -24,6 +24,7 @@
+ 
+ #include <xf86drm.h>
+ 
++#include "libdrm.h"
+ #include "exynos_drm.h"
+ #include "fimg2d_reg.h"
+ #include "fimg2d.h"
+@@ -184,7 +185,7 @@ static int g2d_flush(struct g2d_context *ctx)
+  *
+  * fd: a file descriptor to drm device driver opened.
+  */
+-struct g2d_context *g2d_init(int fd)
++drm_public struct g2d_context *g2d_init(int fd)
+ {
+ 	struct drm_exynos_g2d_get_ver ver;
+ 	struct g2d_context *ctx;
+@@ -212,7 +213,7 @@ struct g2d_context *g2d_init(int fd)
+ 	return ctx;
+ }
+ 
+-void g2d_fini(struct g2d_context *ctx)
++drm_public void g2d_fini(struct g2d_context *ctx)
+ {
+ 	if (ctx)
+ 		free(ctx);
+@@ -223,7 +224,7 @@ void g2d_fini(struct g2d_context *ctx)
+  *
+  * @ctx: a pointer to g2d_context structure.
+  */
+-int g2d_exec(struct g2d_context *ctx)
++drm_public int g2d_exec(struct g2d_context *ctx)
+ {
+ 	struct drm_exynos_g2d_exec exec;
+ 	int ret;
+@@ -255,7 +256,8 @@ int g2d_exec(struct g2d_context *ctx)
+  * @w: width value to buffer filled with given color data.
+  * @h: height value to buffer filled with given color data.
+  */
+-int g2d_solid_fill(struct g2d_context *ctx, struct g2d_image *img,
++drm_public int
++g2d_solid_fill(struct g2d_context *ctx, struct g2d_image *img,
+ 			unsigned int x, unsigned int y, unsigned int w,
+ 			unsigned int h)
+ {
+@@ -315,7 +317,8 @@ int g2d_solid_fill(struct g2d_context *ctx, struct g2d_image *img,
+  * @w: width value to source and destination buffers.
+  * @h: height value to source and destination buffers.
+  */
+-int g2d_copy(struct g2d_context *ctx, struct g2d_image *src,
++drm_public int
++g2d_copy(struct g2d_context *ctx, struct g2d_image *src,
+ 		struct g2d_image *dst, unsigned int src_x, unsigned int src_y,
+ 		unsigned int dst_x, unsigned dst_y, unsigned int w,
+ 		unsigned int h)
+@@ -414,7 +417,8 @@ int g2d_copy(struct g2d_context *ctx, struct g2d_image *src,
+  * @negative: indicate that it uses color negative to source and
+  *	destination buffers.
+  */
+-int g2d_copy_with_scale(struct g2d_context *ctx, struct g2d_image *src,
++drm_public int
++g2d_copy_with_scale(struct g2d_context *ctx, struct g2d_image *src,
+ 				struct g2d_image *dst, unsigned int src_x,
+ 				unsigned int src_y, unsigned int src_w,
+ 				unsigned int src_h, unsigned int dst_x,
+@@ -526,7 +530,8 @@ int g2d_copy_with_scale(struct g2d_context *ctx, struct g2d_image *src,
+  * @h: height value to source and destination buffer.
+  * @op: blend operation type.
+  */
+-int g2d_blend(struct g2d_context *ctx, struct g2d_image *src,
++drm_public int
++g2d_blend(struct g2d_context *ctx, struct g2d_image *src,
+ 		struct g2d_image *dst, unsigned int src_x,
+ 		unsigned int src_y, unsigned int dst_x, unsigned int dst_y,
+ 		unsigned int w, unsigned int h, enum e_g2d_op op)
+diff --git a/freedreno/Makefile.am b/freedreno/Makefile.am
+index 7903e5b..49471e9 100644
+--- a/freedreno/Makefile.am
++++ b/freedreno/Makefile.am
+@@ -2,6 +2,7 @@ AUTOMAKE_OPTIONS=subdir-objects
+ 
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/freedreno \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/freedreno/freedreno_bo.c b/freedreno/freedreno_bo.c
+index 8cea4de..3a2e464 100644
+--- a/freedreno/freedreno_bo.c
++++ b/freedreno/freedreno_bo.c
+@@ -163,8 +163,8 @@ static struct fd_bo *find_in_bucket(struct fd_device *dev,
+ }
+ 
+ 
+-struct fd_bo * fd_bo_new(struct fd_device *dev,
+-		uint32_t size, uint32_t flags)
++drm_public struct fd_bo *
++fd_bo_new(struct fd_device *dev, uint32_t size, uint32_t flags)
+ {
+ 	struct fd_bo *bo = NULL;
+ 	struct fd_bo_bucket *bucket;
+@@ -197,8 +197,8 @@ struct fd_bo * fd_bo_new(struct fd_device *dev,
+ 	return bo;
+ }
+ 
+-struct fd_bo *fd_bo_from_handle(struct fd_device *dev,
+-		uint32_t handle, uint32_t size)
++drm_public struct fd_bo *
++fd_bo_from_handle(struct fd_device *dev, uint32_t handle, uint32_t size)
+ {
+ 	struct fd_bo *bo = NULL;
+ 
+@@ -209,7 +209,7 @@ struct fd_bo *fd_bo_from_handle(struct fd_device *dev,
+ 	return bo;
+ }
+ 
+-struct fd_bo * fd_bo_from_name(struct fd_device *dev, uint32_t name)
++drm_public struct fd_bo * fd_bo_from_name(struct fd_device *dev, uint32_t name)
+ {
+ 	struct drm_gem_open req = {
+ 			.name = name,
+@@ -242,13 +242,13 @@ out_unlock:
+ 	return bo;
+ }
+ 
+-struct fd_bo * fd_bo_ref(struct fd_bo *bo)
++drm_public struct fd_bo * fd_bo_ref(struct fd_bo *bo)
+ {
+ 	atomic_inc(&bo->refcnt);
+ 	return bo;
+ }
+ 
+-void fd_bo_del(struct fd_bo *bo)
++drm_public void fd_bo_del(struct fd_bo *bo)
+ {
+ 	struct fd_device *dev = bo->dev;
+ 
+@@ -307,7 +307,7 @@ static void bo_del(struct fd_bo *bo)
+ 	bo->funcs->destroy(bo);
+ }
+ 
+-int fd_bo_get_name(struct fd_bo *bo, uint32_t *name)
++drm_public int fd_bo_get_name(struct fd_bo *bo, uint32_t *name)
+ {
+ 	if (!bo->name) {
+ 		struct drm_gem_flink req = {
+@@ -330,17 +330,17 @@ int fd_bo_get_name(struct fd_bo *bo, uint32_t *name)
+ 	return 0;
+ }
+ 
+-uint32_t fd_bo_handle(struct fd_bo *bo)
++drm_public uint32_t fd_bo_handle(struct fd_bo *bo)
+ {
+ 	return bo->handle;
+ }
+ 
+-uint32_t fd_bo_size(struct fd_bo *bo)
++drm_public uint32_t fd_bo_size(struct fd_bo *bo)
+ {
+ 	return bo->size;
+ }
+ 
+-void * fd_bo_map(struct fd_bo *bo)
++drm_public void * fd_bo_map(struct fd_bo *bo)
+ {
+ 	if (!bo->map) {
+ 		uint64_t offset;
+@@ -362,12 +362,12 @@ void * fd_bo_map(struct fd_bo *bo)
+ }
+ 
+ /* a bit odd to take the pipe as an arg, but it's a, umm, quirk of kgsl.. */
+-int fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op)
++drm_public int fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op)
+ {
+ 	return bo->funcs->cpu_prep(bo, pipe, op);
+ }
+ 
+-void fd_bo_cpu_fini(struct fd_bo *bo)
++drm_public void fd_bo_cpu_fini(struct fd_bo *bo)
+ {
+ 	bo->funcs->cpu_fini(bo);
+ }
+diff --git a/freedreno/freedreno_device.c b/freedreno/freedreno_device.c
+index c34963c..2d3aa33 100644
+--- a/freedreno/freedreno_device.c
++++ b/freedreno/freedreno_device.c
+@@ -76,7 +76,7 @@ init_cache_buckets(struct fd_device *dev)
+ 	}
+ }
+ 
+-struct fd_device * fd_device_new(int fd)
++drm_public struct fd_device * fd_device_new(int fd)
+ {
+ 	struct fd_device *dev;
+ 	drmVersionPtr version;
+@@ -115,7 +115,7 @@ struct fd_device * fd_device_new(int fd)
+ /* like fd_device_new() but creates it's own private dup() of the fd
+  * which is close()d when the device is finalized.
+  */
+-struct fd_device * fd_device_new_dup(int fd)
++drm_public struct fd_device * fd_device_new_dup(int fd)
+ {
+ 	struct fd_device *dev = fd_device_new(dup(fd));
+ 	if (dev)
+@@ -123,7 +123,7 @@ struct fd_device * fd_device_new_dup(int fd)
+ 	return dev;
+ }
+ 
+-struct fd_device * fd_device_ref(struct fd_device *dev)
++drm_public struct fd_device * fd_device_ref(struct fd_device *dev)
+ {
+ 	atomic_inc(&dev->refcnt);
+ 	return dev;
+@@ -146,7 +146,7 @@ void fd_device_del_locked(struct fd_device *dev)
+ 	fd_device_del_impl(dev);
+ }
+ 
+-void fd_device_del(struct fd_device *dev)
++drm_public void fd_device_del(struct fd_device *dev)
+ {
+ 	if (!atomic_dec_and_test(&dev->refcnt))
+ 		return;
+diff --git a/freedreno/freedreno_pipe.c b/freedreno/freedreno_pipe.c
+index 805bf00..f55aaa4 100644
+--- a/freedreno/freedreno_pipe.c
++++ b/freedreno/freedreno_pipe.c
+@@ -29,7 +29,8 @@
+ #include "freedreno_drmif.h"
+ #include "freedreno_priv.h"
+ 
+-struct fd_pipe * fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
++drm_public struct fd_pipe *
++fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
+ {
+ 	struct fd_pipe *pipe = NULL;
+ 
+@@ -54,18 +55,18 @@ fail:
+ 	return NULL;
+ }
+ 
+-void fd_pipe_del(struct fd_pipe *pipe)
++drm_public void fd_pipe_del(struct fd_pipe *pipe)
+ {
+ 	pipe->funcs->destroy(pipe);
+ }
+ 
+-int fd_pipe_get_param(struct fd_pipe *pipe, enum fd_param_id param,
+-		uint64_t *value)
++drm_public int fd_pipe_get_param(struct fd_pipe *pipe,
++				 enum fd_param_id param, uint64_t *value)
+ {
+ 	return pipe->funcs->get_param(pipe, param, value);
+ }
+ 
+-int fd_pipe_wait(struct fd_pipe *pipe, uint32_t timestamp)
++drm_public int fd_pipe_wait(struct fd_pipe *pipe, uint32_t timestamp)
+ {
+ 	return pipe->funcs->wait(pipe, timestamp);
+ }
+diff --git a/freedreno/freedreno_priv.h b/freedreno/freedreno_priv.h
+index 7438485..6bd1dec 100644
+--- a/freedreno/freedreno_priv.h
++++ b/freedreno/freedreno_priv.h
+@@ -29,6 +29,10 @@
+ #ifndef FREEDRENO_PRIV_H_
+ #define FREEDRENO_PRIV_H_
+ 
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -41,6 +45,7 @@
+ #include <stdio.h>
+ #include <assert.h>
+ 
++#include "libdrm.h"
+ #include "xf86drm.h"
+ #include "xf86atomic.h"
+ 
+diff --git a/freedreno/freedreno_ringbuffer.c b/freedreno/freedreno_ringbuffer.c
+index b9849c5..def869f 100644
+--- a/freedreno/freedreno_ringbuffer.c
++++ b/freedreno/freedreno_ringbuffer.c
+@@ -32,8 +32,8 @@
+ #include "freedreno_priv.h"
+ #include "freedreno_ringbuffer.h"
+ 
+-struct fd_ringbuffer * fd_ringbuffer_new(struct fd_pipe *pipe,
+-		uint32_t size)
++drm_public struct fd_ringbuffer *
++fd_ringbuffer_new(struct fd_pipe *pipe, uint32_t size)
+ {
+ 	struct fd_ringbuffer *ring;
+ 
+@@ -51,7 +51,7 @@ struct fd_ringbuffer * fd_ringbuffer_new(struct fd_pipe *pipe,
+ 	return ring;
+ }
+ 
+-void fd_ringbuffer_del(struct fd_ringbuffer *ring)
++drm_public void fd_ringbuffer_del(struct fd_ringbuffer *ring)
+ {
+ 	ring->funcs->destroy(ring);
+ }
+@@ -60,13 +60,13 @@ void fd_ringbuffer_del(struct fd_ringbuffer *ring)
+  * the IB source) as it's parent before emitting reloc's, to ensure
+  * the bookkeeping works out properly.
+  */
+-void fd_ringbuffer_set_parent(struct fd_ringbuffer *ring,
+-		struct fd_ringbuffer *parent)
++drm_public void fd_ringbuffer_set_parent(struct fd_ringbuffer *ring,
++					 struct fd_ringbuffer *parent)
+ {
+ 	ring->parent = parent;
+ }
+ 
+-void fd_ringbuffer_reset(struct fd_ringbuffer *ring)
++drm_public void fd_ringbuffer_reset(struct fd_ringbuffer *ring)
+ {
+ 	uint32_t *start = ring->start;
+ 	if (ring->pipe->id == FD_PIPE_2D)
+@@ -77,30 +77,32 @@ void fd_ringbuffer_reset(struct fd_ringbuffer *ring)
+ }
+ 
+ /* maybe get rid of this and use fd_ringmarker_flush() from DDX too? */
+-int fd_ringbuffer_flush(struct fd_ringbuffer *ring)
++drm_public int fd_ringbuffer_flush(struct fd_ringbuffer *ring)
+ {
+ 	return ring->funcs->flush(ring, ring->last_start);
+ }
+ 
+-uint32_t fd_ringbuffer_timestamp(struct fd_ringbuffer *ring)
++drm_public uint32_t fd_ringbuffer_timestamp(struct fd_ringbuffer *ring)
+ {
+ 	return ring->last_timestamp;
+ }
+ 
+-void fd_ringbuffer_reloc(struct fd_ringbuffer *ring,
+-		const struct fd_reloc *reloc)
++drm_public void fd_ringbuffer_reloc(struct fd_ringbuffer *ring,
++				    const struct fd_reloc *reloc)
+ {
+ 	ring->funcs->emit_reloc(ring, reloc);
+ }
+ 
+-void fd_ringbuffer_emit_reloc_ring(struct fd_ringbuffer *ring,
+-		struct fd_ringmarker *target, struct fd_ringmarker *end)
++drm_public void
++fd_ringbuffer_emit_reloc_ring(struct fd_ringbuffer *ring,
++			      struct fd_ringmarker *target,
++			      struct fd_ringmarker *end)
+ {
+ 	assert(target->ring == end->ring);
+ 	ring->funcs->emit_reloc_ring(ring, target, end);
+ }
+ 
+-struct fd_ringmarker * fd_ringmarker_new(struct fd_ringbuffer *ring)
++drm_public struct fd_ringmarker * fd_ringmarker_new(struct fd_ringbuffer *ring)
+ {
+ 	struct fd_ringmarker *marker = NULL;
+ 
+@@ -117,23 +119,23 @@ struct fd_ringmarker * fd_ringmarker_new(struct fd_ringbuffer *ring)
+ 	return marker;
+ }
+ 
+-void fd_ringmarker_del(struct fd_ringmarker *marker)
++drm_public void fd_ringmarker_del(struct fd_ringmarker *marker)
+ {
+ 	free(marker);
+ }
+ 
+-void fd_ringmarker_mark(struct fd_ringmarker *marker)
++drm_public void fd_ringmarker_mark(struct fd_ringmarker *marker)
+ {
+ 	marker->cur = marker->ring->cur;
+ }
+ 
+-uint32_t fd_ringmarker_dwords(struct fd_ringmarker *start,
+-		struct fd_ringmarker *end)
++drm_public uint32_t fd_ringmarker_dwords(struct fd_ringmarker *start,
++					 struct fd_ringmarker *end)
+ {
+ 	return end->cur - start->cur;
+ }
+ 
+-int fd_ringmarker_flush(struct fd_ringmarker *marker)
++drm_public int fd_ringmarker_flush(struct fd_ringmarker *marker)
+ {
+ 	struct fd_ringbuffer *ring = marker->ring;
+ 	return ring->funcs->flush(ring, marker->cur);
+diff --git a/freedreno/kgsl/kgsl_bo.c b/freedreno/kgsl/kgsl_bo.c
+index 19a1008..c868097 100644
+--- a/freedreno/kgsl/kgsl_bo.c
++++ b/freedreno/kgsl/kgsl_bo.c
+@@ -171,8 +171,8 @@ struct fd_bo * kgsl_bo_from_handle(struct fd_device *dev,
+ 	return bo;
+ }
+ 
+-struct fd_bo * fd_bo_from_fbdev(struct fd_pipe *pipe,
+-		int fbfd, uint32_t size)
++drm_public struct fd_bo *
++fd_bo_from_fbdev(struct fd_pipe *pipe, int fbfd, uint32_t size)
+ {
+ 	struct fd_bo *bo;
+ 
+diff --git a/intel/Makefile.am b/intel/Makefile.am
+index f49b099..f734b0b 100644
+--- a/intel/Makefile.am
++++ b/intel/Makefile.am
+@@ -24,6 +24,7 @@
+ 
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/intel \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/intel/intel_bufmgr.c b/intel/intel_bufmgr.c
+index 905556f..03dba50 100644
+--- a/intel/intel_bufmgr.c
++++ b/intel/intel_bufmgr.c
+@@ -37,6 +37,7 @@
+ #include <drm.h>
+ #include <i915_drm.h>
+ #include <pciaccess.h>
++#include "libdrm.h"
+ #include "intel_bufmgr.h"
+ #include "intel_bufmgr_priv.h"
+ #include "xf86drm.h"
+@@ -46,21 +47,21 @@
+  * Convenience functions for buffer management methods.
+  */
+ 
+-drm_intel_bo *drm_intel_bo_alloc(drm_intel_bufmgr *bufmgr, const char *name,
+-				 unsigned long size, unsigned int alignment)
++drm_public drm_intel_bo *
++drm_intel_bo_alloc(drm_intel_bufmgr *bufmgr, const char *name,
++		   unsigned long size, unsigned int alignment)
+ {
+ 	return bufmgr->bo_alloc(bufmgr, name, size, alignment);
+ }
+ 
+-drm_intel_bo *drm_intel_bo_alloc_for_render(drm_intel_bufmgr *bufmgr,
+-					    const char *name,
+-					    unsigned long size,
+-					    unsigned int alignment)
++drm_public drm_intel_bo *
++drm_intel_bo_alloc_for_render(drm_intel_bufmgr *bufmgr, const char *name,
++			      unsigned long size, unsigned int alignment)
+ {
+ 	return bufmgr->bo_alloc_for_render(bufmgr, name, size, alignment);
+ }
+ 
+-drm_intel_bo *
++drm_public drm_intel_bo *
+ drm_intel_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name,
+                         int x, int y, int cpp, uint32_t *tiling_mode,
+                         unsigned long *pitch, unsigned long flags)
+@@ -69,12 +70,14 @@ drm_intel_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name,
+ 				      tiling_mode, pitch, flags);
+ }
+ 
+-void drm_intel_bo_reference(drm_intel_bo *bo)
++drm_public void
++drm_intel_bo_reference(drm_intel_bo *bo)
+ {
+ 	bo->bufmgr->bo_reference(bo);
+ }
+ 
+-void drm_intel_bo_unreference(drm_intel_bo *bo)
++drm_public void
++drm_intel_bo_unreference(drm_intel_bo *bo)
+ {
+ 	if (bo == NULL)
+ 		return;
+@@ -82,24 +85,26 @@ void drm_intel_bo_unreference(drm_intel_bo *bo)
+ 	bo->bufmgr->bo_unreference(bo);
+ }
+ 
+-int drm_intel_bo_map(drm_intel_bo *buf, int write_enable)
++drm_public int
++drm_intel_bo_map(drm_intel_bo *buf, int write_enable)
+ {
+ 	return buf->bufmgr->bo_map(buf, write_enable);
+ }
+ 
+-int drm_intel_bo_unmap(drm_intel_bo *buf)
++drm_public int
++drm_intel_bo_unmap(drm_intel_bo *buf)
+ {
+ 	return buf->bufmgr->bo_unmap(buf);
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_subdata(drm_intel_bo *bo, unsigned long offset,
+ 		     unsigned long size, const void *data)
+ {
+ 	return bo->bufmgr->bo_subdata(bo, offset, size, data);
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_get_subdata(drm_intel_bo *bo, unsigned long offset,
+ 			 unsigned long size, void *data)
+ {
+@@ -118,24 +123,26 @@ drm_intel_bo_get_subdata(drm_intel_bo *bo, unsigned long offset,
+ 	return 0;
+ }
+ 
+-void drm_intel_bo_wait_rendering(drm_intel_bo *bo)
++drm_public void
++drm_intel_bo_wait_rendering(drm_intel_bo *bo)
+ {
+ 	bo->bufmgr->bo_wait_rendering(bo);
+ }
+ 
+-void drm_intel_bufmgr_destroy(drm_intel_bufmgr *bufmgr)
++drm_public void
++drm_intel_bufmgr_destroy(drm_intel_bufmgr *bufmgr)
+ {
+ 	bufmgr->destroy(bufmgr);
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_exec(drm_intel_bo *bo, int used,
+ 		  drm_clip_rect_t * cliprects, int num_cliprects, int DR4)
+ {
+ 	return bo->bufmgr->bo_exec(bo, used, cliprects, num_cliprects, DR4);
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_mrb_exec(drm_intel_bo *bo, int used,
+ 		drm_clip_rect_t *cliprects, int num_cliprects, int DR4,
+ 		unsigned int rings)
+@@ -155,17 +162,20 @@ drm_intel_bo_mrb_exec(drm_intel_bo *bo, int used,
+ 	}
+ }
+ 
+-void drm_intel_bufmgr_set_debug(drm_intel_bufmgr *bufmgr, int enable_debug)
++drm_public void
++drm_intel_bufmgr_set_debug(drm_intel_bufmgr *bufmgr, int enable_debug)
+ {
+ 	bufmgr->debug = enable_debug;
+ }
+ 
+-int drm_intel_bufmgr_check_aperture_space(drm_intel_bo ** bo_array, int count)
++drm_public int
++drm_intel_bufmgr_check_aperture_space(drm_intel_bo ** bo_array, int count)
+ {
+ 	return bo_array[0]->bufmgr->check_aperture_space(bo_array, count);
+ }
+ 
+-int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name)
++drm_public int
++drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name)
+ {
+ 	if (bo->bufmgr->bo_flink)
+ 		return bo->bufmgr->bo_flink(bo, name);
+@@ -173,7 +183,7 @@ int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name)
+ 	return -ENODEV;
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_emit_reloc(drm_intel_bo *bo, uint32_t offset,
+ 			drm_intel_bo *target_bo, uint32_t target_offset,
+ 			uint32_t read_domains, uint32_t write_domain)
+@@ -184,7 +194,7 @@ drm_intel_bo_emit_reloc(drm_intel_bo *bo, uint32_t offset,
+ }
+ 
+ /* For fence registers, not GL fences */
+-int
++drm_public int
+ drm_intel_bo_emit_reloc_fence(drm_intel_bo *bo, uint32_t offset,
+ 			      drm_intel_bo *target_bo, uint32_t target_offset,
+ 			      uint32_t read_domains, uint32_t write_domain)
+@@ -195,7 +205,8 @@ drm_intel_bo_emit_reloc_fence(drm_intel_bo *bo, uint32_t offset,
+ }
+ 
+ 
+-int drm_intel_bo_pin(drm_intel_bo *bo, uint32_t alignment)
++drm_public int
++drm_intel_bo_pin(drm_intel_bo *bo, uint32_t alignment)
+ {
+ 	if (bo->bufmgr->bo_pin)
+ 		return bo->bufmgr->bo_pin(bo, alignment);
+@@ -203,7 +214,8 @@ int drm_intel_bo_pin(drm_intel_bo *bo, uint32_t alignment)
+ 	return -ENODEV;
+ }
+ 
+-int drm_intel_bo_unpin(drm_intel_bo *bo)
++drm_public int
++drm_intel_bo_unpin(drm_intel_bo *bo)
+ {
+ 	if (bo->bufmgr->bo_unpin)
+ 		return bo->bufmgr->bo_unpin(bo);
+@@ -211,8 +223,9 @@ int drm_intel_bo_unpin(drm_intel_bo *bo)
+ 	return -ENODEV;
+ }
+ 
+-int drm_intel_bo_set_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
+-			    uint32_t stride)
++drm_public int
++drm_intel_bo_set_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
++			uint32_t stride)
+ {
+ 	if (bo->bufmgr->bo_set_tiling)
+ 		return bo->bufmgr->bo_set_tiling(bo, tiling_mode, stride);
+@@ -221,8 +234,9 @@ int drm_intel_bo_set_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
+ 	return 0;
+ }
+ 
+-int drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
+-			    uint32_t * swizzle_mode)
++drm_public int
++drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
++			uint32_t * swizzle_mode)
+ {
+ 	if (bo->bufmgr->bo_get_tiling)
+ 		return bo->bufmgr->bo_get_tiling(bo, tiling_mode, swizzle_mode);
+@@ -232,40 +246,46 @@ int drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
+ 	return 0;
+ }
+ 
+-int drm_intel_bo_disable_reuse(drm_intel_bo *bo)
++drm_public int
++drm_intel_bo_disable_reuse(drm_intel_bo *bo)
+ {
+ 	if (bo->bufmgr->bo_disable_reuse)
+ 		return bo->bufmgr->bo_disable_reuse(bo);
+ 	return 0;
+ }
+ 
+-int drm_intel_bo_is_reusable(drm_intel_bo *bo)
++drm_public int
++drm_intel_bo_is_reusable(drm_intel_bo *bo)
+ {
+ 	if (bo->bufmgr->bo_is_reusable)
+ 		return bo->bufmgr->bo_is_reusable(bo);
+ 	return 0;
+ }
+ 
+-int drm_intel_bo_busy(drm_intel_bo *bo)
++drm_public int
++drm_intel_bo_busy(drm_intel_bo *bo)
+ {
+ 	if (bo->bufmgr->bo_busy)
+ 		return bo->bufmgr->bo_busy(bo);
+ 	return 0;
+ }
+ 
+-int drm_intel_bo_madvise(drm_intel_bo *bo, int madv)
++drm_public int
++drm_intel_bo_madvise(drm_intel_bo *bo, int madv)
+ {
+ 	if (bo->bufmgr->bo_madvise)
+ 		return bo->bufmgr->bo_madvise(bo, madv);
+ 	return -1;
+ }
+ 
+-int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo)
++drm_public int
++drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo)
+ {
+ 	return bo->bufmgr->bo_references(bo, target_bo);
+ }
+ 
+-int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id)
++drm_public int
++drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id)
+ {
+ 	if (bufmgr->get_pipe_from_crtc_id)
+ 		return bufmgr->get_pipe_from_crtc_id(bufmgr, crtc_id);
+@@ -298,9 +318,8 @@ err:
+ 	return size;
+ }
+ 
+-int drm_intel_get_aperture_sizes(int fd,
+-				 size_t *mappable,
+-				 size_t *total)
++drm_public int
++drm_intel_get_aperture_sizes(int fd, size_t *mappable, size_t *total)
+ {
+ 
+ 	struct drm_i915_gem_get_aperture aperture;
+diff --git a/intel/intel_bufmgr_fake.c b/intel/intel_bufmgr_fake.c
+index d63fc81..c4828fa 100644
+--- a/intel/intel_bufmgr_fake.c
++++ b/intel/intel_bufmgr_fake.c
+@@ -49,6 +49,7 @@
+ #include "drm.h"
+ #include "i915_drm.h"
+ #include "mm.h"
++#include "libdrm.h"
+ #include "libdrm_lists.h"
+ 
+ /* Support gcc's __FUNCTION__ for people using other compilers */
+@@ -248,7 +249,7 @@ FENCE_LTE(unsigned a, unsigned b)
+ 	return 0;
+ }
+ 
+-void
++drm_public void
+ drm_intel_bufmgr_fake_set_fence_callback(drm_intel_bufmgr *bufmgr,
+ 					 unsigned int (*emit) (void *priv),
+ 					 void (*wait) (unsigned int fence,
+@@ -771,7 +772,7 @@ drm_intel_fake_bo_wait_rendering(drm_intel_bo *bo)
+  *  -- just evict everything
+  *  -- and wait for idle
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_fake_contended_lock_take(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_fake *bufmgr_fake = (drm_intel_bufmgr_fake *) bufmgr;
+@@ -867,7 +868,7 @@ drm_intel_fake_bo_alloc_tiled(drm_intel_bufmgr * bufmgr,
+ 				       4096);
+ }
+ 
+-drm_intel_bo *
++drm_public drm_intel_bo *
+ drm_intel_bo_fake_alloc_static(drm_intel_bufmgr *bufmgr,
+ 			       const char *name,
+ 			       unsigned long offset,
+@@ -962,7 +963,7 @@ drm_intel_fake_bo_unreference(drm_intel_bo *bo)
+  * Set the buffer as not requiring backing store, and instead get the callback
+  * invoked whenever it would be set dirty.
+  */
+-void
++drm_public void
+ drm_intel_bo_fake_disable_backing_store(drm_intel_bo *bo,
+ 					void (*invalidate_cb) (drm_intel_bo *bo,
+ 							       void *ptr),
+@@ -1416,7 +1417,7 @@ drm_intel_bo_fake_post_submit(drm_intel_bo *bo)
+ 	bo_fake->write_domain = 0;
+ }
+ 
+-void
++drm_public void
+ drm_intel_bufmgr_fake_set_exec_callback(drm_intel_bufmgr *bufmgr,
+ 					     int (*exec) (drm_intel_bo *bo,
+ 							  unsigned int used,
+@@ -1539,7 +1540,8 @@ drm_intel_fake_check_aperture_space(drm_intel_bo ** bo_array, int count)
+  * Used by the X Server on LeaveVT, when the card memory is no longer our
+  * own.
+  */
+-void drm_intel_bufmgr_fake_evict_all(drm_intel_bufmgr *bufmgr)
++drm_public void
++drm_intel_bufmgr_fake_evict_all(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_fake *bufmgr_fake = (drm_intel_bufmgr_fake *) bufmgr;
+ 	struct block *block, *tmp;
+@@ -1573,21 +1575,20 @@ void drm_intel_bufmgr_fake_evict_all(drm_intel_bufmgr *bufmgr)
+ 	pthread_mutex_unlock(&bufmgr_fake->lock);
+ }
+ 
+-void drm_intel_bufmgr_fake_set_last_dispatch(drm_intel_bufmgr *bufmgr,
+-					     volatile unsigned int
+-					     *last_dispatch)
++drm_public void
++drm_intel_bufmgr_fake_set_last_dispatch(drm_intel_bufmgr *bufmgr,
++					volatile unsigned int
++					*last_dispatch)
+ {
+ 	drm_intel_bufmgr_fake *bufmgr_fake = (drm_intel_bufmgr_fake *) bufmgr;
+ 
+ 	bufmgr_fake->last_dispatch = (volatile int *)last_dispatch;
+ }
+ 
+-drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd,
+-					     unsigned long low_offset,
+-					     void *low_virtual,
+-					     unsigned long size,
+-					     volatile unsigned int
+-					     *last_dispatch)
++drm_public drm_intel_bufmgr *
++drm_intel_bufmgr_fake_init(int fd, unsigned long low_offset,
++			   void *low_virtual, unsigned long size,
++			   volatile unsigned int *last_dispatch)
+ {
+ 	drm_intel_bufmgr_fake *bufmgr_fake;
+ 
+diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
+index 007a6d8..0e1cb0d 100644
+--- a/intel/intel_bufmgr_gem.c
++++ b/intel/intel_bufmgr_gem.c
+@@ -57,6 +57,7 @@
+ #ifndef ETIME
+ #define ETIME ETIMEDOUT
+ #endif
++#include "libdrm.h"
+ #include "libdrm_lists.h"
+ #include "intel_bufmgr.h"
+ #include "intel_bufmgr_priv.h"
+@@ -853,7 +854,7 @@ drm_intel_gem_bo_alloc_tiled(drm_intel_bufmgr *bufmgr, const char *name,
+  * This can be used when one application needs to pass a buffer object
+  * to another.
+  */
+-drm_intel_bo *
++drm_public drm_intel_bo *
+ drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
+ 				  const char *name,
+ 				  unsigned int handle)
+@@ -1294,7 +1295,8 @@ map_gtt(drm_intel_bo *bo)
+ 	return 0;
+ }
+ 
+-int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)
++drm_public int
++drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+ 	drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
+@@ -1352,7 +1354,8 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)
+  * undefined).
+  */
+ 
+-int drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo)
++drm_public int
++drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+ #ifdef HAVE_VALGRIND
+@@ -1435,7 +1438,8 @@ static int drm_intel_gem_bo_unmap(drm_intel_bo *bo)
+ 	return ret;
+ }
+ 
+-int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo)
++drm_public int
++drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo)
+ {
+ 	return drm_intel_gem_bo_unmap(bo);
+ }
+@@ -1550,7 +1554,8 @@ drm_intel_gem_bo_wait_rendering(drm_intel_bo *bo)
+  * handle. Userspace must make sure this race does not occur if such precision
+  * is important.
+  */
+-int drm_intel_gem_bo_wait(drm_intel_bo *bo, int64_t timeout_ns)
++drm_public int
++drm_intel_gem_bo_wait(drm_intel_bo *bo, int64_t timeout_ns)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+ 	drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
+@@ -1585,7 +1590,7 @@ int drm_intel_gem_bo_wait(drm_intel_bo *bo, int64_t timeout_ns)
+  * In combination with drm_intel_gem_bo_pin() and manual fence management, we
+  * can do tiled pixmaps this way.
+  */
+-void
++drm_public void
+ drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+@@ -1745,7 +1750,7 @@ drm_intel_gem_bo_emit_reloc_fence(drm_intel_bo *bo, uint32_t offset,
+ 				read_domains, write_domain, true);
+ }
+ 
+-int
++drm_public int
+ drm_intel_gem_bo_get_reloc_count(drm_intel_bo *bo)
+ {
+ 	drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
+@@ -1766,7 +1771,7 @@ drm_intel_gem_bo_get_reloc_count(drm_intel_bo *bo)
+  * Any further drm_intel_bufmgr_check_aperture_space() queries
+  * involving this buffer in the tree are undefined after this call.
+  */
+-void
++drm_public void
+ drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int start)
+ {
+ 	drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
+@@ -2095,7 +2100,7 @@ aub_build_dump_ringbuffer(drm_intel_bufmgr_gem *bufmgr_gem,
+ 	bufmgr_gem->aub_offset += 4096;
+ }
+ 
+-void
++drm_public void
+ drm_intel_gem_bo_aub_dump_bmp(drm_intel_bo *bo,
+ 			      int x1, int y1, int width, int height,
+ 			      enum aub_dump_bmp_format format,
+@@ -2366,7 +2371,7 @@ drm_intel_gem_bo_mrb_exec2(drm_intel_bo *bo, int used,
+ 			flags);
+ }
+ 
+-int
++drm_public int
+ drm_intel_gem_bo_context_exec(drm_intel_bo *bo, drm_intel_context *ctx,
+ 			      int used, unsigned int flags)
+ {
+@@ -2485,7 +2490,7 @@ drm_intel_gem_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
+ 	return 0;
+ }
+ 
+-drm_intel_bo *
++drm_public drm_intel_bo *
+ drm_intel_bo_gem_create_from_prime(drm_intel_bufmgr *bufmgr, int prime_fd, int size)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bufmgr;
+@@ -2566,7 +2571,7 @@ drm_intel_bo_gem_create_from_prime(drm_intel_bufmgr *bufmgr, int prime_fd, int s
+ 	return &bo_gem->bo;
+ }
+ 
+-int
++drm_public int
+ drm_intel_bo_gem_export_to_prime(drm_intel_bo *bo, int *prime_fd)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
+@@ -2619,7 +2624,7 @@ drm_intel_gem_bo_flink(drm_intel_bo *bo, uint32_t * name)
+  * size is only bounded by how many buffers of that size we've managed to have
+  * in flight at once.
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bufmgr;
+@@ -2634,7 +2639,7 @@ drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr)
+  * allocation.  If this option is not enabled, all relocs will have fence
+  * register allocated.
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+@@ -2906,7 +2911,7 @@ init_cache_buckets(drm_intel_bufmgr_gem *bufmgr_gem)
+ 	}
+ }
+ 
+-void
++drm_public void
+ drm_intel_bufmgr_gem_set_vma_cache_size(drm_intel_bufmgr *bufmgr, int limit)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+@@ -2948,7 +2953,7 @@ get_pci_device_id(drm_intel_bufmgr_gem *bufmgr_gem)
+ 	return devid;
+ }
+ 
+-int
++drm_public int
+ drm_intel_bufmgr_gem_get_devid(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+@@ -2962,7 +2967,7 @@ drm_intel_bufmgr_gem_get_devid(drm_intel_bufmgr *bufmgr)
+  * This function has to be called before drm_intel_bufmgr_gem_set_aub_dump()
+  * for it to have any effect.
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_gem_set_aub_filename(drm_intel_bufmgr *bufmgr,
+ 				      const char *filename)
+ {
+@@ -2981,7 +2986,7 @@ drm_intel_bufmgr_gem_set_aub_filename(drm_intel_bufmgr *bufmgr,
+  * You can set up a GTT and upload your objects into the referenced
+  * space, then send off batchbuffers and get BMPs out the other end.
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_gem_set_aub_dump(drm_intel_bufmgr *bufmgr, int enable)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+@@ -3037,7 +3042,7 @@ drm_intel_bufmgr_gem_set_aub_dump(drm_intel_bufmgr *bufmgr, int enable)
+ 	}
+ }
+ 
+-drm_intel_context *
++drm_public drm_intel_context *
+ drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+@@ -3064,7 +3069,7 @@ drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr)
+ 	return context;
+ }
+ 
+-void
++drm_public void
+ drm_intel_gem_context_destroy(drm_intel_context *ctx)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem;
+@@ -3087,7 +3092,7 @@ drm_intel_gem_context_destroy(drm_intel_context *ctx)
+ 	free(ctx);
+ }
+ 
+-int
++drm_public int
+ drm_intel_get_reset_stats(drm_intel_context *ctx,
+ 			  uint32_t *reset_count,
+ 			  uint32_t *active,
+@@ -3121,7 +3126,7 @@ drm_intel_get_reset_stats(drm_intel_context *ctx,
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ drm_intel_reg_read(drm_intel_bufmgr *bufmgr,
+ 		   uint32_t offset,
+ 		   uint64_t *result)
+@@ -3161,7 +3166,7 @@ drm_intel_reg_read(drm_intel_bufmgr *bufmgr,
+  * default state (no annotations), call this function with a \c count
+  * of zero.
+  */
+-void
++drm_public void
+ drm_intel_bufmgr_gem_set_aub_annotations(drm_intel_bo *bo,
+ 					 drm_intel_aub_annotation *annotations,
+ 					 unsigned count)
+@@ -3187,7 +3192,7 @@ drm_intel_bufmgr_gem_set_aub_annotations(drm_intel_bo *bo,
+  *
+  * \param fd File descriptor of the opened DRM device.
+  */
+-drm_intel_bufmgr *
++drm_public drm_intel_bufmgr *
+ drm_intel_bufmgr_gem_init(int fd, int batch_size)
+ {
+ 	drm_intel_bufmgr_gem *bufmgr_gem;
+diff --git a/intel/intel_decode.c b/intel/intel_decode.c
+index 61239dd..a5d6e04 100644
+--- a/intel/intel_decode.c
++++ b/intel/intel_decode.c
+@@ -21,6 +21,10 @@
+  * IN THE SOFTWARE.
+  */
+ 
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <assert.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+@@ -29,6 +33,7 @@
+ #include <stdarg.h>
+ #include <string.h>
+ 
++#include "libdrm.h"
+ #include "xf86drm.h"
+ #include "intel_chipset.h"
+ #include "intel_bufmgr.h"
+@@ -3812,7 +3817,7 @@ decode_3d_i830(struct drm_intel_decode *ctx)
+ 	return 1;
+ }
+ 
+-struct drm_intel_decode *
++drm_public struct drm_intel_decode *
+ drm_intel_decode_context_alloc(uint32_t devid)
+ {
+ 	struct drm_intel_decode *ctx;
+@@ -3844,20 +3849,20 @@ drm_intel_decode_context_alloc(uint32_t devid)
+ 	return ctx;
+ }
+ 
+-void
++drm_public void
+ drm_intel_decode_context_free(struct drm_intel_decode *ctx)
+ {
+ 	free(ctx);
+ }
+ 
+-void
++drm_public void
+ drm_intel_decode_set_dump_past_end(struct drm_intel_decode *ctx,
+ 				   int dump_past_end)
+ {
+ 	ctx->dump_past_end = !!dump_past_end;
+ }
+ 
+-void
++drm_public void
+ drm_intel_decode_set_batch_pointer(struct drm_intel_decode *ctx,
+ 				   void *data, uint32_t hw_offset, int count)
+ {
+@@ -3866,7 +3871,7 @@ drm_intel_decode_set_batch_pointer(struct drm_intel_decode *ctx,
+ 	ctx->base_count = count;
+ }
+ 
+-void
++drm_public void
+ drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx,
+ 			       uint32_t head, uint32_t tail)
+ {
+@@ -3874,7 +3879,7 @@ drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx,
+ 	ctx->tail = tail;
+ }
+ 
+-void
++drm_public void
+ drm_intel_decode_set_output_file(struct drm_intel_decode *ctx,
+ 				 FILE *out)
+ {
+@@ -3888,7 +3893,7 @@ drm_intel_decode_set_output_file(struct drm_intel_decode *ctx,
+  * \param count number of DWORDs to decode in the batch buffer
+  * \param hw_offset hardware address for the buffer
+  */
+-void
++drm_public void
+ drm_intel_decode(struct drm_intel_decode *ctx)
+ {
+ 	int ret;
+diff --git a/libdrm.h b/libdrm.h
+new file mode 100644
+index 0000000..23926e6
+--- /dev/null
++++ b/libdrm.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright © 2014 NVIDIA Corporation
++ *
++ * 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, sublicense,
++ * 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 above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
++ */
++
++#ifndef LIBDRM_LIBDRM_H
++#define LIBDRM_LIBDRM_H
++
++#if defined(HAVE_VISIBILITY)
++#  define drm_private __attribute__((visibility("hidden")))
++#  define drm_public __attribute__((visibility("default")))
++#else
++#  define drm_private
++#  define drm_public
++#endif
++
++#endif
+diff --git a/nouveau/Makefile.am b/nouveau/Makefile.am
+index 206e892..73cff9f 100644
+--- a/nouveau/Makefile.am
++++ b/nouveau/Makefile.am
+@@ -1,5 +1,6 @@
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/nouveau \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/nouveau/bufctx.c b/nouveau/bufctx.c
+index 23d6f09..fdd3164 100644
+--- a/nouveau/bufctx.c
++++ b/nouveau/bufctx.c
+@@ -68,7 +68,7 @@ nouveau_bufctx(struct nouveau_bufctx *bctx)
+ 	return (struct nouveau_bufctx_priv *)bctx;
+ }
+ 
+-int
++drm_public int
+ nouveau_bufctx_new(struct nouveau_client *client, int bins,
+ 		   struct nouveau_bufctx **pbctx)
+ {
+@@ -88,7 +88,7 @@ nouveau_bufctx_new(struct nouveau_client *client, int bins,
+ 	return -ENOMEM;
+ }
+ 
+-void
++drm_public void
+ nouveau_bufctx_del(struct nouveau_bufctx **pbctx)
+ {
+ 	struct nouveau_bufctx_priv *pctx = nouveau_bufctx(*pbctx);
+@@ -105,7 +105,7 @@ nouveau_bufctx_del(struct nouveau_bufctx **pbctx)
+ 	}
+ }
+ 
+-void
++drm_public void
+ nouveau_bufctx_reset(struct nouveau_bufctx *bctx, int bin)
+ {
+ 	struct nouveau_bufctx_priv *pctx = nouveau_bufctx(bctx);
+@@ -123,7 +123,7 @@ nouveau_bufctx_reset(struct nouveau_bufctx *bctx, int bin)
+ 	pbin->relocs  = 0;
+ }
+ 
+-struct nouveau_bufref *
++drm_public struct nouveau_bufref *
+ nouveau_bufctx_refn(struct nouveau_bufctx *bctx, int bin,
+ 		    struct nouveau_bo *bo, uint32_t flags)
+ {
+@@ -150,7 +150,7 @@ nouveau_bufctx_refn(struct nouveau_bufctx *bctx, int bin,
+ 	return &pref->base;
+ }
+ 
+-struct nouveau_bufref *
++drm_public struct nouveau_bufref *
+ nouveau_bufctx_mthd(struct nouveau_bufctx *bctx, int bin, uint32_t packet,
+ 		    struct nouveau_bo *bo, uint64_t data, uint32_t flags,
+ 		    uint32_t vor, uint32_t tor)
+diff --git a/nouveau/nouveau.c b/nouveau/nouveau.c
+index 1bede84..43f0d3c 100644
+--- a/nouveau/nouveau.c
++++ b/nouveau/nouveau.c
+@@ -62,14 +62,14 @@ debug_init(char *args)
+  * is kept here to prevent AIGLX from crashing if the DDX is linked against
+  * the new libdrm, but the DRI driver against the old
+  */
+-int
++drm_public int
+ nouveau_device_open_existing(struct nouveau_device **pdev, int close, int fd,
+ 			     drm_context_t ctx)
+ {
+ 	return -EACCES;
+ }
+ 
+-int
++drm_public int
+ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
+ {
+ 	struct nouveau_device_priv *nvdev = calloc(1, sizeof(*nvdev));
+@@ -147,7 +147,7 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
+ 	return 0;
+ }
+ 
+-int
++drm_public int
+ nouveau_device_open(const char *busid, struct nouveau_device **pdev)
+ {
+ 	int ret = -ENODEV, fd = drmOpen("nouveau", busid);
+@@ -159,7 +159,7 @@ nouveau_device_open(const char *busid, struct nouveau_device **pdev)
+ 	return ret;
+ }
+ 
+-void
++drm_public void
+ nouveau_device_del(struct nouveau_device **pdev)
+ {
+ 	struct nouveau_device_priv *nvdev = nouveau_device(*pdev);
+@@ -173,7 +173,7 @@ nouveau_device_del(struct nouveau_device **pdev)
+ 	}
+ }
+ 
+-int
++drm_public int
+ nouveau_getparam(struct nouveau_device *dev, uint64_t param, uint64_t *value)
+ {
+ 	struct drm_nouveau_getparam r = { param, 0 };
+@@ -183,14 +183,14 @@ nouveau_getparam(struct nouveau_device *dev, uint64_t param, uint64_t *value)
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_setparam(struct nouveau_device *dev, uint64_t param, uint64_t value)
+ {
+ 	struct drm_nouveau_setparam r = { param, value };
+ 	return drmCommandWrite(dev->fd, DRM_NOUVEAU_SETPARAM, &r, sizeof(r));
+ }
+ 
+-int
++drm_public int
+ nouveau_client_new(struct nouveau_device *dev, struct nouveau_client **pclient)
+ {
+ 	struct nouveau_device_priv *nvdev = nouveau_device(dev);
+@@ -229,7 +229,7 @@ unlock:
+ 	return ret;
+ }
+ 
+-void
++drm_public void
+ nouveau_client_del(struct nouveau_client **pclient)
+ {
+ 	struct nouveau_client_priv *pcli = nouveau_client(*pclient);
+@@ -245,7 +245,7 @@ nouveau_client_del(struct nouveau_client **pclient)
+ 	}
+ }
+ 
+-int
++drm_public int
+ nouveau_object_new(struct nouveau_object *parent, uint64_t handle,
+ 		   uint32_t oclass, void *data, uint32_t length,
+ 		   struct nouveau_object **pobj)
+@@ -307,7 +307,7 @@ nouveau_object_new(struct nouveau_object *parent, uint64_t handle,
+ 	return 0;
+ }
+ 
+-void
++drm_public void
+ nouveau_object_del(struct nouveau_object **pobj)
+ {
+ 	struct nouveau_object *obj = *pobj;
+@@ -331,7 +331,7 @@ nouveau_object_del(struct nouveau_object **pobj)
+ 	*pobj = NULL;
+ }
+ 
+-void *
++drm_public void *
+ nouveau_object_find(struct nouveau_object *obj, uint32_t pclass)
+ {
+ 	while (obj && obj->oclass != pclass) {
+@@ -385,7 +385,7 @@ nouveau_bo_del(struct nouveau_bo *bo)
+ 	free(nvbo);
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_new(struct nouveau_device *dev, uint32_t flags, uint32_t align,
+ 	       uint64_t size, union nouveau_bo_config *config,
+ 	       struct nouveau_bo **pbo)
+@@ -451,7 +451,7 @@ nouveau_bo_wrap_locked(struct nouveau_device *dev, uint32_t handle,
+ 	return -ENOMEM;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_wrap(struct nouveau_device *dev, uint32_t handle,
+ 		struct nouveau_bo **pbo)
+ {
+@@ -463,7 +463,7 @@ nouveau_bo_wrap(struct nouveau_device *dev, uint32_t handle,
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_name_ref(struct nouveau_device *dev, uint32_t name,
+ 		    struct nouveau_bo **pbo)
+ {
+@@ -492,7 +492,7 @@ nouveau_bo_name_ref(struct nouveau_device *dev, uint32_t name,
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_name_get(struct nouveau_bo *bo, uint32_t *name)
+ {
+ 	struct drm_gem_flink req = { .handle = bo->handle };
+@@ -510,7 +510,7 @@ nouveau_bo_name_get(struct nouveau_bo *bo, uint32_t *name)
+ 	return 0;
+ }
+ 
+-void
++drm_public void
+ nouveau_bo_ref(struct nouveau_bo *bo, struct nouveau_bo **pref)
+ {
+ 	struct nouveau_bo *ref = *pref;
+@@ -524,7 +524,7 @@ nouveau_bo_ref(struct nouveau_bo *bo, struct nouveau_bo **pref)
+ 	*pref = bo;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
+ 			    struct nouveau_bo **bo)
+ {
+@@ -553,7 +553,7 @@ nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd)
+ {
+ 	struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
+@@ -567,7 +567,7 @@ nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd)
+ 	return 0;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_wait(struct nouveau_bo *bo, uint32_t access,
+ 		struct nouveau_client *client)
+ {
+@@ -601,7 +601,7 @@ nouveau_bo_wait(struct nouveau_bo *bo, uint32_t access,
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_bo_map(struct nouveau_bo *bo, uint32_t access,
+ 	       struct nouveau_client *client)
+ {
+diff --git a/nouveau/private.h b/nouveau/private.h
+index 4f337ad..bf9db04 100644
+--- a/nouveau/private.h
++++ b/nouveau/private.h
+@@ -1,6 +1,7 @@
+ #ifndef __NOUVEAU_LIBDRM_PRIVATE_H__
+ #define __NOUVEAU_LIBDRM_PRIVATE_H__
+ 
++#include <libdrm.h>
+ #include <xf86drm.h>
+ #include <xf86atomic.h>
+ #include <pthread.h>
+diff --git a/nouveau/pushbuf.c b/nouveau/pushbuf.c
+index 4f77881..6e703a4 100644
+--- a/nouveau/pushbuf.c
++++ b/nouveau/pushbuf.c
+@@ -529,7 +529,7 @@ pushbuf_validate(struct nouveau_pushbuf *push, bool retry)
+ 	return ret;
+ }
+ 
+-int
++drm_public int
+ nouveau_pushbuf_new(struct nouveau_client *client, struct nouveau_object *chan,
+ 		    int nr, uint32_t size, bool immediate,
+ 		    struct nouveau_pushbuf **ppush)
+@@ -600,7 +600,7 @@ nouveau_pushbuf_new(struct nouveau_client *client, struct nouveau_object *chan,
+ 	return 0;
+ }
+ 
+-void
++drm_public void
+ nouveau_pushbuf_del(struct nouveau_pushbuf **ppush)
+ {
+ 	struct nouveau_pushbuf_priv *nvpb = nouveau_pushbuf(*ppush);
+@@ -626,7 +626,7 @@ nouveau_pushbuf_del(struct nouveau_pushbuf **ppush)
+ 	*ppush = NULL;
+ }
+ 
+-struct nouveau_bufctx *
++drm_public struct nouveau_bufctx *
+ nouveau_pushbuf_bufctx(struct nouveau_pushbuf *push, struct nouveau_bufctx *ctx)
+ {
+ 	struct nouveau_bufctx *prev = push->bufctx;
+@@ -634,7 +634,7 @@ nouveau_pushbuf_bufctx(struct nouveau_pushbuf *push, struct nouveau_bufctx *ctx)
+ 	return prev;
+ }
+ 
+-int
++drm_public int
+ nouveau_pushbuf_space(struct nouveau_pushbuf *push,
+ 		      uint32_t dwords, uint32_t relocs, uint32_t pushes)
+ {
+@@ -698,7 +698,7 @@ nouveau_pushbuf_space(struct nouveau_pushbuf *push,
+ 	return flushed ? pushbuf_validate(push, false) : 0;
+ }
+ 
+-void
++drm_public void
+ nouveau_pushbuf_data(struct nouveau_pushbuf *push, struct nouveau_bo *bo,
+ 		     uint64_t offset, uint64_t length)
+ {
+@@ -728,14 +728,14 @@ nouveau_pushbuf_data(struct nouveau_pushbuf *push, struct nouveau_bo *bo,
+ 	}
+ }
+ 
+-int
++drm_public int
+ nouveau_pushbuf_refn(struct nouveau_pushbuf *push,
+ 		     struct nouveau_pushbuf_refn *refs, int nr)
+ {
+ 	return pushbuf_refn(push, true, refs, nr);
+ }
+ 
+-void
++drm_public void
+ nouveau_pushbuf_reloc(struct nouveau_pushbuf *push, struct nouveau_bo *bo,
+ 		      uint32_t data, uint32_t flags, uint32_t vor, uint32_t tor)
+ {
+@@ -743,13 +743,13 @@ nouveau_pushbuf_reloc(struct nouveau_pushbuf *push, struct nouveau_bo *bo,
+ 	push->cur++;
+ }
+ 
+-int
++drm_public int
+ nouveau_pushbuf_validate(struct nouveau_pushbuf *push)
+ {
+ 	return pushbuf_validate(push, true);
+ }
+ 
+-uint32_t
++drm_public uint32_t
+ nouveau_pushbuf_refd(struct nouveau_pushbuf *push, struct nouveau_bo *bo)
+ {
+ 	struct drm_nouveau_gem_pushbuf_bo *kref;
+@@ -766,7 +766,7 @@ nouveau_pushbuf_refd(struct nouveau_pushbuf *push, struct nouveau_bo *bo)
+ 	return flags;
+ }
+ 
+-int
++drm_public int
+ nouveau_pushbuf_kick(struct nouveau_pushbuf *push, struct nouveau_object *chan)
+ {
+ 	if (!push->channel)
+diff --git a/omap/Makefile.am b/omap/Makefile.am
+index c77520b..0778bdd 100644
+--- a/omap/Makefile.am
++++ b/omap/Makefile.am
+@@ -1,5 +1,6 @@
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/omap \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/omap/omap_drm.c b/omap/omap_drm.c
+index 89f1491..8b4ec46 100644
+--- a/omap/omap_drm.c
++++ b/omap/omap_drm.c
+@@ -39,6 +39,7 @@
+ #include <unistd.h>
+ #include <pthread.h>
+ 
++#include <libdrm.h>
+ #include <xf86drm.h>
+ #include <xf86atomic.h>
+ 
+@@ -91,7 +92,7 @@ static struct omap_device * omap_device_new_impl(int fd)
+ 	return dev;
+ }
+ 
+-struct omap_device * omap_device_new(int fd)
++drm_public struct omap_device * omap_device_new(int fd)
+ {
+ 	struct omap_device *dev = NULL;
+ 
+@@ -114,13 +115,13 @@ struct omap_device * omap_device_new(int fd)
+ 	return dev;
+ }
+ 
+-struct omap_device * omap_device_ref(struct omap_device *dev)
++drm_public struct omap_device * omap_device_ref(struct omap_device *dev)
+ {
+ 	atomic_inc(&dev->refcnt);
+ 	return dev;
+ }
+ 
+-void omap_device_del(struct omap_device *dev)
++drm_public void omap_device_del(struct omap_device *dev)
+ {
+ 	if (!atomic_dec_and_test(&dev->refcnt))
+ 		return;
+@@ -131,7 +132,8 @@ void omap_device_del(struct omap_device *dev)
+ 	free(dev);
+ }
+ 
+-int omap_get_param(struct omap_device *dev, uint64_t param, uint64_t *value)
++drm_public int
++omap_get_param(struct omap_device *dev, uint64_t param, uint64_t *value)
+ {
+ 	struct drm_omap_param req = {
+ 			.param = param,
+@@ -148,7 +150,8 @@ int omap_get_param(struct omap_device *dev, uint64_t param, uint64_t *value)
+ 	return 0;
+ }
+ 
+-int omap_set_param(struct omap_device *dev, uint64_t param, uint64_t value)
++drm_public int
++omap_set_param(struct omap_device *dev, uint64_t param, uint64_t value)
+ {
+ 	struct drm_omap_param req = {
+ 			.param = param,
+@@ -226,8 +229,8 @@ fail:
+ 
+ 
+ /* allocate a new (un-tiled) buffer object */
+-struct omap_bo * omap_bo_new(struct omap_device *dev,
+-		uint32_t size, uint32_t flags)
++drm_public struct omap_bo *
++omap_bo_new(struct omap_device *dev, uint32_t size, uint32_t flags)
+ {
+ 	union omap_gem_size gsize = {
+ 			.bytes = size,
+@@ -239,8 +242,9 @@ struct omap_bo * omap_bo_new(struct omap_device *dev,
+ }
+ 
+ /* allocate a new buffer object */
+-struct omap_bo * omap_bo_new_tiled(struct omap_device *dev,
+-		uint32_t width, uint32_t height, uint32_t flags)
++drm_public struct omap_bo *
++omap_bo_new_tiled(struct omap_device *dev, uint32_t width,
++		  uint32_t height, uint32_t flags)
+ {
+ 	union omap_gem_size gsize = {
+ 			.tiled = {
+@@ -254,7 +258,7 @@ struct omap_bo * omap_bo_new_tiled(struct omap_device *dev,
+ 	return omap_bo_new_impl(dev, gsize, flags);
+ }
+ 
+-struct omap_bo * omap_bo_ref(struct omap_bo *bo)
++drm_public struct omap_bo *omap_bo_ref(struct omap_bo *bo)
+ {
+ 	atomic_inc(&bo->refcnt);
+ 	return bo;
+@@ -280,7 +284,8 @@ static int get_buffer_info(struct omap_bo *bo)
+ }
+ 
+ /* import a buffer object from DRI2 name */
+-struct omap_bo * omap_bo_from_name(struct omap_device *dev, uint32_t name)
++drm_public struct omap_bo *
++omap_bo_from_name(struct omap_device *dev, uint32_t name)
+ {
+ 	struct omap_bo *bo = NULL;
+ 	struct drm_gem_open req = {
+@@ -313,7 +318,8 @@ fail:
+  * fd so caller should close() the fd when it is otherwise done
+  * with it (even if it is still using the 'struct omap_bo *')
+  */
+-struct omap_bo * omap_bo_from_dmabuf(struct omap_device *dev, int fd)
++drm_public struct omap_bo *
++omap_bo_from_dmabuf(struct omap_device *dev, int fd)
+ {
+ 	struct omap_bo *bo = NULL;
+ 	struct drm_prime_handle req = {
+@@ -344,7 +350,7 @@ fail:
+ }
+ 
+ /* destroy a buffer object */
+-void omap_bo_del(struct omap_bo *bo)
++drm_public void omap_bo_del(struct omap_bo *bo)
+ {
+ 	if (!bo) {
+ 		return;
+@@ -377,7 +383,7 @@ void omap_bo_del(struct omap_bo *bo)
+ }
+ 
+ /* get the global flink/DRI2 buffer name */
+-int omap_bo_get_name(struct omap_bo *bo, uint32_t *name)
++drm_public int omap_bo_get_name(struct omap_bo *bo, uint32_t *name)
+ {
+ 	if (!bo->name) {
+ 		struct drm_gem_flink req = {
+@@ -398,7 +404,7 @@ int omap_bo_get_name(struct omap_bo *bo, uint32_t *name)
+ 	return 0;
+ }
+ 
+-uint32_t omap_bo_handle(struct omap_bo *bo)
++drm_public uint32_t omap_bo_handle(struct omap_bo *bo)
+ {
+ 	return bo->handle;
+ }
+@@ -406,7 +412,7 @@ uint32_t omap_bo_handle(struct omap_bo *bo)
+ /* caller owns the dmabuf fd that is returned and is responsible
+  * to close() it when done
+  */
+-int omap_bo_dmabuf(struct omap_bo *bo)
++drm_public int omap_bo_dmabuf(struct omap_bo *bo)
+ {
+ 	if (!bo->fd) {
+ 		struct drm_prime_handle req = {
+@@ -425,7 +431,7 @@ int omap_bo_dmabuf(struct omap_bo *bo)
+ 	return dup(bo->fd);
+ }
+ 
+-uint32_t omap_bo_size(struct omap_bo *bo)
++drm_public uint32_t omap_bo_size(struct omap_bo *bo)
+ {
+ 	if (!bo->size) {
+ 		get_buffer_info(bo);
+@@ -433,7 +439,7 @@ uint32_t omap_bo_size(struct omap_bo *bo)
+ 	return bo->size;
+ }
+ 
+-void * omap_bo_map(struct omap_bo *bo)
++drm_public void *omap_bo_map(struct omap_bo *bo)
+ {
+ 	if (!bo->map) {
+ 		if (!bo->offset) {
+@@ -449,7 +455,7 @@ void * omap_bo_map(struct omap_bo *bo)
+ 	return bo->map;
+ }
+ 
+-int omap_bo_cpu_prep(struct omap_bo *bo, enum omap_gem_op op)
++drm_public int omap_bo_cpu_prep(struct omap_bo *bo, enum omap_gem_op op)
+ {
+ 	struct drm_omap_gem_cpu_prep req = {
+ 			.handle = bo->handle,
+@@ -459,7 +465,7 @@ int omap_bo_cpu_prep(struct omap_bo *bo, enum omap_gem_op op)
+ 			DRM_OMAP_GEM_CPU_PREP, &req, sizeof(req));
+ }
+ 
+-int omap_bo_cpu_fini(struct omap_bo *bo, enum omap_gem_op op)
++drm_public int omap_bo_cpu_fini(struct omap_bo *bo, enum omap_gem_op op)
+ {
+ 	struct drm_omap_gem_cpu_fini req = {
+ 			.handle = bo->handle,
+diff --git a/radeon/Makefile.am b/radeon/Makefile.am
+index a8cd100..c969573 100644
+--- a/radeon/Makefile.am
++++ b/radeon/Makefile.am
+@@ -24,6 +24,7 @@
+ 
+ AM_CFLAGS = \
+ 	$(WARN_CFLAGS) \
++	$(VISIBILITY_CFLAGS) \
+ 	-I$(top_srcdir) \
+ 	-I$(top_srcdir)/radeon \
+ 	$(PTHREADSTUBS_CFLAGS) \
+diff --git a/radeon/radeon_bo.c b/radeon/radeon_bo.c
+index 6a0f8e7..865e3f7 100644
+--- a/radeon/radeon_bo.c
++++ b/radeon/radeon_bo.c
+@@ -29,10 +29,14 @@
+  *      Dave Airlie
+  *      Jérôme Glisse <glisse@freedesktop.org>
+  */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++#include <libdrm.h>
+ #include <radeon_bo.h>
+ #include <radeon_bo_int.h>
+ 
+-void radeon_bo_debug(struct radeon_bo *bo, const char *op)
++drm_public void radeon_bo_debug(struct radeon_bo *bo, const char *op)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+ 
+@@ -40,26 +44,23 @@ void radeon_bo_debug(struct radeon_bo *bo, const char *op)
+             op, bo, bo->handle, boi->size, boi->cref);
+ }
+ 
+-struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom,
+-                                 uint32_t handle,
+-                                 uint32_t size,
+-                                 uint32_t alignment,
+-                                 uint32_t domains,
+-                                 uint32_t flags)
++drm_public struct radeon_bo *
++radeon_bo_open(struct radeon_bo_manager *bom, uint32_t handle, uint32_t size,
++	       uint32_t alignment, uint32_t domains, uint32_t flags)
+ {
+     struct radeon_bo *bo;
+     bo = bom->funcs->bo_open(bom, handle, size, alignment, domains, flags);
+     return bo;
+ }
+ 
+-void radeon_bo_ref(struct radeon_bo *bo)
++drm_public void radeon_bo_ref(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     boi->cref++;
+     boi->bom->funcs->bo_ref(boi);
+ }
+ 
+-struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo)
++drm_public struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     if (bo == NULL)
+@@ -69,19 +70,19 @@ struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo)
+     return boi->bom->funcs->bo_unref(boi);
+ }
+ 
+-int radeon_bo_map(struct radeon_bo *bo, int write)
++drm_public int radeon_bo_map(struct radeon_bo *bo, int write)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->bom->funcs->bo_map(boi, write);
+ }
+ 
+-int radeon_bo_unmap(struct radeon_bo *bo)
++drm_public int radeon_bo_unmap(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->bom->funcs->bo_unmap(boi);
+ }
+ 
+-int radeon_bo_wait(struct radeon_bo *bo)
++drm_public int radeon_bo_wait(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     if (!boi->bom->funcs->bo_wait)
+@@ -89,27 +90,29 @@ int radeon_bo_wait(struct radeon_bo *bo)
+     return boi->bom->funcs->bo_wait(boi);
+ }
+ 
+-int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain)
++drm_public int radeon_bo_is_busy(struct radeon_bo *bo, uint32_t *domain)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->bom->funcs->bo_is_busy(boi, domain);
+ }
+ 
+-int radeon_bo_set_tiling(struct radeon_bo *bo,
+-                         uint32_t tiling_flags, uint32_t pitch)
++drm_public int
++radeon_bo_set_tiling(struct radeon_bo *bo,
++                     uint32_t tiling_flags, uint32_t pitch)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->bom->funcs->bo_set_tiling(boi, tiling_flags, pitch);
+ }
+ 
+-int radeon_bo_get_tiling(struct radeon_bo *bo,
+-                         uint32_t *tiling_flags, uint32_t *pitch)
++drm_public int
++radeon_bo_get_tiling(struct radeon_bo *bo,
++                     uint32_t *tiling_flags, uint32_t *pitch)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->bom->funcs->bo_get_tiling(boi, tiling_flags, pitch);
+ }
+ 
+-int radeon_bo_is_static(struct radeon_bo *bo)
++drm_public int radeon_bo_is_static(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     if (boi->bom->funcs->bo_is_static)
+@@ -117,18 +120,19 @@ int radeon_bo_is_static(struct radeon_bo *bo)
+     return 0;
+ }
+ 
+-int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs)
++drm_public int
++radeon_bo_is_referenced_by_cs(struct radeon_bo *bo, struct radeon_cs *cs)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     return boi->cref > 1;
+ }
+ 
+-uint32_t radeon_bo_get_handle(struct radeon_bo *bo)
++drm_public uint32_t radeon_bo_get_handle(struct radeon_bo *bo)
+ {
+     return bo->handle;
+ }
+ 
+-uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo)
++drm_public uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     uint32_t src_domain;
+diff --git a/radeon/radeon_bo_gem.c b/radeon/radeon_bo_gem.c
+index 4ea405f..251ec1b 100644
+--- a/radeon/radeon_bo_gem.c
++++ b/radeon/radeon_bo_gem.c
+@@ -38,6 +38,7 @@
+ #include <string.h>
+ #include <sys/mman.h>
+ #include <errno.h>
++#include "libdrm.h"
+ #include "xf86drm.h"
+ #include "xf86atomic.h"
+ #include "drm.h"
+@@ -283,7 +284,7 @@ static struct radeon_bo_funcs bo_gem_funcs = {
+     bo_is_busy,
+ };
+ 
+-struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
++drm_public struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
+ {
+     struct bo_manager_gem *bomg;
+ 
+@@ -296,7 +297,7 @@ struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
+     return (struct radeon_bo_manager*)bomg;
+ }
+ 
+-void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom)
++drm_public void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom)
+ {
+     struct bo_manager_gem *bomg = (struct bo_manager_gem*)bom;
+ 
+@@ -306,19 +307,22 @@ void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom)
+     free(bomg);
+ }
+ 
+-uint32_t radeon_gem_name_bo(struct radeon_bo *bo)
++drm_public uint32_t
++radeon_gem_name_bo(struct radeon_bo *bo)
+ {
+     struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+     return bo_gem->name;
+ }
+ 
+-void *radeon_gem_get_reloc_in_cs(struct radeon_bo *bo)
++drm_public void *
++radeon_gem_get_reloc_in_cs(struct radeon_bo *bo)
+ {
+     struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+     return &bo_gem->reloc_in_cs;
+ }
+ 
+-int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
++drm_public int
++radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
+ {
+     struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+@@ -339,7 +343,8 @@ int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
+     return 0;
+ }
+ 
+-int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
++drm_public int
++radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
+ {
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+     struct drm_radeon_gem_set_domain args;
+@@ -356,7 +361,7 @@ int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t
+     return r;
+ }
+ 
+-int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle)
++drm_public int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle)
+ {
+     struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+     int ret;
+@@ -365,9 +370,8 @@ int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle)
+     return ret;
+ }
+ 
+-struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom,
+-					   int fd_handle,
+-					   uint32_t size)
++drm_public struct radeon_bo *
++radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, int fd_handle, uint32_t size)
+ {
+     struct radeon_bo_gem *bo;
+     int r;
+diff --git a/radeon/radeon_cs.c b/radeon/radeon_cs.c
+index d0e922b..fe5bbce 100644
+--- a/radeon/radeon_cs.c
++++ b/radeon/radeon_cs.c
+@@ -1,19 +1,22 @@
+-
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++#include "libdrm.h"
+ #include <stdio.h>
+ #include "radeon_cs.h"
+ #include "radeon_cs_int.h"
+ 
+-struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, uint32_t ndw)
++drm_public struct radeon_cs *
++radeon_cs_create(struct radeon_cs_manager *csm, uint32_t ndw)
+ {
+     struct radeon_cs_int *csi = csm->funcs->cs_create(csm, ndw);
+     return (struct radeon_cs *)csi;
+ }
+ 
+-int radeon_cs_write_reloc(struct radeon_cs *cs,
+-                          struct radeon_bo *bo,
+-                          uint32_t read_domain,
+-                          uint32_t write_domain,
+-                          uint32_t flags)
++drm_public int
++radeon_cs_write_reloc(struct radeon_cs *cs, struct radeon_bo *bo,
++                      uint32_t read_domain, uint32_t write_domain,
++                      uint32_t flags)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+ 
+@@ -24,56 +27,54 @@ int radeon_cs_write_reloc(struct radeon_cs *cs,
+                                            flags);
+ }
+ 
+-int radeon_cs_begin(struct radeon_cs *cs,
+-                    uint32_t ndw,
+-                    const char *file,
+-                    const char *func,
+-                    int line)
++drm_public int
++radeon_cs_begin(struct radeon_cs *cs, uint32_t ndw,
++                const char *file, const char *func, int line)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_begin(csi, ndw, file, func, line);
+ }
+ 
+-int radeon_cs_end(struct radeon_cs *cs,
+-                  const char *file,
+-                  const char *func,
+-                  int line)
++drm_public int
++radeon_cs_end(struct radeon_cs *cs,
++              const char *file, const char *func, int line)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_end(csi, file, func, line);
+ }
+ 
+-int radeon_cs_emit(struct radeon_cs *cs)
++drm_public int radeon_cs_emit(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_emit(csi);
+ }
+ 
+-int radeon_cs_destroy(struct radeon_cs *cs)
++drm_public int radeon_cs_destroy(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_destroy(csi);
+ }
+ 
+-int radeon_cs_erase(struct radeon_cs *cs)
++drm_public int radeon_cs_erase(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_erase(csi);
+ }
+ 
+-int radeon_cs_need_flush(struct radeon_cs *cs)
++drm_public int radeon_cs_need_flush(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->csm->funcs->cs_need_flush(csi);
+ }
+ 
+-void radeon_cs_print(struct radeon_cs *cs, FILE *file)
++drm_public void radeon_cs_print(struct radeon_cs *cs, FILE *file)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     csi->csm->funcs->cs_print(csi, file);
+ }
+ 
+-void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
++drm_public void
++radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     if (domain == RADEON_GEM_DOMAIN_VRAM)
+@@ -82,14 +83,15 @@ void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
+         csi->csm->gart_limit = limit;
+ }
+ 
+-void radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data)
++drm_public void radeon_cs_space_set_flush(struct radeon_cs *cs, 
++                                          void (*fn)(void *), void *data)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     csi->space_flush_fn = fn;
+     csi->space_flush_data = data;
+ }
+ 
+-uint32_t radeon_cs_get_id(struct radeon_cs *cs)
++drm_public uint32_t radeon_cs_get_id(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return csi->id;
+diff --git a/radeon/radeon_cs_gem.c b/radeon/radeon_cs_gem.c
+index b87c6b1..2020e1a 100644
+--- a/radeon/radeon_cs_gem.c
++++ b/radeon/radeon_cs_gem.c
+@@ -29,6 +29,9 @@
+  *      Nicolai Haehnle <prefect_@gmx.net>
+  *      Jérôme Glisse <glisse@freedesktop.org>
+  */
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+ #include <assert.h>
+ #include <errno.h>
+ #include <stdlib.h>
+@@ -42,6 +45,7 @@
+ #include "radeon_cs_gem.h"
+ #include "radeon_bo_gem.h"
+ #include "drm.h"
++#include "libdrm.h"
+ #include "xf86drm.h"
+ #include "xf86atomic.h"
+ #include "radeon_drm.h"
+@@ -533,7 +537,7 @@ static int radeon_get_device_id(int fd, uint32_t *device_id)
+     return r;
+ }
+ 
+-struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
++drm_public struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
+ {
+     struct radeon_cs_manager_gem *csm;
+ 
+@@ -547,7 +551,7 @@ struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
+     return &csm->base;
+ }
+ 
+-void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)
++drm_public void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)
+ {
+     free(csm);
+ }
+diff --git a/radeon/radeon_cs_space.c b/radeon/radeon_cs_space.c
+index be047a7..cca650b 100644
+--- a/radeon/radeon_cs_space.c
++++ b/radeon/radeon_cs_space.c
+@@ -25,9 +25,13 @@
+  */
+ /*
+  */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
+ #include <assert.h>
+ #include <errno.h>
+ #include <stdlib.h>
++#include "libdrm.h"
+ #include "radeon_cs.h"
+ #include "radeon_bo_int.h"
+ #include "radeon_cs_int.h"
+@@ -161,7 +165,9 @@ static int radeon_cs_do_space_check(struct radeon_cs_int *cs, struct radeon_cs_s
+     return RADEON_CS_SPACE_OK;
+ }
+ 
+-void radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
++drm_public void
++radeon_cs_space_add_persistent_bo(struct radeon_cs *cs, struct radeon_bo *bo,
++                                  uint32_t read_domains, uint32_t write_domain)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+@@ -203,9 +209,9 @@ again:
+     return 0;
+ }
+ 
+-int radeon_cs_space_check_with_bo(struct radeon_cs *cs,
+-                  struct radeon_bo *bo,
+-                  uint32_t read_domains, uint32_t write_domain)
++drm_public int
++radeon_cs_space_check_with_bo(struct radeon_cs *cs, struct radeon_bo *bo,
++                              uint32_t read_domains, uint32_t write_domain)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
+@@ -224,13 +230,13 @@ int radeon_cs_space_check_with_bo(struct radeon_cs *cs,
+     return ret;
+ }
+ 
+-int radeon_cs_space_check(struct radeon_cs *cs)
++drm_public int radeon_cs_space_check(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     return radeon_cs_check_space_internal(csi, NULL);
+ }
+ 
+-void radeon_cs_space_reset_bos(struct radeon_cs *cs)
++drm_public void radeon_cs_space_reset_bos(struct radeon_cs *cs)
+ {
+     struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
+     int i;
+diff --git a/radeon/radeon_surface.c b/radeon/radeon_surface.c
+index 8a1fe7d..e056ed4 100644
+--- a/radeon/radeon_surface.c
++++ b/radeon/radeon_surface.c
+@@ -26,6 +26,9 @@
+  * Authors:
+  *      Jérôme Glisse <jglisse@redhat.com>
+  */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
+ #include <stdbool.h>
+ #include <assert.h>
+ #include <errno.h>
+@@ -35,6 +38,7 @@
+ #include <sys/mman.h>
+ #include <sys/ioctl.h>
+ #include "drm.h"
++#include "libdrm.h"
+ #include "xf86drm.h"
+ #include "radeon_drm.h"
+ #include "radeon_surface.h"
+@@ -2395,7 +2399,8 @@ static int cik_surface_best(struct radeon_surface_manager *surf_man,
+ /* ===========================================================================
+  * public API
+  */
+-struct radeon_surface_manager *radeon_surface_manager_new(int fd)
++drm_public struct radeon_surface_manager *
++radeon_surface_manager_new(int fd)
+ {
+     struct radeon_surface_manager *surf_man;
+ 
+@@ -2443,7 +2448,8 @@ out_err:
+     return NULL;
+ }
+ 
+-void radeon_surface_manager_free(struct radeon_surface_manager *surf_man)
++drm_public void
++radeon_surface_manager_free(struct radeon_surface_manager *surf_man)
+ {
+     free(surf_man);
+ }
+@@ -2515,8 +2521,9 @@ static int radeon_surface_sanity(struct radeon_surface_manager *surf_man,
+     return 0;
+ }
+ 
+-int radeon_surface_init(struct radeon_surface_manager *surf_man,
+-                        struct radeon_surface *surf)
++drm_public int
++radeon_surface_init(struct radeon_surface_manager *surf_man,
++                    struct radeon_surface *surf)
+ {
+     unsigned mode, type;
+     int r;
+@@ -2531,8 +2538,9 @@ int radeon_surface_init(struct radeon_surface_manager *surf_man,
+     return surf_man->surface_init(surf_man, surf);
+ }
+ 
+-int radeon_surface_best(struct radeon_surface_manager *surf_man,
+-                        struct radeon_surface *surf)
++drm_public int
++radeon_surface_best(struct radeon_surface_manager *surf_man,
++                    struct radeon_surface *surf)
+ {
+     unsigned mode, type;
+     int r;
--- libdrm-2.4.56.orig/debian/patches/01_default_perms.diff
+++ libdrm-2.4.56/debian/patches/01_default_perms.diff
@@ -0,0 +1,13 @@
+Index: libdrm/xf86drm.h
+===================================================================
+--- libdrm.orig/xf86drm.h
++++ libdrm/xf86drm.h
+@@ -70,7 +70,7 @@
+ /* Default /dev/dri directory permissions 0755 */
+ #define DRM_DEV_DIRMODE	 	\
+ 	(S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
+-#define DRM_DEV_MODE	 (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
++#define DRM_DEV_MODE	 (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+ 
+ #define DRM_DIR_NAME  "/dev/dri"
+ #define DRM_DEV_NAME  "%s/card%d"