From c059f168717f522afe5df962ca7ede07cfad0f34 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 16 May 2022 10:45:23 +0200 Subject: 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. --- src/mm-broadband-modem-mbim.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src') 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; -- cgit v1.2.3-70-g09d2