[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libdrm: Changes to 'debian-unstable'



 Android.mk                      |    4 
 amdgpu/Android.mk               |    2 
 configure.ac                    |    5 
 debian/changelog                |    5 
 debian/upstream/signing-key.asc |  226 ++++++
 freedreno/Android.mk            |    2 
 freedreno/msm/msm_ringbuffer.c  |    5 
 include/drm/vc4_drm.h           |   21 
 intel/Android.mk                |    2 
 intel/intel_chipset.h           |   26 
 libkms/Android.mk               |    2 
 libkms/linux.c                  |    5 
 nouveau/Android.mk              |    2 
 radeon/Android.mk               |    2 
 radeon/radeon_surface.c         |    6 
 tests/amdgpu/basic_tests.c      |   56 +
 tests/amdgpu/cs_tests.c         |   51 +
 tests/modetest/Android.mk       |    2 
 tests/proptest/Android.mk       |    2 
 tests/util/Android.mk           |    2 
 xf86drm.c                       | 1454 ++++++++++++++++++++--------------------
 21 files changed, 1108 insertions(+), 774 deletions(-)

New commits:
commit 108c9902ef556e3d841a95f41b0c0431053363f1
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Thu Jul 21 10:25:26 2016 +0200

    Upload to unstable.

diff --git a/debian/changelog b/debian/changelog
index adb8c16..1a625e7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-libdrm (2.4.69-1) UNRELEASED; urgency=medium
+libdrm (2.4.69-1) unstable; urgency=medium
 
   [ Andreas Boll ]
   * New upstream release.
@@ -9,7 +9,7 @@ libdrm (2.4.69-1) UNRELEASED; urgency=medium
   [ Julien Cristau ]
   * Build libdrm-tegra on arm64 (closes: #828023).  Thanks, Martin Michlmayr!
 
- -- Andreas Boll <andreas.boll.dev@gmail.com>  Tue, 10 May 2016 14:45:31 +0200
+ -- Andreas Boll <andreas.boll.dev@gmail.com>  Thu, 21 Jul 2016 10:25:17 +0200
 
 libdrm (2.4.68-1) unstable; urgency=medium
 

commit e36e80c3fefb3bcee9c0b81f7b1b92345a5375bc
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Thu Jul 21 09:42:29 2016 +0200

    Bump changelog.

diff --git a/debian/changelog b/debian/changelog
index 5af53f2..adb8c16 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
-libdrm (2.4.68-2) UNRELEASED; urgency=medium
+libdrm (2.4.69-1) UNRELEASED; urgency=medium
 
   [ Andreas Boll ]
+  * New upstream release.
   * Update debian/upstream/signing-key.asc.
   * Bump Standards-Version to 3.9.8, no changes needed.
   * Update watch url to use https instead of http.

commit 9d92a1f02032b2598d44d93567a425356bb8c773
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Thu Jul 21 09:34:11 2016 +0200

    Update debian/upstream/signing-key.asc
    
    Add Eric Anholt's key D1FC9EE8.

diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc
index 0feee56..825d341 100644
--- a/debian/upstream/signing-key.asc
+++ b/debian/upstream/signing-key.asc
@@ -343,3 +343,229 @@ Lz7boQFSm/REGmPIUtRdE7hHCHijczuqvzhRQ1H7N3yGlbiCip6vH9VJTH4tkqK4
 F2vRWhurk3aFZO7UT1FhAoX62bY6JPsotqQQJg4XP/M7uM6PMg==
 =z5S1
 -----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+iqrZxglMEU1kp5n7vQ2OKB8g+29kluBxlWkTaQ==
+=zFx6
+-----END PGP PUBLIC KEY BLOCK-----

commit 5d830819480b089f62637fecc3aad11c5d1d5857
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Jul 20 11:42:45 2016 -0700

    Bump version to 2.4.69 for release.
    
    Signed-off-by: Eric Anholt <eric@anholt.net>

diff --git a/configure.ac b/configure.ac
index 90fc455..0f91d43 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
 
 AC_PREREQ([2.63])
 AC_INIT([libdrm],
-        [2.4.68],
+        [2.4.69],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
         [libdrm])
 

commit 2212a6465d1597fbc4d4ee0ea5ff87816bfa336e
Author: Eric Anholt <eric@anholt.net>
Date:   Sat Jul 2 14:18:43 2016 -0700

    vc4: Update kernel headers for getparam addition.
    
    This also brings over the C++ guard introduced recently in the kernel
    headers.
    
    Signed-off-by: Eric Anholt <eric@anholt.net>

diff --git a/include/drm/vc4_drm.h b/include/drm/vc4_drm.h
index da3caa0..919eece 100644
--- a/include/drm/vc4_drm.h
+++ b/include/drm/vc4_drm.h
@@ -26,6 +26,10 @@
 
 #include "drm.h"
 
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
 #define DRM_VC4_SUBMIT_CL                         0x00
 #define DRM_VC4_WAIT_SEQNO                        0x01
 #define DRM_VC4_WAIT_BO                           0x02
@@ -33,6 +37,7 @@
 #define DRM_VC4_MMAP_BO                           0x04
 #define DRM_VC4_CREATE_SHADER_BO                  0x05
 #define DRM_VC4_GET_HANG_STATE                    0x06
+#define DRM_VC4_GET_PARAM                         0x07
 
 #define DRM_IOCTL_VC4_SUBMIT_CL           DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl)
 #define DRM_IOCTL_VC4_WAIT_SEQNO          DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno)
@@ -41,6 +46,7 @@
 #define DRM_IOCTL_VC4_MMAP_BO             DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_MMAP_BO, struct drm_vc4_mmap_bo)
 #define DRM_IOCTL_VC4_CREATE_SHADER_BO    DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_CREATE_SHADER_BO, struct drm_vc4_create_shader_bo)
 #define DRM_IOCTL_VC4_GET_HANG_STATE      DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_HANG_STATE, struct drm_vc4_get_hang_state)
+#define DRM_IOCTL_VC4_GET_PARAM           DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_PARAM, struct drm_vc4_get_param)
 
 struct drm_vc4_submit_rcl_surface {
 	__u32 hindex; /* Handle index, or ~0 if not present. */
@@ -276,4 +282,19 @@ struct drm_vc4_get_hang_state {
 	__u32 pad[16];
 };
 
+#define DRM_VC4_PARAM_V3D_IDENT0		0
+#define DRM_VC4_PARAM_V3D_IDENT1		1
+#define DRM_VC4_PARAM_V3D_IDENT2		2
+#define DRM_VC4_PARAM_SUPPORTS_BRANCHES		3
+
+struct drm_vc4_get_param {
+	__u32 param;
+	__u32 pad;
+	__u64 value;
+};
+
+#if defined(__cplusplus)
+}
+#endif
+
 #endif /* _VC4_DRM_H_ */

commit 8c8d5dd76fb80637031e824a48ceaa0f9f65d2dd
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Tue Jun 21 12:18:15 2016 -0400

    pull in sys/sysmacros.h when available
    
    This header provides major/minor/makedev funcs under most Linux C
    libs.  Pull it in to fix building with newer versions that drop the
    implicit include via sys/types.h.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94231
    Signed-off-by: Mike Frysinger <vapier@gentoo.org>

diff --git a/configure.ac b/configure.ac
index a04ce87..90fc455 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,7 +53,8 @@ AC_USE_SYSTEM_EXTENSIONS
 AC_SYS_LARGEFILE
 AC_FUNC_ALLOCA
 
-AC_CHECK_HEADERS([sys/mkdev.h sys/sysctl.h sys/select.h])
+AC_HEADER_MAJOR
+AC_CHECK_HEADERS([sys/sysctl.h sys/select.h])
 
 # Initialize libtool
 LT_PREREQ([2.2])
diff --git a/libkms/linux.c b/libkms/linux.c
index 6e0da83..69eb1aa 100644
--- a/libkms/linux.c
+++ b/libkms/linux.c
@@ -41,9 +41,12 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#ifdef HAVE_SYS_MKDEV_H
+#ifdef MAJOR_IN_MKDEV
 #include <sys/mkdev.h>
 #endif
+#ifdef MAJOR_IN_SYSMACROS
+#include <sys/sysmacros.h>
+#endif
 
 #include "libdrm_macros.h"
 #include "internal.h"
diff --git a/xf86drm.c b/xf86drm.c
index e99f2e2..8a858ef 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -54,8 +54,11 @@
 #include <sys/ioctl.h>
 #include <sys/time.h>
 #include <stdarg.h>
-#ifdef HAVE_SYS_MKDEV_H
-# include <sys/mkdev.h> /* defines major(), minor(), and makedev() on Solaris */
+#ifdef MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#endif
+#ifdef MAJOR_IN_SYSMACROS
+#include <sys/sysmacros.h>
 #endif
 #include <math.h>
 

commit 50d3c85bdb4ac0b3d546336605a722889aff7066
Author: Jan Vesely <jan.vesely@rutgers.edu>
Date:   Thu Jun 30 14:22:52 2016 -0400

    xf86drm.c: Fix mix of tabs and spaces
    
    Remove whitespace at the end of line.

diff --git a/xf86drm.c b/xf86drm.c
index 804a413..e99f2e2 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -1,5 +1,5 @@
 /**
- * \file xf86drm.c 
+ * \file xf86drm.c
  * User-level interface to DRM device
  *
  * \author Rickard E. (Rik) Faith <faith@valinux.com>
@@ -70,13 +70,13 @@
 #include "util_math.h"
 
 #ifdef __OpenBSD__
-#define DRM_PRIMARY_MINOR_NAME	"drm"
-#define DRM_CONTROL_MINOR_NAME	"drmC"
-#define DRM_RENDER_MINOR_NAME	"drmR"
+#define DRM_PRIMARY_MINOR_NAME  "drm"
+#define DRM_CONTROL_MINOR_NAME  "drmC"
+#define DRM_RENDER_MINOR_NAME   "drmR"
 #else
-#define DRM_PRIMARY_MINOR_NAME	"card"
-#define DRM_CONTROL_MINOR_NAME	"controlD"
-#define DRM_RENDER_MINOR_NAME	"renderD"
+#define DRM_PRIMARY_MINOR_NAME  "card"
+#define DRM_CONTROL_MINOR_NAME  "controlD"
+#define DRM_RENDER_MINOR_NAME   "renderD"
 #endif
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
@@ -96,7 +96,7 @@
 #endif /* __OpenBSD__ */
 
 #ifndef DRM_MAJOR
-#define DRM_MAJOR 226		/* Linux */
+#define DRM_MAJOR 226 /* Linux */
 #endif
 
 #define DRM_MSG_VERBOSITY 3
@@ -128,18 +128,18 @@ drmDebugPrint(const char *format, va_list ap)
 void
 drmMsg(const char *format, ...)
 {
-    va_list	ap;
+    va_list ap;
     const char *env;
     if (((env = getenv("LIBGL_DEBUG")) && strstr(env, "verbose")) ||
         (drm_server_info && drm_server_info->debug_print))
     {
-	va_start(ap, format);
-	if (drm_server_info) {
-	  drm_server_info->debug_print(format,ap);
-	} else {
-	  drmDebugPrint(format, ap);
-	}
-	va_end(ap);
+        va_start(ap, format);
+        if (drm_server_info) {
+            drm_server_info->debug_print(format,ap);
+        } else {
+            drmDebugPrint(format, ap);
+        }
+        va_end(ap);
     }
 }
 
@@ -166,10 +166,10 @@ void drmFree(void *pt)
 int
 drmIoctl(int fd, unsigned long request, void *arg)
 {
-    int	ret;
+    int ret;
 
     do {
-	ret = ioctl(fd, request, arg);
+        ret = ioctl(fd, request, arg);
     } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     return ret;
 }
@@ -190,16 +190,16 @@ drmHashEntry *drmGetEntry(int fd)
     drmHashEntry  *entry;
 
     if (!drmHashTable)
-	drmHashTable = drmHashCreate();
+        drmHashTable = drmHashCreate();
 
     if (drmHashLookup(drmHashTable, key, &value)) {
-	entry           = drmMalloc(sizeof(*entry));
-	entry->fd       = fd;
-	entry->f        = NULL;
-	entry->tagTable = drmHashCreate();
-	drmHashInsert(drmHashTable, key, entry);
+        entry           = drmMalloc(sizeof(*entry));
+        entry->fd       = fd;
+        entry->f        = NULL;
+        entry->tagTable = drmHashCreate();
+        drmHashInsert(drmHashTable, key, entry);
     } else {
-	entry = value;
+        entry = value;
     }
     return entry;
 }
@@ -221,41 +221,41 @@ static int drmMatchBusID(const char *id1, const char *id2, int pci_domain_ok)
 {
     /* First, check if the IDs are exactly the same */
     if (strcasecmp(id1, id2) == 0)
-	return 1;
+        return 1;
 
     /* Try to match old/new-style PCI bus IDs. */
     if (strncasecmp(id1, "pci", 3) == 0) {
-	unsigned int o1, b1, d1, f1;
-	unsigned int o2, b2, d2, f2;
-	int ret;
-
-	ret = sscanf(id1, "pci:%04x:%02x:%02x.%u", &o1, &b1, &d1, &f1);
-	if (ret != 4) {
-	    o1 = 0;
-	    ret = sscanf(id1, "PCI:%u:%u:%u", &b1, &d1, &f1);
-	    if (ret != 3)
-		return 0;
-	}
-
-	ret = sscanf(id2, "pci:%04x:%02x:%02x.%u", &o2, &b2, &d2, &f2);
-	if (ret != 4) {
-	    o2 = 0;
-	    ret = sscanf(id2, "PCI:%u:%u:%u", &b2, &d2, &f2);
-	    if (ret != 3)
-		return 0;
-	}
-
-	/* If domains aren't properly supported by the kernel interface,
-	 * just ignore them, which sucks less than picking a totally random
-	 * card with "open by name"
-	 */
-	if (!pci_domain_ok)
-		o1 = o2 = 0;
-
-	if ((o1 != o2) || (b1 != b2) || (d1 != d2) || (f1 != f2))
-	    return 0;
-	else
-	    return 1;
+        unsigned int o1, b1, d1, f1;
+        unsigned int o2, b2, d2, f2;
+        int ret;
+
+        ret = sscanf(id1, "pci:%04x:%02x:%02x.%u", &o1, &b1, &d1, &f1);
+        if (ret != 4) {
+            o1 = 0;
+            ret = sscanf(id1, "PCI:%u:%u:%u", &b1, &d1, &f1);
+            if (ret != 3)
+                return 0;
+        }
+
+        ret = sscanf(id2, "pci:%04x:%02x:%02x.%u", &o2, &b2, &d2, &f2);
+        if (ret != 4) {
+            o2 = 0;
+            ret = sscanf(id2, "PCI:%u:%u:%u", &b2, &d2, &f2);
+            if (ret != 3)
+                return 0;
+        }
+
+        /* If domains aren't properly supported by the kernel interface,
+         * just ignore them, which sucks less than picking a totally random
+         * card with "open by name"
+         */
+        if (!pci_domain_ok)
+            o1 = o2 = 0;
+
+        if ((o1 != o2) || (b1 != b2) || (d1 != d2) || (f1 != f2))
+            return 0;
+        else
+            return 1;
     }
     return 0;
 }
@@ -277,18 +277,18 @@ static int drmMatchBusID(const char *id1, const char *id2, int pci_domain_ok)
 #if !defined(UDEV)
 static int chown_check_return(const char *path, uid_t owner, gid_t group)
 {
-	int rv;
+        int rv;
 
-	do {
-		rv = chown(path, owner, group);
-	} while (rv != 0 && errno == EINTR);
+        do {
+            rv = chown(path, owner, group);
+        } while (rv != 0 && errno == EINTR);
 
-	if (rv == 0)
-		return 0;
+        if (rv == 0)
+            return 0;
 
-	drmMsg("Failed to change owner or group for file %s! %d: %s\n",
-			path, errno, strerror(errno));
-	return -1;
+        drmMsg("Failed to change owner or group for file %s! %d: %s\n",
+               path, errno, strerror(errno));
+        return -1;
 }
 #endif
 
@@ -297,7 +297,7 @@ static int chown_check_return(const char *path, uid_t owner, gid_t group)
  *
  * \param dev major and minor numbers of the device.
  * \param minor minor number of the device.
- * 
+ *
  * \return a file descriptor on success, or a negative value on error.
  *
  * \internal
@@ -321,99 +321,99 @@ static int drmOpenDevice(dev_t dev, int minor, int type)
 
     switch (type) {
     case DRM_NODE_PRIMARY:
-	    dev_name = DRM_DEV_NAME;
-	    break;
+        dev_name = DRM_DEV_NAME;
+        break;
     case DRM_NODE_CONTROL:
-	    dev_name = DRM_CONTROL_DEV_NAME;
-	    break;
+        dev_name = DRM_CONTROL_DEV_NAME;
+        break;
     case DRM_NODE_RENDER:
-	    dev_name = DRM_RENDER_DEV_NAME;
-	    break;
+        dev_name = DRM_RENDER_DEV_NAME;
+        break;
     default:
-	    return -EINVAL;
+        return -EINVAL;
     };
 
     sprintf(buf, dev_name, DRM_DIR_NAME, minor);
     drmMsg("drmOpenDevice: node name is %s\n", buf);
 
     if (drm_server_info && drm_server_info->get_perms) {
-	drm_server_info->get_perms(&serv_group, &serv_mode);
-	devmode  = serv_mode ? serv_mode : DRM_DEV_MODE;
-	devmode &= ~(S_IXUSR|S_IXGRP|S_IXOTH);
+        drm_server_info->get_perms(&serv_group, &serv_mode);
+        devmode  = serv_mode ? serv_mode : DRM_DEV_MODE;
+        devmode &= ~(S_IXUSR|S_IXGRP|S_IXOTH);
     }
 
 #if !defined(UDEV)
     if (stat(DRM_DIR_NAME, &st)) {
-	if (!isroot)
-	    return DRM_ERR_NOT_ROOT;
-	mkdir(DRM_DIR_NAME, DRM_DEV_DIRMODE);
-	chown_check_return(DRM_DIR_NAME, 0, 0); /* root:root */
-	chmod(DRM_DIR_NAME, DRM_DEV_DIRMODE);
+        if (!isroot)
+            return DRM_ERR_NOT_ROOT;
+        mkdir(DRM_DIR_NAME, DRM_DEV_DIRMODE);
+        chown_check_return(DRM_DIR_NAME, 0, 0); /* root:root */
+        chmod(DRM_DIR_NAME, DRM_DEV_DIRMODE);
     }
 
     /* Check if the device node exists and create it if necessary. */
     if (stat(buf, &st)) {
-	if (!isroot)
-	    return DRM_ERR_NOT_ROOT;
-	remove(buf);
-	mknod(buf, S_IFCHR | devmode, dev);
+        if (!isroot)
+            return DRM_ERR_NOT_ROOT;
+        remove(buf);
+        mknod(buf, S_IFCHR | devmode, dev);
     }
 
     if (drm_server_info && drm_server_info->get_perms) {
-	group = ((int)serv_group >= 0) ? serv_group : DRM_DEV_GID;
-	chown_check_return(buf, user, group);
-	chmod(buf, devmode);
+        group = ((int)serv_group >= 0) ? serv_group : DRM_DEV_GID;
+        chown_check_return(buf, user, group);
+        chmod(buf, devmode);
     }
 #else
     /* if we modprobed then wait for udev */
     {
-	int udev_count = 0;
+        int udev_count = 0;
 wait_for_udev:
         if (stat(DRM_DIR_NAME, &st)) {
-		usleep(20);
-		udev_count++;
-
-		if (udev_count == 50)
-			return -1;
-		goto wait_for_udev;
-	}
-
-    	if (stat(buf, &st)) {
-		usleep(20);
-		udev_count++;
-
-		if (udev_count == 50)
-			return -1;
-		goto wait_for_udev;
-    	}
+            usleep(20);
+            udev_count++;
+
+            if (udev_count == 50)
+                return -1;
+            goto wait_for_udev;
+        }
+
+        if (stat(buf, &st)) {
+            usleep(20);
+            udev_count++;
+
+            if (udev_count == 50)
+                return -1;
+            goto wait_for_udev;
+        }
     }
 #endif
 
     fd = open(buf, O_RDWR, 0);
     drmMsg("drmOpenDevice: open result is %d, (%s)\n",
-		fd, fd < 0 ? strerror(errno) : "OK");
+           fd, fd < 0 ? strerror(errno) : "OK");
     if (fd >= 0)
-	return fd;
+        return fd;
 
 #if !defined(UDEV)
     /* Check if the device node is not what we expect it to be, and recreate it
      * and try again if so.
      */
     if (st.st_rdev != dev) {
-	if (!isroot)
-	    return DRM_ERR_NOT_ROOT;
-	remove(buf);
-	mknod(buf, S_IFCHR | devmode, dev);
-	if (drm_server_info && drm_server_info->get_perms) {
-	    chown_check_return(buf, user, group);
-	    chmod(buf, devmode);
-	}
+        if (!isroot)
+            return DRM_ERR_NOT_ROOT;
+        remove(buf);
+        mknod(buf, S_IFCHR | devmode, dev);
+        if (drm_server_info && drm_server_info->get_perms) {
+            chown_check_return(buf, user, group);
+            chmod(buf, devmode);
+        }
     }
     fd = open(buf, O_RDWR, 0);
     drmMsg("drmOpenDevice: open result is %d, (%s)\n",
-		fd, fd < 0 ? strerror(errno) : "OK");
+           fd, fd < 0 ? strerror(errno) : "OK");
     if (fd >= 0)
-	return fd;
+        return fd;
 
     drmMsg("drmOpenDevice: Open failed\n");
     remove(buf);
@@ -429,7 +429,7 @@ wait_for_udev:
  * \param create allow to create the device if set.
  *
  * \return a file descriptor on success, or a negative value on error.
