summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkwm <kwm@058c260c-8361-11dd-a0ac-aa2bafec7d09>2011-10-02 22:32:17 +0800
committerkwm <kwm@058c260c-8361-11dd-a0ac-aa2bafec7d09>2011-10-02 22:32:17 +0800
commite43eb8f603e596720215bb05c6aeade7a93b729b (patch)
treeb72a266e740eb3dcfe4572f66ae7a04ae798db18
parentce756b139b21b4c227bc170c157b9b44acf89af8 (diff)
downloadxorg-devel-ports-e43eb8f603e596720215bb05c6aeade7a93b729b.tar.gz
xorg-devel-ports-e43eb8f603e596720215bb05c6aeade7a93b729b.tar.zst
xorg-devel-ports-e43eb8f603e596720215bb05c6aeade7a93b729b.zip
Update libdrm patch from kib@
Submitted by: kib@ git-svn-id: https://trillian.chruetertee.ch/svn/ports/branches/xorg-dev@312 058c260c-8361-11dd-a0ac-aa2bafec7d09
-rw-r--r--graphics/libdrm/Makefile1
-rw-r--r--graphics/libdrm/files/extra-xf86drmMode.c48
2 files changed, 36 insertions, 13 deletions
diff --git a/graphics/libdrm/Makefile b/graphics/libdrm/Makefile
index fc31966..b8703ae 100644
--- a/graphics/libdrm/Makefile
+++ b/graphics/libdrm/Makefile
@@ -7,6 +7,7 @@
PORTNAME= libdrm
PORTVERSION= 2.4.26
+PORTREVISION= 1
CATEGORIES= graphics x11
MASTER_SITES= http://dri.freedesktop.org/libdrm/
diff --git a/graphics/libdrm/files/extra-xf86drmMode.c b/graphics/libdrm/files/extra-xf86drmMode.c
index d91a923..8d6934e 100644
--- a/graphics/libdrm/files/extra-xf86drmMode.c
+++ b/graphics/libdrm/files/extra-xf86drmMode.c
@@ -1,15 +1,6 @@
--- xf86drmMode.c.orig 2010-09-08 14:23:39.000000000 +0200
-+++ xf86drmMode.c 2011-07-18 18:59:11.000000000 +0200
-@@ -54,7 +54,7 @@
-
- static inline DRM_IOCTL(int fd, int cmd, void *arg)
- {
-- int ret = drmIoctl(fd, cmd, arg);
-+ int ret = drmIoctl(fd, (unsigned)cmd, arg);
- return ret < 0 ? -errno : ret;
- }
-
-@@ -659,7 +659,7 @@
++++ xf86drmMode.c 2011-10-02 14:45:33.000000000 +0200
+@@ -659,7 +659,7 @@ int drmModeConnectorSetProperty(int fd,
*/
int drmCheckModesettingSupported(const char *busid)
{
@@ -18,12 +9,43 @@
char pci_dev_dir[1024];
int domain, bus, dev, func;
DIR *sysdir;
-@@ -709,6 +709,8 @@
+@@ -709,6 +709,39 @@ int drmCheckModesettingSupported(const c
closedir(sysdir);
if (found)
return 0;
+#elif defined(__FreeBSD__)
-+ return 0;
++ char kbusid[1024], sbusid[1024];
++ char oid[128];
++ int domain, bus, dev, func;
++ int i, modesetting, ret;
++ size_t len;
++
++ ret = sscanf(busid, "pci:%04x:%02x:%02x.%d", &domain, &bus, &dev,
++ &func);
++ if (ret != 4)
++ return -EINVAL;
++ snprintf(kbusid, sizeof(kbusid), "pci:%04x:%02x:%02x.%d", domain, bus,
++ dev, func);
++
++ /* How many GPUs do we expect in the machine ? */
++ for (i = 0; i < 16; i++) {
++ snprintf(oid, sizeof(oid), "hw.dri.%d.busid", i);
++ len = sizeof(sbusid);
++ ret = sysctlbyname(oid, sbusid, &len, NULL, 0);
++ if (ret == -1) {
++ if (errno == ENOENT)
++ continue;
++ return -EINVAL;
++ }
++ if (strcmp(sbusid, kbusid) != 0)
++ continue;
++ snprintf(oid, sizeof(oid), "hw.dri.%d.modesetting", i);
++ len = sizeof(modesetting);
++ ret = sysctlbyname(oid, &modesetting, &len, NULL, 0);
++ if (ret == -1 || len != sizeof(modesetting))
++ return -EINVAL;
++ return (modesetting ? 0 : -ENOSYS);
++ }
#endif
return -ENOSYS;