From 2f306e8e7c830d7991b747b127533c7db73754fd Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 6 Nov 2023 16:10:37 +0000 Subject: [PATCH] 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. --- src/mm-bearer-list.c | 2 +- .../mtk/mm-broadband-modem-mbim-mtk-fibocom.c | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) 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