diff options
author | Jonathan Gray <[email protected]> | 2015-12-21 16:39:55 +1100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2016-04-21 14:41:41 +0100 |
commit | 28e3ae344be1c49f50a521792966e0d98510075c (patch) | |
tree | 52eacabc35867214da8b66a4866e027cdf736e5c /src/loader/loader.c | |
parent | 5d09394fb119ba68e735750eaf4d8590b8a6fed6 (diff) |
loader: add a libdrm case for loader_get_device_name_for_fd
Use dev_node_from_fd() with HAVE_LIBDRM to provide an implmentation
of loader_get_device_name_for_fd() for non-linux systems that
use libdrm but don't have udev or sysfs.
Signed-off-by: Jonathan Gray <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/loader/loader.c')
-rw-r--r-- | src/loader/loader.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/loader/loader.c b/src/loader/loader.c index 8634f45e78d..522fba354c9 100644 --- a/src/loader/loader.c +++ b/src/loader/loader.c @@ -445,7 +445,7 @@ int loader_get_user_preferred_fd(int default_fd, int *different_device) } #endif -#if defined(HAVE_SYSFS) +#if defined(HAVE_SYSFS) || defined(HAVE_LIBDRM) static int dev_node_from_fd(int fd, unsigned int *maj, unsigned int *min) { @@ -466,7 +466,9 @@ dev_node_from_fd(int fd, unsigned int *maj, unsigned int *min) return 0; } +#endif +#if defined(HAVE_SYSFS) static int sysfs_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) { @@ -671,6 +673,24 @@ sysfs_get_device_name_for_fd(int fd) } #endif +#if defined(HAVE_LIBDRM) +static char * +drm_get_device_name_for_fd(int fd) +{ + unsigned int maj, min; + char buf[0x40]; + int n; + + if (dev_node_from_fd(fd, &maj, &min) < 0) + return NULL; + + n = snprintf(buf, sizeof(buf), DRM_DEV_NAME, DRM_DIR_NAME, min); + if (n == -1 || n >= sizeof(buf)) + return NULL; + + return strdup(buf); +} +#endif char * loader_get_device_name_for_fd(int fd) @@ -685,6 +705,10 @@ loader_get_device_name_for_fd(int fd) if ((result = sysfs_get_device_name_for_fd(fd))) return result; #endif +#if HAVE_LIBDRM + if ((result = drm_get_device_name_for_fd(fd))) + return result; +#endif return result; } |