diff options
author | tnn <tnn@pkgsrc.org> | 2019-01-19 13:21:29 +0000 |
---|---|---|
committer | tnn <tnn@pkgsrc.org> | 2019-01-19 13:21:29 +0000 |
commit | 38167472f19a6349208bf99c099317046987201c (patch) | |
tree | 49cde31956b25fba4f8f367e3be911e0674b2acb /x11/libdrm | |
parent | 63f1f9dab39e15c9479af99d4317b0648153bed5 (diff) | |
download | pkgsrc-38167472f19a6349208bf99c099317046987201c.tar.gz |
libbdrm: sync patch-xf86drmMode.c with NetBS xsrc and FreeBSD ports
Also reduce diff to upstream. Doubt we need to worry about compilers
that don't understand C99-style struct initializers here.
Diffstat (limited to 'x11/libdrm')
-rw-r--r-- | x11/libdrm/Makefile | 4 | ||||
-rw-r--r-- | x11/libdrm/distinfo | 6 | ||||
-rw-r--r-- | x11/libdrm/patches/patch-radeon_radeon__bo__gem.c | 16 | ||||
-rw-r--r-- | x11/libdrm/patches/patch-radeon_radeon__cs__gem.c | 16 | ||||
-rw-r--r-- | x11/libdrm/patches/patch-xf86drmMode.c | 106 |
5 files changed, 80 insertions, 68 deletions
diff --git a/x11/libdrm/Makefile b/x11/libdrm/Makefile index c7197fd51d2..f5255b49641 100644 --- a/x11/libdrm/Makefile +++ b/x11/libdrm/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.89 2019/01/18 23:09:55 tnn Exp $ +# $NetBSD: Makefile,v 1.90 2019/01/19 13:21:29 tnn Exp $ DISTNAME= libdrm-2.4.96 -PKGREVISION= 2 +PKGREVISION= 3 CATEGORIES= x11 graphics MASTER_SITES= http://dri.freedesktop.org/libdrm/ EXTRACT_SUFX= .tar.bz2 diff --git a/x11/libdrm/distinfo b/x11/libdrm/distinfo index 47700c7df76..cff268efd8a 100644 --- a/x11/libdrm/distinfo +++ b/x11/libdrm/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.90 2019/01/18 23:09:55 tnn Exp $ +$NetBSD: distinfo,v 1.91 2019/01/19 13:21:29 tnn Exp $ SHA1 (libdrm-2.4.96.tar.bz2) = 51eb4c248a437b3f200bd1cd84461d3e0b60d71e RMD160 (libdrm-2.4.96.tar.bz2) = 8e13f0edf61bb0b59aaaf3cdbaadf20916782fe8 @@ -8,8 +8,6 @@ SHA1 (patch-ac) = 67c998df7dfc0dabc86320ea6d015cede3e464ea SHA1 (patch-include_drm_drm.h) = 48a912f40bf2b2a1c23edbe4446fa7869212f17b SHA1 (patch-libkms_vmwgfx.c) = d2204c0b79098c6c36b7f282b486c58c6354bd1d SHA1 (patch-libsync.h) = 51623bae547e7a0c3e41fa282964b2361b1c34ab -SHA1 (patch-radeon_radeon__bo__gem.c) = f21a669218cefb7ce9e230fd0e53548cbf16c94f -SHA1 (patch-radeon_radeon__cs__gem.c) = 516b5dd6408c10a4f33f2815b3719e34a16d863a SHA1 (patch-xf86drm.c) = ae371519320eb513f38d6856ad617dff5d05278b -SHA1 (patch-xf86drmMode.c) = 7a0d8ea4a0110b295d8cb4fe870ee523d420ea6b +SHA1 (patch-xf86drmMode.c) = 5f66d45a63b0915f22d0abe115aace13c53823a8 SHA1 (patch-xf86drmMode.h) = a28b02887389be8670193c119f711901af61a6b2 diff --git a/x11/libdrm/patches/patch-radeon_radeon__bo__gem.c b/x11/libdrm/patches/patch-radeon_radeon__bo__gem.c deleted file mode 100644 index 945041570ff..00000000000 --- a/x11/libdrm/patches/patch-radeon_radeon__bo__gem.c +++ /dev/null @@ -1,16 +0,0 @@ -$NetBSD: patch-radeon_radeon__bo__gem.c,v 1.2 2019/01/18 23:09:55 tnn Exp $ - ---- radeon/radeon_bo_gem.c.orig 2014-09-28 16:19:54.000000000 +0000 -+++ radeon/radeon_bo_gem.c -@@ -252,9 +252,10 @@ static int bo_set_tiling(struct radeon_b - static int bo_get_tiling(struct radeon_bo_int *boi, uint32_t *tiling_flags, - uint32_t *pitch) - { -- struct drm_radeon_gem_set_tiling args = {}; -+ struct drm_radeon_gem_set_tiling args; - int r; - -+ memset(&args, 0, sizeof args); - args.handle = boi->handle; - - r = drmCommandWriteRead(boi->bom->fd, diff --git a/x11/libdrm/patches/patch-radeon_radeon__cs__gem.c b/x11/libdrm/patches/patch-radeon_radeon__cs__gem.c deleted file mode 100644 index ebe3d7f3e07..00000000000 --- a/x11/libdrm/patches/patch-radeon_radeon__cs__gem.c +++ /dev/null @@ -1,16 +0,0 @@ -$NetBSD: patch-radeon_radeon__cs__gem.c,v 1.1 2014/10/26 10:20:10 wiz Exp $ - ---- radeon/radeon_cs_gem.c.orig 2014-09-28 16:19:54.000000000 +0000 -+++ radeon/radeon_cs_gem.c -@@ -525,9 +525,10 @@ static struct radeon_cs_funcs radeon_cs_ - - static int radeon_get_device_id(int fd, uint32_t *device_id) - { -- struct drm_radeon_info info = {}; -+ struct drm_radeon_info info; - int r; - -+ memset(&info, 0, sizeof info); - *device_id = 0; - info.request = RADEON_INFO_DEVICE_ID; - info.value = (uintptr_t)device_id; diff --git a/x11/libdrm/patches/patch-xf86drmMode.c b/x11/libdrm/patches/patch-xf86drmMode.c index 76fa639aafd..05834ca9112 100644 --- a/x11/libdrm/patches/patch-xf86drmMode.c +++ b/x11/libdrm/patches/patch-xf86drmMode.c @@ -1,37 +1,59 @@ -$NetBSD: patch-xf86drmMode.c,v 1.4 2018/10/05 12:57:20 wiz Exp $ +$NetBSD: patch-xf86drmMode.c,v 1.5 2019/01/19 13:21:29 tnn Exp $ -Disable checking for hw.dri.%d.modesetting. -This sysctl is only available if a KMS module is loaded. But the libdrm -check happens before X got a chance of loading the KMS module. +FreeBSD/DragonFly/NetBSD support. From FreeBSD ports and NetBSD xsrc ---- xf86drmMode.c.orig 2018-10-04 14:50:03.000000000 +0000 +--- xf86drmMode.c.orig 2018-10-16 14:49:03.000000000 +0000 +++ xf86drmMode.c -@@ -800,38 +800,20 @@ drm_public int drmCheckModesettingSuppor +@@ -43,6 +43,7 @@ + #include <stdlib.h> + #include <sys/ioctl.h> + #ifdef HAVE_SYS_SYSCTL_H ++#include <sys/types.h> + #include <sys/sysctl.h> + #endif + #include <stdio.h> +@@ -799,42 +800,60 @@ drm_public int drmCheckModesettingSuppor + closedir(sysdir); if (found) return 0; - #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) +-#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) - char kbusid[1024], sbusid[1024]; - char oid[128]; - int domain, bus, dev, func; - int i, modesetting, ret; - size_t len; -- ++#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__DragonFly__) ++ #define bus_fmt "pci:%04x:%02x:%02x.%u" ++ #define name_fmt "%*s %*s " bus_fmt ++ unsigned int d1 = 0, b1 = 0, s1 = 0, f1 = 0; ++ if (sscanf(busid, bus_fmt, &d1, &b1, &s1, &f1) != 4) ++ return -EINVAL; ++ /* ++ * hw.dri.%i.bus is not always present and hw.dri.%i.name does not ++ * always contain the busid, so try both for best chance of success ++ */ ++ for (int i = 0; i < DRM_MAX_MINOR; ++i) { ++ char name[22], value[256]; ++ size_t length = sizeof(value); ++ snprintf(name, sizeof(name), "hw.dri.%i.name", i); ++ if (sysctlbyname(name, value, &length, NULL, 0)) ++ continue; + - ret = sscanf(busid, "pci:%04x:%02x:%02x.%d", &domain, &bus, &dev, - &func); - if (ret != 4) -+ return 0; -+#elif defined(__NetBSD__) -+ int fd; -+ static const struct drm_mode_card_res zero_res; -+ struct drm_mode_card_res res = zero_res; -+ int ret; -+ -+ fd = drmOpen(NULL, busid); -+ if (fd == -1) - return -EINVAL; +- return -EINVAL; - snprintf(kbusid, sizeof(kbusid), "pci:%04x:%02x:%02x.%d", domain, bus, - dev, func); -- ++ value[length] = '\0'; ++ unsigned int d2 = 0, b2 = 0, s2 = 0, f2 = 0; ++ switch (sscanf(value, name_fmt, &d2, &b2, &s2, &f2)) { ++ case 0: /* busid not in the name, try busid */ ++ length = sizeof(value); ++ snprintf(name, sizeof(name), "hw.dri.%i.busid", i); ++ if (sysctlbyname(name, value, &length, NULL, 0)) ++ continue; + - /* How many GPUs do we expect in the machine ? */ - for (i = 0; i < 16; i++) { - snprintf(oid, sizeof(oid), "hw.dri.%d.busid", i); @@ -39,9 +61,33 @@ check happens before X got a chance of loading the KMS module. - ret = sysctlbyname(oid, sbusid, &len, NULL, 0); - if (ret == -1) { - if (errno == ENOENT) -- continue; ++ value[length] = '\0'; ++ if (sscanf(value, bus_fmt, &d2, &b2, &s2, &f2) != 4) + continue; - return -EINVAL; -- } ++ /* fall through after parsing busid */ ++ ++ case 4: /* if we jumped here then busid was in the name */ ++ if (d1 == d2 && b1 == b2 && s1 == s2 && f1 == f2) { ++ /* ++ * Confirm the drm driver for this device supports KMS, ++ * except on DragonFly where all the drm drivers do so ++ * but only hw.dri.0.modesetting is present ++ */ ++ #ifndef __DragonFly__ ++ int modesetting = 0; ++ length = sizeof(modesetting); ++ snprintf(name, sizeof(name), "hw.dri.%i.modesetting", i); ++ if (sysctlbyname(name, &modesetting, &length, NULL, 0) ++ || length != sizeof(modesetting) || !modesetting) ++ return -ENOSYS; ++ else ++ #endif ++ return 0; ++ } ++ default: ++ break; + } - if (strcmp(sbusid, kbusid) != 0) - continue; - snprintf(oid, sizeof(oid), "hw.dri.%d.modesetting", i); @@ -50,15 +96,15 @@ check happens before X got a chance of loading the KMS module. - if (ret == -1 || len != sizeof(modesetting)) - return -EINVAL; - return (modesetting ? 0 : -ENOSYS); -- } -+ ret = drmIoctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res); -+ drmClose(fd); -+ if (ret == 0) -+ return 0; - #elif defined(__DragonFly__) - return 0; - #elif defined(__OpenBSD__) -@@ -987,7 +969,7 @@ drm_public int drmModePageFlipTarget(int + } +-#elif defined(__DragonFly__) +- return 0; +-#elif defined(__OpenBSD__) ++#elif defined(__OpenBSD__) || defined(__NetBSD__) + int fd; + struct drm_mode_card_res res; + drmModeResPtr r = 0; +@@ -987,7 +1006,7 @@ drm_public int drmModePageFlipTarget(int drm_public int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id, uint32_t fb_id, uint32_t flags, |