libdrm: Changes to 'upstream-unstable'
Android.mk | 4
amdgpu/Android.mk | 2
configure.ac | 5
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 ++++++++++++++++++++---------------------
19 files changed, 879 insertions(+), 772 deletions(-)
New commits:
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.
- *
+ *
* \sa drmOpenMinor(), drmGetVersion() and drmGetBusid().
*/
static int drmOpenByName(const char *name, int type)
@@ -637,56 +637,56 @@ static int drmOpenByName(const char *name, int type)
* already in use. If it's in use it will have a busid assigned already.
*/
for (i = base; i < base + DRM_MAX_MINOR; i++) {
- if ((fd = drmOpenMinor(i, 1, type)) >= 0) {
- if ((version = drmGetVersion(fd))) {
- if (!strcmp(version->name, name)) {
- drmFreeVersion(version);
- id = drmGetBusid(fd);
- drmMsg("drmGetBusid returned '%s'\n", id ? id : "NULL");
- if (!id || !*id) {
- if (id)
- drmFreeBusid(id);
- return fd;
- } else {
- drmFreeBusid(id);
- }
- } else {
- drmFreeVersion(version);
- }
- }
- close(fd);
- }
+ if ((fd = drmOpenMinor(i, 1, type)) >= 0) {
+ if ((version = drmGetVersion(fd))) {
+ if (!strcmp(version->name, name)) {
+ drmFreeVersion(version);
+ id = drmGetBusid(fd);
+ drmMsg("drmGetBusid returned '%s'\n", id ? id : "NULL");
+ if (!id || !*id) {
+ if (id)
+ drmFreeBusid(id);
+ return fd;
+ } else {
+ drmFreeBusid(id);
+ }
+ } else {
+ drmFreeVersion(version);
+ }
+ }
+ close(fd);
+ }
}
#ifdef __linux__
/* Backward-compatibility /proc support */
for (i = 0; i < 8; i++) {
- char proc_name[64], buf[512];
- char *driver, *pt, *devstring;
- int retcode;
-
- sprintf(proc_name, "/proc/dri/%d/name", i);
- if ((fd = open(proc_name, 0, 0)) >= 0) {
- retcode = read(fd, buf, sizeof(buf)-1);
- close(fd);
- if (retcode) {
- buf[retcode-1] = '\0';
- for (driver = pt = buf; *pt && *pt != ' '; ++pt)
- ;
- if (*pt) { /* Device is next */
- *pt = '\0';
- if (!strcmp(driver, name)) { /* Match */
- for (devstring = ++pt; *pt && *pt != ' '; ++pt)
- ;
- if (*pt) { /* Found busid */
- return drmOpenByBusid(++pt, type);
- } else { /* No busid */
- return drmOpenDevice(strtol(devstring, NULL, 0),i, type);
- }
- }
- }
- }
- }
+ char proc_name[64], buf[512];
+ char *driver, *pt, *devstring;
+ int retcode;
+
+ sprintf(proc_name, "/proc/dri/%d/name", i);
+ if ((fd = open(proc_name, 0, 0)) >= 0) {
+ retcode = read(fd, buf, sizeof(buf)-1);
+ close(fd);
+ if (retcode) {
+ buf[retcode-1] = '\0';
+ for (driver = pt = buf; *pt && *pt != ' '; ++pt)
+ ;
+ if (*pt) { /* Device is next */
+ *pt = '\0';
+ if (!strcmp(driver, name)) { /* Match */
+ for (devstring = ++pt; *pt && *pt != ' '; ++pt)
+ ;
+ if (*pt) { /* Found busid */
+ return drmOpenByBusid(++pt, type);
+ } else { /* No busid */
+ return drmOpenDevice(strtol(devstring, NULL, 0),i, type);
+ }
+ }
+ }
+ }
+ }
}
#endif
@@ -702,9 +702,9 @@ static int drmOpenByName(const char *name, int type)
*
* \param name driver name. Not referenced if bus ID is supplied.
* \param busid bus ID. Zero if not known.
- *
+ *
* \return a file descriptor on success, or a negative value on error.
- *
+ *
* \internal
* It calls drmOpenByBusid() if \p busid is specified or drmOpenByName()
* otherwise.
@@ -734,21 +734,21 @@ int drmOpenWithType(const char *name, const char *busid, int type)
{
if (!drmAvailable() && name != NULL && drm_server_info &&
drm_server_info->load_module) {
- /* try to load the kernel module */
- if (!drm_server_info->load_module(name)) {
- drmMsg("[drm] failed to load kernel module \"%s\"\n", name);
- return -1;
- }
+ /* try to load the kernel module */
+ if (!drm_server_info->load_module(name)) {
+ drmMsg("[drm] failed to load kernel module \"%s\"\n", name);
+ return -1;
+ }
}
if (busid) {
- int fd = drmOpenByBusid(busid, type);
- if (fd >= 0)
- return fd;
+ int fd = drmOpenByBusid(busid, type);
+ if (fd >= 0)
+ return fd;
}
-
+
if (name)
- return drmOpenByName(name, type);
+ return drmOpenByName(name, type);
return -1;
}
@@ -775,7 +775,7 @@ int drmOpenRender(int minor)
void drmFreeVersion(drmVersionPtr v)
{
if (!v)
- return;
+ return;
drmFree(v->name);
drmFree(v->date);
drmFree(v->desc);
@@ -795,7 +795,7 @@ void drmFreeVersion(drmVersionPtr v)
static void drmFreeKernelVersion(drm_version_t *v)
{
if (!v)
- return;
+ return;
drmFree(v->name);
drmFree(v->date);
drmFree(v->desc);
@@ -805,10 +805,10 @@ static void drmFreeKernelVersion(drm_version_t *v)
/**
* Copy version information.
- *
+ *
* \param d destination pointer.
* \param s source pointer.
- *
+ *
* \internal
* Used by drmGetVersion() to translate the information returned by the ioctl
* interface in a private structure into the public structure counterpart.
@@ -831,12 +831,12 @@ static void drmCopyVersion(drmVersionPtr d, const drm_version_t *s)
* Query the driver version information.
*
* \param fd file descriptor.
- *
+ *
* \return pointer to a drmVersion structure which should be freed with
* drmFreeVersion().
- *
+ *
* \note Similar information is available via /proc/dri.
- *
+ *
* \internal
* It gets the version information via successive DRM_IOCTL_VERSION ioctls,
* first with zeros to get the string lengths, and then the actually strings.
@@ -850,21 +850,21 @@ drmVersionPtr drmGetVersion(int fd)
memclear(*version);
if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
- drmFreeKernelVersion(version);
- return NULL;
+ drmFreeKernelVersion(version);
+ return NULL;
}
if (version->name_len)
- version->name = drmMalloc(version->name_len + 1);
+ version->name = drmMalloc(version->name_len + 1);
if (version->date_len)
- version->date = drmMalloc(version->date_len + 1);
+ version->date = drmMalloc(version->date_len + 1);
if (version->desc_len)
- version->desc = drmMalloc(version->desc_len + 1);
+ version->desc = drmMalloc(version->desc_len + 1);
if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) {
- drmMsg("DRM_IOCTL_VERSION: %s\n", strerror(errno));
- drmFreeKernelVersion(version);
- return NULL;
+ drmMsg("DRM_IOCTL_VERSION: %s\n", strerror(errno));
+ drmFreeKernelVersion(version);
+ return NULL;
}
/* The results might not be null-terminated strings, so terminate them. */
@@ -881,13 +881,13 @@ drmVersionPtr drmGetVersion(int fd)
/**
* Get version information for the DRM user space library.
- *
+ *
* This version number is driver independent.
- *
+ *
* \param fd file descriptor.
*
* \return version information.
- *
+ *
* \internal
* This function allocates and fills a drm_version structure with a hard coded
* version number.
@@ -915,29 +915,29 @@ drmVersionPtr drmGetLibVersion(int fd)
int drmGetCap(int fd, uint64_t capability, uint64_t *value)
{
- struct drm_get_cap cap;
- int ret;
+ struct drm_get_cap cap;
+ int ret;
- memclear(cap);
- cap.capability = capability;
+ memclear(cap);
+ cap.capability = capability;
- ret = drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap);
- if (ret)
- return ret;
+ ret = drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap);
+ if (ret)
+ return ret;
- *value = cap.value;
- return 0;
+ *value = cap.value;
+ return 0;
}
int drmSetClientCap(int fd, uint64_t capability, uint64_t value)
{
- struct drm_set_client_cap cap;
+ struct drm_set_client_cap cap;
- memclear(cap);
- cap.capability = capability;
- cap.value = value;
+ memclear(cap);
+ cap.capability = capability;
+ cap.value = value;
- return drmIoctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);
+ return drmIoctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);
}
/**
@@ -973,10 +973,10 @@ char *drmGetBusid(int fd)
memclear(u);
Reply to: