aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2023-11-06 16:10:37 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2024-02-15 21:01:53 +0000
commit2f306e8e7c830d7991b747b127533c7db73754fd (patch)
treee79fefab7e1b5a2e56c7114d74f625d4ceb881fb
parent2f5ebfadee588da549005785e9776ec869d0054f (diff)
mtk: multiplex support only available in FM350 >= 29.23.06
Old versions of the FM350 firmware were able to support multiplex with multiple PDNs more or less consistently, except on very specific cases like Verizon. The newest firmware versions support multiplex on any carrier, so we can enable back the feature depending on the firmware version number.
-rw-r--r--src/mm-bearer-list.c2
-rw-r--r--src/plugins/mtk/mm-broadband-modem-mbim-mtk-fibocom.c31
2 files changed, 32 insertions, 1 deletions
diff --git a/src/mm-bearer-list.c b/src/mm-bearer-list.c
index b4e513bc..915dc1fb 100644
--- a/src/mm-bearer-list.c
+++ b/src/mm-bearer-list.c
@@ -499,6 +499,6 @@ mm_bearer_list_class_init (MMBearerListClass *klass)
0,
G_MAXUINT,
0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_MAX_ACTIVE_MULTIPLEXED_BEARERS, properties[PROP_MAX_ACTIVE_MULTIPLEXED_BEARERS]);
}
diff --git a/src/plugins/mtk/mm-broadband-modem-mbim-mtk-fibocom.c b/src/plugins/mtk/mm-broadband-modem-mbim-mtk-fibocom.c
index 17d4761a..cfcd3616 100644
--- a/src/plugins/mtk/mm-broadband-modem-mbim-mtk-fibocom.c
+++ b/src/plugins/mtk/mm-broadband-modem-mbim-mtk-fibocom.c
@@ -43,6 +43,7 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemMbimMtkFibocom, mm_broadband_modem_mbim_
struct _MMBroadbandModemMbimMtkFibocomPrivate {
/* Supported features */
+ gboolean is_multiplex_supported;
gboolean is_async_slaac_supported;
};
@@ -53,6 +54,10 @@ struct _MMBroadbandModemMbimMtkFibocomPrivate {
* versions. */
#define ASYNC_SLAAC_SUPPORTED_VERSION 29, 23, 6
+/* Multiple Multiplexed PDNs are not correctly supported in old firmware
+ * versions. */
+#define MULTIPLEX_SUPPORTED_VERSION 29, 23, 6
+
static inline gboolean
fm350_check_version (guint A1, guint A2, guint A3,
guint B1, guint B2, guint B3)
@@ -92,6 +97,11 @@ process_fm350_version_features (MMBroadbandModemMbimMtkFibocom *self,
self->priv->is_async_slaac_supported = fm350_check_version (major, minor, micro, ASYNC_SLAAC_SUPPORTED_VERSION);
mm_obj_info (self, "FM350 async SLAAC result indications are %ssupported",
self->priv->is_async_slaac_supported ? "" : "not ");
+
+ /* Check if multiplex is supported */
+ self->priv->is_multiplex_supported = fm350_check_version (major, minor, micro, MULTIPLEX_SUPPORTED_VERSION);
+ mm_obj_info (self, "FM350 multiplexing is %ssupported",
+ self->priv->is_multiplex_supported ? "" : "not ");
}
/*****************************************************************************/
@@ -166,6 +176,26 @@ create_bearer (MMIfaceModem *_self,
g_object_unref (task);
}
+/*****************************************************************************/
+/* Create Bearer List (Modem interface) */
+
+static MMBearerList *
+create_bearer_list (MMIfaceModem *self)
+{
+ MMBearerList *bearer_list;
+
+ bearer_list = iface_modem_parent->create_bearer_list (self);
+
+ if (!MM_BROADBAND_MODEM_MBIM_MTK_FIBOCOM (self)->priv->is_multiplex_supported) {
+ g_object_set (bearer_list,
+ MM_BEARER_LIST_MAX_ACTIVE_MULTIPLEXED_BEARERS, 0,
+ NULL);
+ mm_obj_dbg (self, "FM350 firmware version doesn't support multiplexed bearers");
+ }
+
+ return bearer_list;
+}
+
/******************************************************************************/
MMBroadbandModemMbimMtkFibocom *
@@ -211,6 +241,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->load_revision_finish = load_revision_finish;
iface->create_bearer = create_bearer;
iface->create_bearer_finish = create_bearer_finish;
+ iface->create_bearer_list = create_bearer_list;
}
static void