- * 
+ *
  * \internal
  * Calls drmOpenDevice() if \p create is set, otherwise assembles the device
  * name from \p minor and opens it.
@@ -439,37 +439,37 @@ static int drmOpenMinor(int minor, int create, int type)
     int  fd;
     char buf[64];
     const char *dev_name;
-    
+
     if (create)
-	return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type);
-    
+        return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type);
+
     switch (type) {
     case DRM_NODE_PRIMARY:
-	    dev_name = DRM_DEV_NAME;
-	    break;
+        dev_name = DRM_DEV_NAME;
+        break;
     case DRM_NODE_CONTROL:
-	    dev_name = DRM_CONTROL_DEV_NAME;
-	    break;
+        dev_name = DRM_CONTROL_DEV_NAME;
+        break;
     case DRM_NODE_RENDER:
-	    dev_name = DRM_RENDER_DEV_NAME;
-	    break;
+        dev_name = DRM_RENDER_DEV_NAME;
+        break;
     default:
-	    return -EINVAL;
+        return -EINVAL;
     };
 
     sprintf(buf, dev_name, DRM_DIR_NAME, minor);
     if ((fd = open(buf, O_RDWR, 0)) >= 0)
-	return fd;
+        return fd;
     return -errno;
 }
 
 
 /**
  * Determine whether the DRM kernel driver has been loaded.
- * 
+ *
  * \return 1 if the DRM driver is loaded, 0 otherwise.
  *
- * \internal 
+ * \internal
  * Determine the presence of the kernel driver by attempting to open the 0
  * minor and get version information.  For backward compatibility with older
  * Linux implementations, /proc/dri is also checked.
@@ -482,16 +482,16 @@ int drmAvailable(void)
 
     if ((fd = drmOpenMinor(0, 1, DRM_NODE_PRIMARY)) < 0) {
 #ifdef __linux__
-	/* Try proc for backward Linux compatibility */
-	if (!access("/proc/dri/0", R_OK))
-	    return 1;
+        /* Try proc for backward Linux compatibility */
+        if (!access("/proc/dri/0", R_OK))
+            return 1;
 #endif
