helpers: consolidate some uses of mm_kernel_device_get_subsystem()

Signed-off-by: Dan Williams <dan@ioncontrol.co>
This commit is contained in:
Dan Williams
2024-09-17 12:20:46 -05:00
parent 0b5f2adb4b
commit f19f20c008
4 changed files with 59 additions and 25 deletions
+17
View File
@@ -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;
}
+11
View File
@@ -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 */
+14 -13
View File
@@ -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;
+17 -12
View File
@@ -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;
gpointer parser;
MMPortSubsys subsys;
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;
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) {