Mesa (master): loader: add loader_open_render_node(..)
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Aug 31 19:54:51 UTC 2018
Module: Mesa
Branch: master
Commit: ab348885ebbc669f5dec032851147bd64a2d5e26
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab348885ebbc669f5dec032851147bd64a2d5e26
Author: Christian Gmeiner <christian.gmeiner at gmail.com>
Date: Thu Aug 9 07:12:22 2018 +0200
loader: add loader_open_render_node(..)
This helper is almost a 1:1 copy of tegra_open_render_node().
Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
---
src/loader/loader.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++
src/loader/loader.h | 3 +++
2 files changed, 68 insertions(+)
diff --git a/src/loader/loader.c b/src/loader/loader.c
index 2e37d113b8..461f96aa6a 100644
--- a/src/loader/loader.c
+++ b/src/loader/loader.c
@@ -103,6 +103,65 @@ static char *loader_get_kernel_driver_name(int fd)
}
#if defined(HAVE_LIBDRM)
+int
+loader_open_render_node(const char *name)
+{
+ drmDevicePtr *devices, device;
+ int err, render = -ENOENT, fd;
+ unsigned int num, i;
+
+ err = drmGetDevices2(0, NULL, 0);
+ if (err < 0)
+ return err;
+
+ num = err;
+
+ devices = calloc(num, sizeof(*devices));
+ if (!devices)
+ return -ENOMEM;
+
+ err = drmGetDevices2(0, devices, num);
+ if (err < 0) {
+ render = err;
+ goto free;
+ }
+
+ for (i = 0; i < num; i++) {
+ device = devices[i];
+
+ if ((device->available_nodes & (1 << DRM_NODE_RENDER)) &&
+ (device->bustype == DRM_BUS_PLATFORM)) {
+ drmVersionPtr version;
+
+ fd = open(device->nodes[DRM_NODE_RENDER], O_RDWR | O_CLOEXEC);
+ if (fd < 0)
+ continue;
+
+ version = drmGetVersion(fd);
+ if (!version) {
+ close(fd);
+ continue;
+ }
+
+ if (strcmp(version->name, name) != 0) {
+ drmFreeVersion(version);
+ close(fd);
+ continue;
+ }
+
+ drmFreeVersion(version);
+ render = fd;
+ break;
+ }
+ }
+
+ drmFreeDevices(devices, num);
+
+free:
+ free(devices);
+ return render;
+}
+
#ifdef USE_DRICONF
static const char __driConfigOptionsLoader[] =
DRI_CONF_BEGIN
@@ -306,6 +365,12 @@ int loader_get_user_preferred_fd(int default_fd, bool *different_device)
return default_fd;
}
#else
+int
+loader_open_render_node(const char *name)
+{
+ return -1;
+}
+
int loader_get_user_preferred_fd(int default_fd, bool *different_device)
{
*different_device = false;
diff --git a/src/loader/loader.h b/src/loader/loader.h
index 3859b45dc4..7b4dd01144 100644
--- a/src/loader/loader.h
+++ b/src/loader/loader.h
@@ -39,6 +39,9 @@ int
loader_open_device(const char *);
int
+loader_open_render_node(const char *name);
+
+int
loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id);
char *
More information about the mesa-commit
mailing list