diff options
-rw-r--r-- | src/mm-modem-helpers.c | 17 | ||||
-rw-r--r-- | src/mm-modem-helpers.h | 11 | ||||
-rw-r--r-- | src/mm-plugin.c | 27 | ||||
-rw-r--r-- | src/mm-port-probe.c | 31 |
4 files changed, 60 insertions, 26 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c index 551a23a0..99d91ed9 100644 --- a/src/mm-modem-helpers.c +++ b/src/mm-modem-helpers.c @@ -5339,3 +5339,20 @@ mm_decode_eid (const gchar *eid, gsize eid_len) return mm_bcd_to_string ((const guint8 *) eid, eid_len, FALSE /* low_nybble_first */); } + +/*****************************************************************************/ + +guint +mm_string_uint_map_lookup (const MMStringUintMap *map, + const gsize map_size, + const gchar *str, + const guint default_value) +{ + guint i; + + for (i = 0; i < map_size; i++) { + if (g_str_equal (str, map[i].str)) + return map[i].val; + } + return default_value; +} diff --git a/src/mm-modem-helpers.h b/src/mm-modem-helpers.h index eb285c1b..ddcff724 100644 --- a/src/mm-modem-helpers.h +++ b/src/mm-modem-helpers.h @@ -593,4 +593,15 @@ gboolean mm_sim_parse_cpol_test_response (const gchar *response, /* Helper function to decode eid read from esim */ gchar *mm_decode_eid (const gchar *eid, gsize eid_len); +typedef struct { + const gchar *str; + const guint val; +} MMStringUintMap; + +/* Helper to look up string value in a map and return corresponding guint */ +guint mm_string_uint_map_lookup (const MMStringUintMap *map, + const gsize map_size, + const gchar *str, + const guint default_value); + #endif /* MM_MODEM_HELPERS_H */ diff --git a/src/mm-plugin.c b/src/mm-plugin.c index 75dc02d7..4ec043a3 100644 --- a/src/mm-plugin.c +++ b/src/mm-plugin.c @@ -749,6 +749,16 @@ mm_plugin_supports_port_finish (MMPlugin *self, return (MMPluginSupportsResult)value; } +static const MMStringUintMap subsys_flags_map[] = { + { "tty", MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM }, + { "usbmisc", MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT }, + { "rpmsg", MM_PORT_PROBE_AT | MM_PORT_PROBE_QMI }, + { "wwan", MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM }, +#if defined WITH_QRTR + { "qrtr", MM_PORT_PROBE_QMI }, +#endif +}; + void mm_plugin_supports_port (MMPlugin *self, MMDevice *device, @@ -803,19 +813,10 @@ mm_plugin_supports_port (MMPlugin *self, } /* Build mask of flags based on subsystem */ - subsystem_expected_flags = MM_PORT_PROBE_NONE; - if (g_str_equal (mm_kernel_device_get_subsystem (port), "tty")) - subsystem_expected_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM); - else if (g_str_equal (mm_kernel_device_get_subsystem (port), "usbmisc")) - subsystem_expected_flags |= (MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT); - else if (g_str_equal (mm_kernel_device_get_subsystem (port), "rpmsg")) - subsystem_expected_flags |= (MM_PORT_PROBE_AT | MM_PORT_PROBE_QMI); - else if (g_str_equal (mm_kernel_device_get_subsystem (port), "wwan")) - subsystem_expected_flags |= (MM_PORT_PROBE_QMI | MM_PORT_PROBE_MBIM | MM_PORT_PROBE_AT | MM_PORT_PROBE_QCDM); -#if defined WITH_QRTR - else if (g_str_equal (mm_kernel_device_get_subsystem (port), "qrtr")) - subsystem_expected_flags |= MM_PORT_PROBE_QMI; -#endif + subsystem_expected_flags = mm_string_uint_map_lookup (subsys_flags_map, + G_N_ELEMENTS (subsys_flags_map), + mm_kernel_device_get_subsystem (port), + MM_PORT_PROBE_NONE); /* Build mask of flags based on plugin */ plugin_expected_flags = MM_PORT_PROBE_NONE; diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index dcedc3a8..a5d2207d 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c @@ -112,6 +112,12 @@ struct _MMPortProbePrivate { GTask *task; }; +static const MMStringUintMap port_subsys_map[] = { + { "usbmisc", MM_PORT_SUBSYS_USBMISC }, + { "rpmsg", MM_PORT_SUBSYS_RPMSG }, + { "wwan", MM_PORT_SUBSYS_WWAN }, +}; + /*****************************************************************************/ static void @@ -542,11 +548,12 @@ wdm_probe_qmi (MMPortProbe *self) } else #endif /* WITH_QRTR */ { - MMPortSubsys subsys = MM_PORT_SUBSYS_USBMISC; - - if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "rpmsg")) - subsys = MM_PORT_SUBSYS_RPMSG; + MMPortSubsys subsys; + subsys = mm_string_uint_map_lookup (port_subsys_map, + G_N_ELEMENTS (port_subsys_map), + mm_kernel_device_get_subsystem (self->priv->port), + MM_PORT_SUBSYS_USBMISC); ctx->port_qmi = mm_port_qmi_new (mm_kernel_device_get_name (self->priv->port), subsys); } @@ -1215,15 +1222,13 @@ serial_open_at (MMPortProbe *self) /* Create AT serial port if not done before */ if (!ctx->serial) { - gpointer parser; - MMPortSubsys subsys = MM_PORT_SUBSYS_TTY; - - if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "usbmisc")) - subsys = MM_PORT_SUBSYS_USBMISC; - else if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "rpmsg")) - subsys = MM_PORT_SUBSYS_RPMSG; - else if (g_str_equal (mm_kernel_device_get_subsystem (self->priv->port), "wwan")) - subsys = MM_PORT_SUBSYS_WWAN; + gpointer parser; + MMPortSubsys subsys; + + subsys = mm_string_uint_map_lookup (port_subsys_map, + G_N_ELEMENTS (port_subsys_map), + mm_kernel_device_get_subsystem (self->priv->port), + MM_PORT_SUBSYS_TTY); ctx->serial = MM_PORT_SERIAL (mm_port_serial_at_new (mm_kernel_device_get_name (self->priv->port), subsys)); if (!ctx->serial) { |