-	return 0;
+        return 0;
     }
-    
+
     if ((version = drmGetVersion(fd))) {
-	retval = 1;
-	drmFreeVersion(version);
+        retval = 1;
+        drmFreeVersion(version);
     }
     close(fd);
 
@@ -570,37 +570,37 @@ static int drmOpenByBusid(const char *busid, int type)
 
     drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
     for (i = base; i < base + DRM_MAX_MINOR; i++) {
-	fd = drmOpenMinor(i, 1, type);
-	drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
-	if (fd >= 0) {
-	    /* We need to try for 1.4 first for proper PCI domain support
-	     * and if that fails, we know the kernel is busted
-	     */
-	    sv.drm_di_major = 1;
-	    sv.drm_di_minor = 4;
-	    sv.drm_dd_major = -1;	/* Don't care */
-	    sv.drm_dd_minor = -1;	/* Don't care */
-	    if (drmSetInterfaceVersion(fd, &sv)) {
+        fd = drmOpenMinor(i, 1, type);
+        drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
+        if (fd >= 0) {
+            /* We need to try for 1.4 first for proper PCI domain support
+             * and if that fails, we know the kernel is busted
+             */
+            sv.drm_di_major = 1;
+            sv.drm_di_minor = 4;
+            sv.drm_dd_major = -1;        /* Don't care */
+            sv.drm_dd_minor = -1;        /* Don't care */
+            if (drmSetInterfaceVersion(fd, &sv)) {
 #ifndef __alpha__
-		pci_domain_ok = 0;
+                pci_domain_ok = 0;
 #endif
-		sv.drm_di_major = 1;
-		sv.drm_di_minor = 1;
-		sv.drm_dd_major = -1;       /* Don't care */
-		sv.drm_dd_minor = -1;       /* Don't care */
-		drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
-		drmSetInterfaceVersion(fd, &sv);
-	    }
-	    buf = drmGetBusid(fd);
-	    drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
-	    if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) {
-		drmFreeBusid(buf);
-		return fd;
-	    }
-	    if (buf)
-		drmFreeBusid(buf);
-	    close(fd);
-	}
+                sv.drm_di_major = 1;
+                sv.drm_di_minor = 1;
+                sv.drm_dd_major = -1;       /* Don't care */
+                sv.drm_dd_minor = -1;       /* Don't care */
+                drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
+                drmSetInterfaceVersion(fd, &sv);
+            }
+            buf = drmGetBusid(fd);
+            drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf);
+            if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) {
+                drmFreeBusid(buf);
+                return fd;
+            }
+            if (buf)
+                drmFreeBusid(buf);
+            close(fd);
+        }
     }
     return -1;
 }
@@ -611,14 +611,14 @@ static int drmOpenByBusid(const char *busid, int type)
  *
  * \param name driver name.
  * \param type the device node type.
- * 
+ *
  * \return a file descriptor on success, or a negative value on error.
- * 
+ *
  * \internal
  * This function opens the first minor number that matches the driver name and
  * isn't already in use.  If it's in use it then it will already have a bus ID
  * assigned.


Reply to: