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 <e...@anholt.net> Date: Wed Jul 20 11:42:45 2016 -0700 Bump version to 2.4.69 for release. Signed-off-by: Eric Anholt <e...@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 <e...@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 <e...@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 <vap...@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 <vap...@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.ves...@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 <fa...@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);