[mutter] kms/device: Provide driver name and description



commit d73a858dc2878a69ea69a863a6d668037c5fc7c1
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed Jun 17 17:49:12 2020 +0200

    kms/device: Provide driver name and description
    
    Retrieved from drmGetVersion(), to be used to identify what driver a DRM
    device is driven by.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1318

 src/backends/native/meta-kms-device.c      | 22 +++++++++++++++++++
 src/backends/native/meta-kms-device.h      |  4 ++++
 src/backends/native/meta-kms-impl-device.c | 34 ++++++++++++++++++++++++++++++
 src/backends/native/meta-kms-impl-device.h |  4 ++++
 4 files changed, 64 insertions(+)
---
diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c
index 57f1f0c9f3..937d44a2cd 100644
--- a/src/backends/native/meta-kms-device.c
+++ b/src/backends/native/meta-kms-device.c
@@ -39,6 +39,8 @@ struct _MetaKmsDevice
 
   MetaKmsDeviceFlag flags;
   char *path;
+  char *driver_name;
+  char *driver_description;
 
   GList *crtcs;
   GList *connectors;
@@ -67,6 +69,18 @@ meta_kms_device_get_path (MetaKmsDevice *device)
   return device->path;
 }
 
+const char *
+meta_kms_device_get_driver_name (MetaKmsDevice *device)
+{
+  return device->driver_name;
+}
+
+const char *
+meta_kms_device_get_driver_description (MetaKmsDevice *device)
+{
+  return device->driver_description;
+}
+
 MetaKmsDeviceFlag
 meta_kms_device_get_flags (MetaKmsDevice *device)
 {
@@ -200,6 +214,8 @@ typedef struct _CreateImplDeviceData
   GList *out_connectors;
   GList *out_planes;
   MetaKmsDeviceCaps out_caps;
+  char *out_driver_name;
+  char *out_driver_description;
 } CreateImplDeviceData;
 
 static gpointer
@@ -219,6 +235,10 @@ create_impl_device_in_impl (MetaKmsImpl  *impl,
   data->out_connectors = meta_kms_impl_device_copy_connectors (impl_device);
   data->out_planes = meta_kms_impl_device_copy_planes (impl_device);
   data->out_caps = *meta_kms_impl_device_get_caps (impl_device);
+  data->out_driver_name =
+    g_strdup (meta_kms_impl_device_get_driver_name (impl_device));
+  data->out_driver_description =
+    g_strdup (meta_kms_impl_device_get_driver_description (impl_device));
 
   return GINT_TO_POINTER (TRUE);
 }
@@ -262,6 +282,8 @@ meta_kms_device_new (MetaKms            *kms,
   device->connectors = data.out_connectors;
   device->planes = data.out_planes;
   device->caps = data.out_caps;
+  device->driver_name = data.out_driver_name;
+  device->driver_description = data.out_driver_description;
 
   return device;
 }
diff --git a/src/backends/native/meta-kms-device.h b/src/backends/native/meta-kms-device.h
index 10fe787f1b..a346c01e37 100644
--- a/src/backends/native/meta-kms-device.h
+++ b/src/backends/native/meta-kms-device.h
@@ -33,6 +33,10 @@ int meta_kms_device_leak_fd (MetaKmsDevice *device);
 
 const char * meta_kms_device_get_path (MetaKmsDevice *device);
 
+const char * meta_kms_device_get_driver_name (MetaKmsDevice *device);
+
+const char * meta_kms_device_get_driver_description (MetaKmsDevice *device);
+
 MetaKmsDeviceFlag meta_kms_device_get_flags (MetaKmsDevice *device);
 
 gboolean meta_kms_device_get_cursor_size (MetaKmsDevice *device,
diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c
index 80d7a8b010..6beef4f527 100644
--- a/src/backends/native/meta-kms-impl-device.c
+++ b/src/backends/native/meta-kms-impl-device.c
@@ -45,6 +45,9 @@ struct _MetaKmsImplDevice
   int fd;
   GSource *fd_source;
 
+  char *driver_name;
+  char *driver_description;
+
   GList *crtcs;
   GList *connectors;
   GList *planes;
@@ -84,6 +87,18 @@ meta_kms_impl_device_get_caps (MetaKmsImplDevice *impl_device)
   return &impl_device->caps;
 }
 
+const char *
+meta_kms_impl_device_get_driver_name (MetaKmsImplDevice *impl_device)
+{
+  return impl_device->driver_name;
+}
+
+const char *
+meta_kms_impl_device_get_driver_description (MetaKmsImplDevice *impl_device)
+{
+  return impl_device->driver_description;
+}
+
 static void
 page_flip_handler (int           fd,
                    unsigned int  sequence,
@@ -357,6 +372,22 @@ init_planes (MetaKmsImplDevice *impl_device)
   impl_device->planes = g_list_reverse (impl_device->planes);
 }
 
+static void
+init_info (MetaKmsImplDevice *impl_device)
+{
+  drmVersion *drm_version;
+
+  drm_version = drmGetVersion (impl_device->fd);
+  if (!drm_version)
+    return;
+
+  impl_device->driver_name = g_strndup (drm_version->name,
+                                        drm_version->name_len);
+  impl_device->driver_description = g_strndup (drm_version->desc,
+                                               drm_version->desc_len);
+  drmFreeVersion (drm_version);
+}
+
 void
 meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
 {
@@ -435,6 +466,7 @@ meta_kms_impl_device_new (MetaKmsDevice  *device,
 
   init_crtcs (impl_device, drm_resources);
   init_planes (impl_device);
+  init_info (impl_device);
 
   update_connectors (impl_device, drm_resources);
 
@@ -484,6 +516,8 @@ meta_kms_impl_device_finalize (GObject *object)
   g_list_free_full (impl_device->planes, g_object_unref);
   g_list_free_full (impl_device->crtcs, g_object_unref);
   g_list_free_full (impl_device->connectors, g_object_unref);
+  g_free (impl_device->driver_name);
+  g_free (impl_device->driver_description);
 
   G_OBJECT_CLASS (meta_kms_impl_device_parent_class)->finalize (object);
 }
diff --git a/src/backends/native/meta-kms-impl-device.h b/src/backends/native/meta-kms-impl-device.h
index e8c08f19fb..e55a95b584 100644
--- a/src/backends/native/meta-kms-impl-device.h
+++ b/src/backends/native/meta-kms-impl-device.h
@@ -50,6 +50,10 @@ GList * meta_kms_impl_device_copy_planes (MetaKmsImplDevice *impl_device);
 
 const MetaKmsDeviceCaps * meta_kms_impl_device_get_caps (MetaKmsImplDevice *impl_device);
 
+const char * meta_kms_impl_device_get_driver_name (MetaKmsImplDevice *impl_device);
+
+const char * meta_kms_impl_device_get_driver_description (MetaKmsImplDevice *impl_device);
+
 gboolean meta_kms_impl_device_dispatch (MetaKmsImplDevice  *impl_device,
                                         GError            **error);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]