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.
This commit is contained in:
Aleksander Morgado
2022-05-16 10:45:23 +02:00
parent fd0a5d42a9
commit c059f16871

View File

@@ -147,6 +147,9 @@ struct _MMBroadbandModemMbimPrivate {
/* USSD helpers */ /* USSD helpers */
GTask *pending_ussd_action; GTask *pending_ussd_action;
/* SIM hot swap setup */
gboolean sim_hot_swap_configured;
/* Access technology and registration updates */ /* Access technology and registration updates */
MbimDataClass available_data_classes; MbimDataClass available_data_classes;
MbimDataClass highest_available_data_class; MbimDataClass highest_available_data_class;
@@ -5394,6 +5397,12 @@ cleanup_unsolicited_events_3gpp (MMIfaceModem3gpp *_self,
{ {
MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_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_SIGNAL_QUALITY;
self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_CONNECT; self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_CONNECT;
self->priv->setup_flags &= ~PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE; 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); 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_SIGNAL_QUALITY;
self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_CONNECT; 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; self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE;
if (self->priv->is_pco_supported) if (self->priv->is_pco_supported)
self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_PCO; self->priv->setup_flags |= PROCESS_NOTIFICATION_FLAG_PCO;
@@ -5776,16 +5788,15 @@ modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *_self,
gpointer user_data) gpointer user_data)
{ {
MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self);
gboolean is_sim_hot_swap_configured = FALSE;
g_object_get (self, /* NOTE: FLAG_SUBSCRIBER_INFO is managed both via 3GPP unsolicited
MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED, &is_sim_hot_swap_configured, * events and via SIM hot swap setup. We only really disable the
NULL); * 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_SIGNAL_QUALITY;
self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_CONNECT; 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; self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE;
if (self->priv->is_pco_supported) if (self->priv->is_pco_supported)
self->priv->enable_flags &= ~PROCESS_NOTIFICATION_FLAG_PCO; 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); 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_SIGNAL_QUALITY;
self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_CONNECT; 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; self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_PACKET_SERVICE;
if (self->priv->is_pco_supported) if (self->priv->is_pco_supported)
self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_PCO; self->priv->enable_flags |= PROCESS_NOTIFICATION_FLAG_PCO;