drm: Implement drmCheckModesettingSupported() for FreeBSD
PATCH 1/1 drm: Implement drmCheckModesettingSupported() for FreeBSD
Quoted 1 line
From
c02dd827c928fc68526bc41116ea2e06ce3e838bMon Sep 17 00:00:00 2001
From: Robert Millan <[email protected]>
Date: Thu, 23 Jan 2014 14:46:05 +0000
Subject: [PATCH] drm: Implement drmCheckModesettingSupported() for FreeBSD
Add the missing implementation of drmCheckModesettingSupported() to detect KMS support on FreeBSD (and GNU/kFreeBSD).
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=72847
--- configure.ac | 2 ++ xf86drmMode.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-)
configure.ac +2 -0
@@ -185,6 +185,8 @@ AC_CANONICAL_HOST if test "x$LIBKMS" = xauto ; then case $host_os in linux*) LIBKMS="yes" ;; + freebsd* | kfreebsd*-gnu) + LIBKMS="yes" ;; *) LIBKMS="no" ;; esac fi
xf86drmMode.c +34 -1
@@ -723,7 +723,7 @@ int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property*/ int drmCheckModesettingSupported (const char *busid) { -#ifdef __linux__ +#if defined (__linux__)char pci_dev_dir[1024 ];int domain, bus, dev, func;DIR *sysdir;
@@ -773,6 +773,39 @@ int drmCheckModesettingSupported(const char *busid)closedir (sysdir);if (found)return 0 ; +#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; + + 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 ;
Signature · 1 line
1.7.10.4
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel
I forgot to mention: please, could someone commit this for me? :)
Thanks!
Quoted 8 lines · Robert Millan
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel
Signature · 1 line
Robert Millan
Quoted 4 lines · Robert Millan
I forgot to mention: please, could someone commit this for me? :)
Thanks!
Committed.
Alex
Quoted 18 lines · Robert Millan
Quoted 8 lines
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel--
Robert Millan
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel