aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-02-15 00:43:15 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-02-15 00:43:15 +0100
commitb2f9771b8559c9cb877d1f44189b390b9704bc1e (patch)
tree87c65f3507fffb261417a715fab9a9e50013c24d /src
parent3a32409000ad584ec67b0ddd43b312a37ea5a369 (diff)
broadband-modem-mbim: detect 5G support in custom data class
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/301
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c11
-rw-r--r--src/mm-modem-helpers-mbim.c11
-rw-r--r--src/mm-modem-helpers-mbim.h5
3 files changed, 20 insertions, 7 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index a3633120..97ce89a9 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -98,6 +98,7 @@ struct _MMBroadbandModemMbimPrivate {
/* Queried and cached capabilities */
MbimCellularClass caps_cellular_class;
MbimDataClass caps_data_class;
+ gchar *caps_custom_data_class;
MbimSmsCaps caps_sms;
guint caps_max_sessions;
gchar *caps_device_id;
@@ -447,7 +448,7 @@ device_caps_query_ready (MbimDevice *device,
&self->priv->caps_sms,
NULL, /* ctrl_caps */
&self->priv->caps_max_sessions,
- NULL, /* custom_data_class */
+ &self->priv->caps_custom_data_class,
&self->priv->caps_device_id,
&self->priv->caps_firmware_info,
&self->priv->caps_hardware_info,
@@ -458,7 +459,8 @@ device_caps_query_ready (MbimDevice *device,
}
ctx->current_mbim = mm_modem_capability_from_mbim_device_caps (self->priv->caps_cellular_class,
- self->priv->caps_data_class);
+ self->priv->caps_data_class,
+ self->priv->caps_custom_data_class);
complete_current_capabilities (task);
out:
@@ -561,7 +563,9 @@ load_supported_capabilities_mbim (GTask *task)
self = g_task_get_source_object (task);
/* Current capabilities should have been cached already, just assume them */
- current = mm_modem_capability_from_mbim_device_caps (self->priv->caps_cellular_class, self->priv->caps_data_class);
+ current = mm_modem_capability_from_mbim_device_caps (self->priv->caps_cellular_class,
+ self->priv->caps_data_class,
+ self->priv->caps_custom_data_class);
if (current != 0) {
supported = g_array_sized_new (FALSE, FALSE, sizeof (MMModemCapability), 1);
g_array_append_val (supported, current);
@@ -5622,6 +5626,7 @@ finalize (GObject *object)
{
MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (object);
+ g_free (self->priv->caps_custom_data_class);
g_free (self->priv->caps_device_id);
g_free (self->priv->caps_firmware_info);
g_free (self->priv->caps_hardware_info);
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index 0d5ff5f9..8dfc2420 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -22,8 +22,9 @@
/*****************************************************************************/
MMModemCapability
-mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class,
- MbimDataClass caps_data_class)
+mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class,
+ MbimDataClass caps_data_class,
+ const gchar *caps_custom_data_class)
{
MMModemCapability mask = 0;
@@ -38,6 +39,12 @@ mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class
if (caps_data_class & MBIM_DATA_CLASS_LTE)
mask |= MM_MODEM_CAPABILITY_LTE;
+ if ((caps_data_class & MBIM_DATA_CLASS_CUSTOM) && caps_custom_data_class) {
+ /* e.g. Gosuncn GM800 reports MBIM custom data class "5G/TDS" */
+ if (strstr (caps_custom_data_class, "5G"))
+ mask |= MM_MODEM_CAPABILITY_5GNR;
+ }
+
return mask;
}
diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h
index f9d509f8..9cebe95f 100644
--- a/src/mm-modem-helpers-mbim.h
+++ b/src/mm-modem-helpers-mbim.h
@@ -24,8 +24,9 @@
/*****************************************************************************/
/* MBIM/BasicConnect to MM translations */
-MMModemCapability mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class,
- MbimDataClass caps_data_class);
+MMModemCapability mm_modem_capability_from_mbim_device_caps (MbimCellularClass caps_cellular_class,
+ MbimDataClass caps_data_class,
+ const gchar *caps_custom_data_class);
MMModemLock mm_modem_lock_from_mbim_pin_type (MbimPinType pin_type);