From deb8f07c651f0c6b4893c69c4415afb97b1a3ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 29 Sep 2020 16:39:12 +0200 Subject: [PATCH] kms/device: Get driver details before constructing impl device Eventually the type of impl device will depend on the driver details, so get that information before constructing the impl device. This commit doesn't introduce any new usage of the details, it just prepares for the future. Part-of: --- src/backends/native/meta-kms-device.c | 30 +++++++++++++ src/backends/native/meta-kms-impl-device.c | 49 +++++++++++++--------- 2 files changed, 60 insertions(+), 19 deletions(-) diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c index 5849eebba..37e7fcd2f 100644 --- a/src/backends/native/meta-kms-device.c +++ b/src/backends/native/meta-kms-device.c @@ -236,6 +236,26 @@ typedef struct _CreateImplDeviceData char *out_driver_description; } CreateImplDeviceData; +static gboolean +get_driver_info (int fd, + char **name, + char **description) +{ + drmVersion *drm_version; + + drm_version = drmGetVersion (fd); + if (!drm_version) + return FALSE; + + *name = g_strndup (drm_version->name, + drm_version->name_len); + *description = g_strndup (drm_version->desc, + drm_version->desc_len); + drmFreeVersion (drm_version); + + return TRUE; +} + static MetaKmsImplDevice * meta_create_kms_impl_device (MetaKmsDevice *device, MetaKmsImpl *impl, @@ -243,6 +263,8 @@ meta_create_kms_impl_device (MetaKmsDevice *device, GError **error) { int ret; + g_autofree char *driver_name = NULL; + g_autofree char *driver_description = NULL; meta_assert_in_kms_impl (meta_kms_impl_get_kms (impl)); @@ -255,10 +277,18 @@ meta_create_kms_impl_device (MetaKmsDevice *device, return NULL; } + if (!get_driver_info (fd, &driver_name, &driver_description)) + { + driver_name = g_strdup ("unknown"); + driver_description = g_strdup ("Unknown"); + } + return g_initable_new (META_TYPE_KMS_IMPL_DEVICE_SIMPLE, NULL, error, "device", device, "impl", impl, "fd", fd, + "driver-name", driver_name, + "driver-description", driver_description, NULL); } diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c index c0989ec58..c180aa111 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -45,6 +45,8 @@ enum PROP_DEVICE, PROP_IMPL, PROP_FD, + PROP_DRIVER_NAME, + PROP_DRIVER_DESCRIPTION, N_PROPS }; @@ -549,24 +551,6 @@ init_fallback_modes (MetaKmsImplDevice *impl_device) priv->fallback_modes = g_list_reverse (modes); } -static void -init_info (MetaKmsImplDevice *impl_device) -{ - MetaKmsImplDevicePrivate *priv = - meta_kms_impl_device_get_instance_private (impl_device); - drmVersion *drm_version; - - drm_version = drmGetVersion (priv->fd); - if (!drm_version) - return; - - priv->driver_name = g_strndup (drm_version->name, - drm_version->name_len); - priv->driver_description = g_strndup (drm_version->desc, - drm_version->desc_len); - drmFreeVersion (drm_version); -} - void meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device) { @@ -693,6 +677,12 @@ meta_kms_impl_device_get_property (GObject *object, case PROP_FD: g_value_set_int (value, priv->fd); break; + case PROP_DRIVER_NAME: + g_value_set_string (value, priv->driver_name); + break; + case PROP_DRIVER_DESCRIPTION: + g_value_set_string (value, priv->driver_name); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -720,6 +710,12 @@ meta_kms_impl_device_set_property (GObject *object, case PROP_FD: priv->fd = g_value_get_int (value); break; + case PROP_DRIVER_NAME: + priv->driver_name = g_value_dup_string (value); + break; + case PROP_DRIVER_DESCRIPTION: + priv->driver_description = g_value_dup_string (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -769,7 +765,6 @@ meta_kms_impl_device_initable_init (GInitable *initable, init_crtcs (impl_device, drm_resources); init_planes (impl_device); - init_info (impl_device); init_fallback_modes (impl_device); @@ -829,5 +824,21 @@ meta_kms_impl_device_class_init (MetaKmsImplDeviceClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + obj_props[PROP_DRIVER_NAME] = + g_param_spec_string ("driver-name", + "driver-name", + "DRM device driver name", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + obj_props[PROP_DRIVER_DESCRIPTION] = + g_param_spec_string ("driver-description", + "driver-description", + "DRM device driver description", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, N_PROPS, obj_props); }