diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2023-03-28 08:01:33 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksandermj@chromium.org> | 2023-04-13 11:49:19 +0000 |
commit | 131e783a5f33f7a710f68203546bd0946a2504f8 (patch) | |
tree | e0e506c10ea760b113d5fd9f7b71a3a0be24e0bc | |
parent | 585d2af713ffe4d68bfba904fa30993390f17627 (diff) | |
download | ModemManager-131e783a5f33f7a710f68203546bd0946a2504f8.tar.gz |
port-probe: improve logging of detected port type hints in udev tags
Explicitly log when a tag is found, and also warn if too many por type
hints are provided in the same port.
-rw-r--r-- | src/mm-port-probe.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index 56a397824..1c338b9e4 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c @@ -1845,6 +1845,44 @@ mm_port_probe_get_port_subsys (MMPortProbe *self) return mm_kernel_device_get_subsystem (self->priv->port); } +static void +initialize_port_type_hints (MMPortProbe *self) +{ + g_autoptr(GString) udev_tags = NULL; + guint n_udev_hints = 0; + +#define ADD_HINT_FROM_UDEV_TAG(TAG, FIELD) do { \ + if (!self->priv->FIELD && \ + mm_kernel_device_get_property_as_boolean (self->priv->port, TAG)) { \ + mm_obj_dbg (self, "udev tag detected: %s", TAG); \ + self->priv->FIELD = TRUE; \ + n_udev_hints++; \ + if (!udev_tags) \ + udev_tags = g_string_new (TAG); \ + else \ + g_string_append_printf (udev_tags, ", %s", TAG); \ + } \ + } while (0) + + /* Process udev-configured port type hints */ + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_GPS, is_gps); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_AUDIO, is_audio); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_AT_PRIMARY, maybe_at); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_AT_SECONDARY, maybe_at); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_AT_PPP, maybe_at); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_QCDM, maybe_qcdm); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_QMI, maybe_qmi); + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_TYPE_MBIM, maybe_mbim); + + /* Warn if more than one given at the same time */ + if (n_udev_hints > 1) + mm_obj_warn (self, "multiple incompatible port type hints configured via udev: %s", udev_tags->str); + + ADD_HINT_FROM_UDEV_TAG (ID_MM_PORT_IGNORE, is_ignored); + +#undef ADD_HINT_FROM_UDEV_TAG +} + /*****************************************************************************/ static gchar * @@ -1892,15 +1930,7 @@ set_property (GObject *object, case PROP_PORT: /* construct only */ self->priv->port = g_value_dup_object (value); - self->priv->is_ignored = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_IGNORE); - self->priv->is_gps = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_GPS); - self->priv->is_audio = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_AUDIO); - self->priv->maybe_at = (mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_AT_PRIMARY) || - mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_AT_SECONDARY) || - mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_AT_PPP)); - self->priv->maybe_qcdm = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_QCDM); - self->priv->maybe_qmi = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_QMI); - self->priv->maybe_mbim = mm_kernel_device_get_property_as_boolean (self->priv->port, ID_MM_PORT_TYPE_MBIM); + initialize_port_type_hints (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |