mtk: fix reported nw error in FM350 < 29.22.13

The network error needs to be scaled down.
This commit is contained in:
Aleksander Morgado
2024-02-15 21:08:57 +00:00
parent 8dffb76f1e
commit b3708636b1
@@ -46,6 +46,7 @@ struct _MMBroadbandModemMbimMtkFibocomPrivate {
gboolean is_multiplex_supported;
gboolean is_async_slaac_supported;
gboolean remove_ip_packet_filters;
gboolean normalize_nw_error;
};
/*****************************************************************************/
@@ -62,6 +63,9 @@ struct _MMBroadbandModemMbimMtkFibocomPrivate {
/* Explicit IP packet filter removal required in old firmware versions. */
#define IP_PACKET_FILTER_REMOVAL_UNNEEDED_VERSION 29, 23, 6
/* NW error normalization required in old firmware versions. */
#define NORMALIZE_NW_ERROR_UNNEEDED 29, 22, 13
static inline gboolean
fm350_check_version (guint A1, guint A2, guint A3,
guint B1, guint B2, guint B3)
@@ -111,6 +115,11 @@ process_fm350_version_features (MMBroadbandModemMbimMtkFibocom *self,
self->priv->remove_ip_packet_filters = !fm350_check_version (major, minor, micro, IP_PACKET_FILTER_REMOVAL_UNNEEDED_VERSION);
mm_obj_info (self, "FM350 %s IP packet filter removal",
self->priv->remove_ip_packet_filters ? "requires" : "does not require");
/* Check if we need to normalize network errors */
self->priv->normalize_nw_error = !fm350_check_version (major, minor, micro, NORMALIZE_NW_ERROR_UNNEEDED);
mm_obj_info (self, "FM350 %s network error normalization",
self->priv->normalize_nw_error ? "requires" : "does not require");
}
/*****************************************************************************/
@@ -206,6 +215,22 @@ create_bearer_list (MMIfaceModem *self)
return bearer_list;
}
/******************************************************************************/
/* Normalize network error */
static guint32
normalize_nw_error (MMBroadbandModemMbim *self,
guint32 nw_error)
{
/* Work around to convert AT error to 3GPP Error */
if (MM_BROADBAND_MODEM_MBIM_MTK_FIBOCOM (self)->priv->normalize_nw_error && nw_error > 100) {
mm_obj_dbg (self, "network error normalization required: %u -> %u",
nw_error, nw_error - 100);
nw_error -= 100;
}
return nw_error;
}
/******************************************************************************/
MMBroadbandModemMbimMtkFibocom *
@@ -243,6 +268,8 @@ mm_broadband_modem_mbim_mtk_fibocom_init (MMBroadbandModemMbimMtkFibocom *self)
/* By default remove, unless we have a new enough version */
self->priv->remove_ip_packet_filters = TRUE;
/* By default normalize, unless have a new enough version */
self->priv->normalize_nw_error = TRUE;
}
static void
@@ -281,7 +308,10 @@ shared_fibocom_init (MMSharedFibocom *iface)
static void
mm_broadband_modem_mbim_mtk_fibocom_class_init (MMBroadbandModemMbimMtkFibocomClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
MMBroadbandModemMbimClass *broadband_modem_mbim_class = MM_BROADBAND_MODEM_MBIM_CLASS (klass);
g_type_class_add_private (object_class, sizeof (MMBroadbandModemMbimMtkFibocomPrivate));
broadband_modem_mbim_class->normalize_nw_error = normalize_nw_error;
}