diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2022-05-16 10:45:23 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2022-05-20 09:03:54 +0000 |
commit | c059f168717f522afe5df962ca7ede07cfad0f34 (patch) | |
tree | 3c5d4f68240fa2dfe2395092887fe5bfffb6e158 | |
parent | fd0a5d42a94bd19257d5b01fe14e22ef03d55ac8 (diff) |
broadband-modem-mbim: don't disable subscriber info if used by SIM hotswap
The SIM hot swap operation relies on multiple different types of
indications, but the most important one is the subscriber info
indication. We should make sure that indication is kept enabled for as
long as the SIM hot swap detection should be active.
We also skip using the MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED
property, which should be removed or made MMBroadbandModem-specific,
as it is only really used in the AT-based SIM hot swap detection
logic.
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index b3ef1285..7d04dc92 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -147,6 +147,9 @@ struct _MMBroadbandModemMbimPrivate { /* USSD helpers */ GTask *pending_ussd_action; + /* SIM hot swap setup */ + gboolean sim_hot_swap_configured; + /* Access technology and registration updates */ MbimDataClass available_data_classes; MbimDataClass highest_available_data_class; @@ -5394,6 +5397,12 @@ cleanup_unsolicited_events_3gpp (MMIfaceModem3gpp *_self, { MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); + /* NOTE: FLAG_SUBSCRIBER_INFO is managed both via 3GPP unsolicited + * events and via SIM hot swap setup. We only really cleanup the + * indication if SIM hot swap context is not using it. */ + if (!self->priv->sim_hot_swap_configured) + self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; + self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_SIGNAL_QUALITY; self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_CONNECT; self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE; @@ -5413,9 +5422,12 @@ setup_unsolicited_events_3gpp (MMIfaceModem3gpp *_self, { MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); + /* NOTE: FLAG_SUBSCRIBER_INFO is managed both via 3GPP unsolicited + * events and via SIM hot swap setup. */ + self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; + self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_SIGNAL_QUALITY; self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_CONNECT; - self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE; if (self->priv->is_pco_supported) self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_PCO; @@ -5776,16 +5788,15 @@ modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *_self, gpointer user_data) { MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); - gboolean is_sim_hot_swap_configured = FALSE; - g_object_get (self, - MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED, &is_sim_hot_swap_configured, - NULL); + /* NOTE: FLAG_SUBSCRIBER_INFO is managed both via 3GPP unsolicited + * events and via SIM hot swap setup. We only really disable the + * indication if SIM hot swap context is not using it. */ + if (!self->priv->sim_hot_swap_configured) + self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_SIGNAL_QUALITY; self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_CONNECT; - if (is_sim_hot_swap_configured) - self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE; if (self->priv->is_pco_supported) self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_PCO; @@ -5803,9 +5814,12 @@ modem_3gpp_enable_unsolicited_events (MMIfaceModem3gpp *_self, { MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); + /* NOTE: FLAG_SUBSCRIBER_INFO is managed both via 3GPP unsolicited + * events and via SIM hot swap setup. */ + self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; + self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_SIGNAL_QUALITY; self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_CONNECT; - self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_SUBSCRIBER_INFO; self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE; if (self->priv->is_pco_supported) self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_PCO; |