diff options
author | Aleksander Morgado <aleksandermj@google.com> | 2022-08-01 19:51:23 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksandermj@google.com> | 2022-08-01 19:51:26 +0000 |
commit | f5b3dc76897939a06f5f268eb1167063cfeab79a (patch) | |
tree | 996a29e09b83c2c228118c3bd6efa4c80a4ff4d1 /src | |
parent | bda3ade5a8805eb31391c2c855374094680f3187 (diff) |
broadband-modem: notify when a sync is needed after a suspend/resume
Modem/SIM implementations that keep cached info that is not supposed
to change during runtime of a modem may need to be notified about when
a suspend/resume has happened, so that they can clear and reload the
internally cached data.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 30 | ||||
-rw-r--r-- | src/mm-broadband-modem.h | 12 |
2 files changed, 39 insertions, 3 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 5295c058..e6df8754 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -14,7 +14,7 @@ * Copyright (C) 2009 - 2012 Red Hat, Inc. * Copyright (C) 2015 Marco Bascetta <marco.bascetta@sadel.it> * Copyright (C) 2019 Purism SPC - * Copyright (C) 2011 - 2021 Google, Inc. + * Copyright (C) 2011 - 2022 Google, Inc. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. */ @@ -143,6 +143,17 @@ enum { static GParamSpec *properties[PROP_LAST]; +#if defined WITH_SUSPEND_RESUME + +enum { + SIGNAL_SYNC_NEEDED, + SIGNAL_LAST +}; + +static guint signals[SIGNAL_LAST]; + +#endif + /* When CIND is supported, invalid indicators are marked with this value */ #define CIND_INDICATOR_INVALID 255 #define CIND_INDICATOR_IS_VALID(u) (u != CIND_INDICATOR_INVALID) @@ -12177,6 +12188,7 @@ enable (MMBaseModem *self, typedef enum { SYNCING_STEP_FIRST, + SYNCING_STEP_NOTIFY, SYNCING_STEP_IFACE_MODEM, SYNCING_STEP_IFACE_3GPP, SYNCING_STEP_IFACE_TIME, @@ -12282,6 +12294,11 @@ syncing_step (GTask *task) ctx->step++; /* fall through */ + case SYNCING_STEP_NOTIFY: + g_signal_emit (self, signals[SIGNAL_SYNC_NEEDED], 0); + ctx->step++; + /* fall through */ + case SYNCING_STEP_IFACE_MODEM: /* * Start interface Modem synchronization. @@ -13936,4 +13953,15 @@ mm_broadband_modem_class_init (MMBroadbandModemClass *klass) FALSE, G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_INDICATORS_DISABLED, properties[PROP_INDICATORS_DISABLED]); + +#if defined WITH_SUSPEND_RESUME + signals[SIGNAL_SYNC_NEEDED] = + g_signal_new (MM_BROADBAND_MODEM_SIGNAL_SYNC_NEEDED, + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (MMBroadbandModemClass, sync_needed), + NULL, NULL, + g_cclosure_marshal_generic, + G_TYPE_NONE, 0); +#endif } diff --git a/src/mm-broadband-modem.h b/src/mm-broadband-modem.h index bb4e1f66..d2ce65a5 100644 --- a/src/mm-broadband-modem.h +++ b/src/mm-broadband-modem.h @@ -12,8 +12,8 @@ * * Copyright (C) 2008 - 2009 Novell, Inc. * Copyright (C) 2009 - 2011 Red Hat, Inc. - * Copyright (C) 2011 Google, Inc. * Copyright (C) 2015 - Marco Bascetta <marco.bascetta@sadel.it> + * Copyright (C) 2011 - 2022 Google, Inc. */ #ifndef MM_BROADBAND_MODEM_H @@ -42,6 +42,10 @@ typedef struct _MMBroadbandModemPrivate MMBroadbandModemPrivate; #define MM_BROADBAND_MODEM_FLOW_CONTROL "broadband-modem-flow-control" #define MM_BROADBAND_MODEM_INDICATORS_DISABLED "broadband-modem-indicators-disabled" +#if defined WITH_SUSPEND_RESUME +# define MM_BROADBAND_MODEM_SIGNAL_SYNC_NEEDED "broadband-modem-sync-needed" +#endif + struct _MMBroadbandModem { MMBaseModem parent; MMBroadbandModemPrivate *priv; @@ -85,10 +89,14 @@ struct _MMBroadbandModemClass { GAsyncResult *res, GError **error); - /* Last disabling step */ gboolean (* disabling_stopped) (MMBroadbandModem *self, GError **error); + +#if defined WITH_SUSPEND_RESUME + /* signals */ + void (* sync_needed) (MMBroadbandModem *self); +#endif }; GType mm_broadband_modem_get_type (void); |