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.
This commit is contained in:
Aleksander Morgado
2024-02-15 21:01:53 +00:00
parent 2f5ebfadee
commit 2f306e8e7c
2 changed files with 32 additions and 1 deletions
+1 -1
View File
@@ -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]);
}
@@ -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