[mutter] kms/device: Add functions to find connector and crtc in devices



commit 3d3668a3893593c97591516ee0ff864f453fa75e
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Tue Aug 4 19:03:17 2020 +0200

    kms/device: Add functions to find connector and crtc in devices
    
    Hotplug events may contain CRTC or CONNECTOR ids to notify a property
    change to just one owner, so we need to find its parent device.
    
    Also we may want to update properties directly without having to go through
    all the devices, so expose a simple way to find them.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1964>

 src/backends/native/meta-kms-device-private.h |  6 ++++
 src/backends/native/meta-kms-device.c         | 44 +++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)
---
diff --git a/src/backends/native/meta-kms-device-private.h b/src/backends/native/meta-kms-device-private.h
index 831f7820a6..1079741e0d 100644
--- a/src/backends/native/meta-kms-device-private.h
+++ b/src/backends/native/meta-kms-device-private.h
@@ -34,4 +34,10 @@ void meta_kms_device_add_fake_plane_in_impl (MetaKmsDevice    *device,
                                              MetaKmsPlaneType  plane_type,
                                              MetaKmsCrtc      *crtc);
 
+MetaKmsCrtc * meta_kms_device_find_crtc_in_impl (MetaKmsDevice *device,
+                                                 uint32_t       crtc_id);
+
+MetaKmsConnector * meta_kms_device_find_connector_in_impl (MetaKmsDevice *device,
+                                                           uint32_t       connector_id);
+
 #endif /* META_KMS_DEVICE_PRIVATE_H */
diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c
index beb2360e62..6085654bae 100644
--- a/src/backends/native/meta-kms-device.c
+++ b/src/backends/native/meta-kms-device.c
@@ -20,6 +20,8 @@
 
 #include "config.h"
 
+#include "backends/native/meta-kms-connector.h"
+#include "backends/native/meta-kms-crtc.h"
 #include "backends/native/meta-kms-device-private.h"
 #include "backends/native/meta-kms-device.h"
 
@@ -133,6 +135,48 @@ meta_kms_device_get_connectors (MetaKmsDevice *device)
   return device->connectors;
 }
 
+MetaKmsCrtc *
+meta_kms_device_find_crtc_in_impl (MetaKmsDevice *device,
+                                   uint32_t       crtc_id)
+{
+  MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
+  GList *l;
+
+  meta_assert_in_kms_impl (device->kms);
+  meta_assert_is_waiting_for_kms_impl_task (device->kms);
+
+  for (l = meta_kms_impl_device_peek_crtcs (impl_device); l; l = l->next)
+    {
+      MetaKmsCrtc *crtc = META_KMS_CRTC (l->data);
+
+      if (meta_kms_crtc_get_id (crtc) == crtc_id)
+        return crtc;
+    }
+
+  return NULL;
+}
+
+MetaKmsConnector *
+meta_kms_device_find_connector_in_impl (MetaKmsDevice *device,
+                                        uint32_t       connector_id)
+{
+  MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
+  GList *l;
+
+  meta_assert_in_kms_impl (device->kms);
+  meta_assert_is_waiting_for_kms_impl_task (device->kms);
+
+  for (l = meta_kms_impl_device_peek_connectors (impl_device); l; l = l->next)
+    {
+      MetaKmsConnector *connector = META_KMS_CONNECTOR (l->data);
+
+      if (meta_kms_connector_get_id (connector) == connector_id)
+        return connector;
+    }
+
+  return NULL;
+}
+
 GList *
 meta_kms_device_get_crtcs (MetaKmsDevice *device)
 {


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