From 6de1f300af35d825d173f31ea59d2af93fafd06c Mon Sep 17 00:00:00 2001 From: Joel Selvaraj Date: Thu, 19 Aug 2021 19:32:04 +0530 Subject: [PATCH] temp/modemmanager: upgrade to 1.18rc1 aka 1.17.900 (MR 2453) To test the release candidate in edge before MM stable release. [ci:skip-build] already built successfully in CI --- ...anager-add-quick-suspend-resume-base.patch | 488 ------------------ ...e-sure-g_autoptr-variables-are-initi.patch | 33 -- ...-t-assume-a-MMDevice-always-holds-a-.patch | 35 -- ...id-using-the-mm_-prefix-for-static-p.patch | 39 -- ...em-fix-modem_sync-operation-handling.patch | 101 ---- ...don-t-fail-if-sync-isn-t-implemented.patch | 32 -- ...sync-available-only-if-suspend-resum.patch | 74 --- ...odem-ignore-cancellation-during-sync.patch | 31 -- ...skip-synchronization-after-resume-if.patch | 53 -- ...time-synchronize-state-when-resuming.patch | 196 ------- ...skip-time-interface-sync-if-no-time-.patch | 36 -- ...time-ignore-cancellation-during-sync.patch | 31 -- ...3gpp-synchronize-state-when-resuming.patch | 283 ---------- ...-use-g_autoptr-for-the-MMBearerPrope.patch | 44 -- ...-fix-double-GError-free-on-registrat.patch | 31 -- ...em-3gpp-remove-redundant-log-message.patch | 25 - ...3gpp-ignore-cancellation-during-sync.patch | 31 -- ...fix-type-in-the-ready-for-iface_mode.patch | 38 -- ...skip-3GPP-interface-sync-if-no-3GPP-.patch | 36 -- ...odem-synchronize-state-when-resuming.patch | 371 ------------- ...fail-synchronization-if-no-modem-exp.patch | 32 -- ...fix-state-machine-logic-when-synchro.patch | 25 - ...-abort-sync-if-locked-SIM-card-found.patch | 63 --- ...ve-the-signal-quality-enforced-refre.patch | 129 ----- ...odem-ignore-cancellation-during-sync.patch | 31 -- ...arer-synchronize-state-when-resuming.patch | 241 --------- ...ove-comments-of-the-load-reload_conn.patch | 54 -- ...rer-fix-connection-reload-completion.patch | 42 -- ...agate-the-new-connection-status-afte.patch | 105 ---- ...er-list-sync-all-bearers-one-after-t.patch | 207 -------- ...arer-ignore-cancellation-during-sync.patch | 31 -- ...-reuse-the-same-method-for-load-and-.patch | 32 -- ...e-the-same-method-for-load-and-reloa.patch | 31 -- ...-the-same-method-for-load-and-reload.patch | 31 -- ...-the-same-method-for-load-and-reload.patch | 31 -- ...eload_connection_status-where-not-su.patch | 109 ---- ...ment-reload_connection_status-for-th.patch | 153 ------ ...m-implement-reload_connection_status.patch | 148 ------ ...kport-Quick-Suspend-Resume-patches-t.patch | 207 -------- temp/modemmanager/APKBUILD | 98 +--- 40 files changed, 9 insertions(+), 3799 deletions(-) delete mode 100644 temp/modemmanager/0001-base-manager-add-quick-suspend-resume-base.patch delete mode 100644 temp/modemmanager/0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch delete mode 100644 temp/modemmanager/0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch delete mode 100644 temp/modemmanager/0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch delete mode 100644 temp/modemmanager/0005-base-modem-fix-modem_sync-operation-handling.patch delete mode 100644 temp/modemmanager/0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch delete mode 100644 temp/modemmanager/0007-base-modem-make-sync-available-only-if-suspend-resum.patch delete mode 100644 temp/modemmanager/0008-broadband-modem-ignore-cancellation-during-sync.patch delete mode 100644 temp/modemmanager/0009-broadband-modem-skip-synchronization-after-resume-if.patch delete mode 100644 temp/modemmanager/0010-iface-modem-time-synchronize-state-when-resuming.patch delete mode 100644 temp/modemmanager/0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch delete mode 100644 temp/modemmanager/0012-iface-modem-time-ignore-cancellation-during-sync.patch delete mode 100644 temp/modemmanager/0013-iface-modem-3gpp-synchronize-state-when-resuming.patch delete mode 100644 temp/modemmanager/0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch delete mode 100644 temp/modemmanager/0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch delete mode 100644 temp/modemmanager/0016-iface-modem-3gpp-remove-redundant-log-message.patch delete mode 100644 temp/modemmanager/0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch delete mode 100644 temp/modemmanager/0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch delete mode 100644 temp/modemmanager/0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch delete mode 100644 temp/modemmanager/0020-iface-modem-synchronize-state-when-resuming.patch delete mode 100644 temp/modemmanager/0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch delete mode 100644 temp/modemmanager/0022-broadband-modem-fix-state-machine-logic-when-synchro.patch delete mode 100644 temp/modemmanager/0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch delete mode 100644 temp/modemmanager/0024-iface-modem-remove-the-signal-quality-enforced-refre.patch delete mode 100644 temp/modemmanager/0025-iface-modem-ignore-cancellation-during-sync.patch delete mode 100644 temp/modemmanager/0026-base-bearer-synchronize-state-when-resuming.patch delete mode 100644 temp/modemmanager/0027-base-bearer-improve-comments-of-the-load-reload_conn.patch delete mode 100644 temp/modemmanager/0028-base-bearer-fix-connection-reload-completion.patch delete mode 100644 temp/modemmanager/0029-base-bearer-propagate-the-new-connection-status-afte.patch delete mode 100644 temp/modemmanager/0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch delete mode 100644 temp/modemmanager/0031-base-bearer-ignore-cancellation-during-sync.patch delete mode 100644 temp/modemmanager/0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch delete mode 100644 temp/modemmanager/0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch delete mode 100644 temp/modemmanager/0034-sierra-reuse-the-same-method-for-load-and-reload.patch delete mode 100644 temp/modemmanager/0035-cinterion-reuse-the-same-method-for-load-and-reload.patch delete mode 100644 temp/modemmanager/0036-plugins-ignore-reload_connection_status-where-not-su.patch delete mode 100644 temp/modemmanager/0037-bearer-qmi-implement-reload_connection_status-for-th.patch delete mode 100644 temp/modemmanager/0038-bearer-mbim-implement-reload_connection_status.patch delete mode 100644 temp/modemmanager/0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch diff --git a/temp/modemmanager/0001-base-manager-add-quick-suspend-resume-base.patch b/temp/modemmanager/0001-base-manager-add-quick-suspend-resume-base.patch deleted file mode 100644 index 24880cf67..000000000 --- a/temp/modemmanager/0001-base-manager-add-quick-suspend-resume-base.patch +++ /dev/null @@ -1,488 +0,0 @@ -From d5f3a6d441f47836698b851d6049bf738d066ef6 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sat, 1 May 2021 15:50:47 +0200 -Subject: [PATCH 01/39] base-manager: add quick suspend/resume base - -Quick suspend/resume infrastructure for -synchronizing the interfaces when resuming. ---- - src/main.c | 14 +++- - src/mm-base-manager.c | 48 ++++++++++++ - src/mm-base-manager.h | 4 + - src/mm-base-modem.c | 155 +++++++++++++++++++++++++++++++++++++++ - src/mm-base-modem.h | 23 ++++++ - src/mm-broadband-modem.c | 81 ++++++++++++++++++++ - src/mm-context.c | 11 +++ - src/mm-context.h | 1 + - 8 files changed, 336 insertions(+), 1 deletion(-) - -diff --git a/src/main.c b/src/main.c -index 928078a3..4a036971 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -72,6 +72,13 @@ resuming_cb (MMSleepMonitor *sleep_monitor) - mm_base_manager_start (manager, FALSE); - } - -+static void -+resuming_quick_cb (MMSleepMonitor *sleep_monitor) -+{ -+ mm_dbg ("syncing modem state (quick resuming)"); -+ mm_base_manager_sync (manager); -+} -+ - #endif - - static void -@@ -197,7 +204,12 @@ main (int argc, char *argv[]) - - if (mm_context_get_test_no_suspend_resume()) - mm_dbg ("Suspend/resume support disabled at runtime"); -- else { -+ else if (mm_context_get_test_quick_suspend_resume()) { -+ mm_dbg ("Quick suspend/resume hooks enabled"); -+ sleep_monitor = mm_sleep_monitor_get (); -+ g_signal_connect (sleep_monitor, MM_SLEEP_MONITOR_RESUMING, G_CALLBACK (resuming_quick_cb), NULL); -+ } else { -+ mm_dbg ("Full suspend/resume hooks enabled"); - sleep_monitor = mm_sleep_monitor_get (); - g_signal_connect (sleep_monitor, MM_SLEEP_MONITOR_SLEEPING, G_CALLBACK (sleeping_cb), NULL); - g_signal_connect (sleep_monitor, MM_SLEEP_MONITOR_RESUMING, G_CALLBACK (resuming_cb), NULL); -diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c -index 130e5ad1..0c393f11 100644 ---- a/src/mm-base-manager.c -+++ b/src/mm-base-manager.c -@@ -45,6 +45,7 @@ - #include "mm-plugin.h" - #include "mm-filter.h" - #include "mm-log-object.h" -+#include "mm-base-modem.h" - - static void initable_iface_init (GInitableIface *iface); - static void log_object_iface_init (MMLogObjectInterface *iface); -@@ -663,6 +664,53 @@ mm_base_manager_num_modems (MMBaseManager *self) - return n; - } - -+/*****************************************************************************/ -+/* Quick resume synchronization */ -+ -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+gboolean mm_base_modem_sync_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+mm_base_modem_sync_ready (MMBaseModem *self, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) error; -+ -+ mm_base_modem_sync_finish (self, res, &error); -+ if (error) { -+ mm_obj_warn (self, "synchronization failed"); -+ return; -+ } -+ mm_obj_info (self, "synchronization finished"); -+} -+ -+void -+mm_base_manager_sync (MMBaseManager *self) -+{ -+ GHashTableIter iter; -+ gpointer key, value; -+ -+ g_return_if_fail (self != NULL); -+ g_return_if_fail (MM_IS_BASE_MANAGER (self)); -+ -+ /* Refresh each device */ -+ g_hash_table_iter_init (&iter, self->priv->devices); -+ while (g_hash_table_iter_next (&iter, &key, &value)) { -+ MMBaseModem *modem = mm_device_peek_modem (MM_DEVICE (value)); -+ /* We just want to start the synchronization, we don't need the result */ -+ mm_base_modem_sync (modem, (GAsyncReadyCallback)mm_base_modem_sync_ready, NULL); -+ } -+} -+ -+#endif -+ - /*****************************************************************************/ - /* Set logging */ - -diff --git a/src/mm-base-manager.h b/src/mm-base-manager.h -index d70fa08f..be51d0c0 100644 ---- a/src/mm-base-manager.h -+++ b/src/mm-base-manager.h -@@ -66,6 +66,10 @@ void mm_base_manager_start (MMBaseManager *manager, - void mm_base_manager_shutdown (MMBaseManager *manager, - gboolean disable); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+void mm_base_manager_sync (MMBaseManager *manager); -+#endif -+ - guint32 mm_base_manager_num_modems (MMBaseManager *manager); - - #endif /* MM_BASE_MANAGER_H */ -diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c -index 926d0712..38f43f8c 100644 ---- a/src/mm-base-modem.c -+++ b/src/mm-base-modem.c -@@ -369,6 +369,161 @@ mm_base_modem_grab_port (MMBaseModem *self, - return TRUE; - } - -+/******************************************************************************/ -+ -+typedef struct { -+ gchar *name; -+ gulong link_port_grabbed_id; -+ guint timeout_id; -+} WaitLinkPortContext; -+ -+static void -+wait_link_port_context_free (WaitLinkPortContext *ctx) -+{ -+ g_assert (!ctx->link_port_grabbed_id); -+ g_assert (!ctx->timeout_id); -+ g_free (ctx->name); -+ g_slice_free (WaitLinkPortContext, ctx); -+} -+ -+MMPort * -+mm_base_modem_wait_link_port_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_pointer (G_TASK (res), error); -+} -+ -+static gboolean -+wait_link_port_timeout_cb (GTask *task) -+{ -+ WaitLinkPortContext *ctx; -+ MMBaseModem *self; -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ ctx->timeout_id = 0; -+ g_signal_handler_disconnect (self, ctx->link_port_grabbed_id); -+ ctx->link_port_grabbed_id = 0; -+ -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_NOT_FOUND, -+ "Timed out waiting for link port 'net/%s'", -+ ctx->name); -+ g_object_unref (task); -+ -+ return G_SOURCE_REMOVE; -+} -+ -+static void -+wait_link_port_grabbed_cb (MMBaseModem *self, -+ MMPort *link_port, -+ GTask *task) -+{ -+ WaitLinkPortContext *ctx; -+ MMPortSubsys link_port_subsystem; -+ const gchar *link_port_name; -+ -+ ctx = g_task_get_task_data (task); -+ -+ link_port_subsystem = mm_port_get_subsys (link_port); -+ link_port_name = mm_port_get_device (link_port); -+ -+ if (link_port_subsystem != MM_PORT_SUBSYS_NET) { -+ mm_obj_warn (self, "unexpected link port subsystem grabbed: %s/%s", -+ mm_port_subsys_get_string (link_port_subsystem), -+ link_port_name); -+ return; -+ } -+ -+ if (g_strcmp0 (link_port_name, ctx->name) != 0) -+ return; -+ -+ /* we got it! */ -+ -+ g_source_remove (ctx->timeout_id); -+ ctx->timeout_id = 0; -+ g_signal_handler_disconnect (self, ctx->link_port_grabbed_id); -+ ctx->link_port_grabbed_id = 0; -+ -+ g_task_return_pointer (task, g_object_ref (link_port), g_object_unref); -+ g_object_unref (task); -+} -+ -+void -+mm_base_modem_wait_link_port (MMBaseModem *self, -+ const gchar *subsystem, -+ const gchar *name, -+ guint timeout_ms, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ WaitLinkPortContext *ctx; -+ GTask *task; -+ g_autofree gchar *key = NULL; -+ MMPort *port; -+ -+ task = g_task_new (self, NULL, callback, user_data); -+ -+ if (!g_str_equal (subsystem, "net")) { -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, -+ "Cannot wait for port '%s/%s', unexpected link port subsystem", subsystem, name); -+ g_object_unref (task); -+ return; -+ } -+ -+ key = g_strdup_printf ("%s%s", subsystem, name); -+ port = g_hash_table_lookup (self->priv->link_ports, key); -+ if (port) { -+ mm_obj_dbg (self, "no need to wait for port '%s/%s': already grabbed", subsystem, name); -+ g_task_return_pointer (task, g_object_ref (port), g_object_unref); -+ g_object_unref (task); -+ return; -+ } -+ -+ ctx = g_slice_new0 (WaitLinkPortContext); -+ ctx->name = g_strdup (name); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)wait_link_port_context_free); -+ -+ /* task ownership shared between timeout and signal handler */ -+ ctx->timeout_id = g_timeout_add (timeout_ms, -+ (GSourceFunc) wait_link_port_timeout_cb, -+ task); -+ ctx->link_port_grabbed_id = g_signal_connect (self, -+ MM_BASE_MODEM_SIGNAL_LINK_PORT_GRABBED, -+ G_CALLBACK (wait_link_port_grabbed_cb), -+ task); -+ -+ mm_obj_dbg (self, "waiting for port '%s/%s'...", subsystem, name); -+} -+ -+/******************************************************************************/ -+ -+static void -+mm_base_modem_sync_ready (MMBaseModem *self, -+ GAsyncResult *res) -+{ -+ g_autoptr (GError) error = NULL; -+ -+ MM_BASE_MODEM_GET_CLASS (self)->sync_finish (self, res, &error); -+ if (error) { -+ mm_obj_warn (self, "synchronization failed"); -+ } -+} -+ -+void -+mm_base_modem_sync (MMBaseModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync != NULL); -+ g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync_finish != NULL); -+ -+ MM_BASE_MODEM_GET_CLASS (self)->sync (self, -+ (GAsyncReadyCallback) mm_base_modem_sync_ready, -+ NULL); -+} -+ - gboolean - mm_base_modem_disable_finish (MMBaseModem *self, - GAsyncResult *res, -diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h -index 24634814..75fd99f5 100644 ---- a/src/mm-base-modem.h -+++ b/src/mm-base-modem.h -@@ -101,6 +101,22 @@ struct _MMBaseModemClass { - gboolean (*disable_finish) (MMBaseModem *self, - GAsyncResult *res, - GError **error); -+ -+ /* Modem synchronization. -+ * When resuming in quick suspend/resume mode, -+ * this method triggers a synchronization of all modem interfaces */ -+ void (* sync) (MMBaseModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ gboolean (* sync_finish) (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error); -+ -+ /* signals */ -+ void (* link_port_grabbed) (MMBaseModem *self, -+ MMPort *link_port); -+ void (* link_port_released) (MMBaseModem *self, -+ MMPort *link_port); - }; - - GType mm_base_modem_get_type (void); -@@ -199,6 +215,13 @@ gboolean mm_base_modem_disable_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); - -+void mm_base_modem_sync (MMBaseModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_base_modem_sync_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error); -+ - void mm_base_modem_process_sim_event (MMBaseModem *self); - - #endif /* MM_BASE_MODEM_H */ -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index a25883ac..6e47757e 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11337,6 +11337,82 @@ enable (MMBaseModem *self, - - g_object_unref (task); - } -+/*****************************************************************************/ -+ -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef enum { -+ SYNCING_STEP_FIRST, -+ SYNCING_STEP_LAST, -+} SyncingStep; -+ -+typedef struct { -+ SyncingStep step; -+} SyncingContext; -+ -+static gboolean -+synchronize_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+syncing_step (GTask *task) -+{ -+ MMBroadbandModem *self; -+ SyncingContext *ctx; -+ -+ /* Don't run new steps if we're cancelled */ -+ if (g_task_return_error_if_cancelled (task)) { -+ g_object_unref (task); -+ return; -+ } -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ switch (ctx->step) { -+ case SYNCING_STEP_FIRST: -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_LAST: -+ mm_obj_info (self, "resume synchronization state (%d/%d): all done", -+ ctx->step, SYNCING_STEP_LAST); -+ /* We are done without errors! */ -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ -+ default: -+ break; -+ } -+ -+ g_assert_not_reached (); -+} -+ -+/* 'sync' as function name conflicts with a declared function in unistd.h */ -+static void -+synchronize (MMBaseModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncingContext *ctx; -+ GTask *task; -+ -+ /* Create SyncingContext */ -+ ctx = g_new0 (SyncingContext, 1); -+ ctx->step = SYNCING_STEP_FIRST; -+ -+ /* Create sync steps task and execute it */ -+ task = g_task_new (MM_BROADBAND_MODEM (self), NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ syncing_step (task); -+} -+ -+#endif - - /*****************************************************************************/ - -@@ -12683,6 +12759,11 @@ mm_broadband_modem_class_init (MMBroadbandModemClass *klass) - base_modem_class->disable = disable; - base_modem_class->disable_finish = disable_finish; - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_modem_class->sync = synchronize; -+ base_modem_class->sync_finish = synchronize_finish; -+#endif -+ - klass->setup_ports = setup_ports; - klass->initialization_started = initialization_started; - klass->initialization_started_finish = initialization_started_finish; -diff --git a/src/mm-context.c b/src/mm-context.c -index 6561127e..691ca82b 100644 ---- a/src/mm-context.c -+++ b/src/mm-context.c -@@ -227,6 +227,7 @@ static gboolean test_no_udev; - #endif - #if defined WITH_SYSTEMD_SUSPEND_RESUME - static gboolean test_no_suspend_resume; -+static gboolean test_quick_suspend_resume; - #endif - - static const GOptionEntry test_entries[] = { -@@ -258,6 +259,11 @@ static const GOptionEntry test_entries[] = { - "Disable suspend/resume support at runtime even if available", - NULL - }, -+ { -+ "test-quick-suspend-resume", 0, 0, G_OPTION_ARG_NONE, &test_quick_suspend_resume, -+ "Enable quick suspend/resume support for modems which stay on during host suspension", -+ NULL -+ }, - #endif - { NULL } - }; -@@ -308,6 +314,11 @@ mm_context_get_test_no_suspend_resume (void) - { - return test_no_suspend_resume; - } -+gboolean -+mm_context_get_test_quick_suspend_resume (void) -+{ -+ return test_quick_suspend_resume; -+} - #endif - - /*****************************************************************************/ -diff --git a/src/mm-context.h b/src/mm-context.h -index 721fee88..276567fd 100644 ---- a/src/mm-context.h -+++ b/src/mm-context.h -@@ -51,6 +51,7 @@ gboolean mm_context_get_test_no_udev (void); - #endif - #if defined WITH_SYSTEMD_SUSPEND_RESUME - gboolean mm_context_get_test_no_suspend_resume (void); -+gboolean mm_context_get_test_quick_suspend_resume (void); - #endif - - #endif /* MM_CONTEXT_H */ --- -2.31.1 - diff --git a/temp/modemmanager/0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch b/temp/modemmanager/0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch deleted file mode 100644 index 72df82baa..000000000 --- a/temp/modemmanager/0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 4853aa702ed298ebceea2e9cd737d048380db38f Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:16:55 +0200 -Subject: [PATCH 02/39] base-manager: make sure g_autoptr() variables are - initialized to NULL - -Otherwise, we may have memory issues if the variable isn't initialized -and the method exits. ---- - src/mm-base-manager.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c -index 0c393f11..5880ffad 100644 ---- a/src/mm-base-manager.c -+++ b/src/mm-base-manager.c -@@ -681,11 +681,11 @@ mm_base_modem_sync_ready (MMBaseModem *self, - GAsyncResult *res, - gpointer user_data) - { -- g_autoptr(GError) error; -+ g_autoptr(GError) error = NULL; - - mm_base_modem_sync_finish (self, res, &error); - if (error) { -- mm_obj_warn (self, "synchronization failed"); -+ mm_obj_warn (self, "synchronization failed: %s", error->message); - return; - } - mm_obj_info (self, "synchronization finished"); --- -2.31.1 - diff --git a/temp/modemmanager/0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch b/temp/modemmanager/0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch deleted file mode 100644 index 8a99cd65c..000000000 --- a/temp/modemmanager/0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From dcea41cebabbcbd91597944fc3ff87c8d9aa5121 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:17:40 +0200 -Subject: [PATCH 03/39] base-manager: don't assume a MMDevice always holds a - MMModem - -There are cases, e.g. during modem object disposal, where this is not -true. ---- - src/mm-base-manager.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c -index 5880ffad..c900eeaa 100644 ---- a/src/mm-base-manager.c -+++ b/src/mm-base-manager.c -@@ -703,9 +703,13 @@ mm_base_manager_sync (MMBaseManager *self) - /* Refresh each device */ - g_hash_table_iter_init (&iter, self->priv->devices); - while (g_hash_table_iter_next (&iter, &key, &value)) { -- MMBaseModem *modem = mm_device_peek_modem (MM_DEVICE (value)); -+ MMBaseModem *modem; -+ -+ modem = mm_device_peek_modem (MM_DEVICE (value)); -+ - /* We just want to start the synchronization, we don't need the result */ -- mm_base_modem_sync (modem, (GAsyncReadyCallback)mm_base_modem_sync_ready, NULL); -+ if (modem) -+ mm_base_modem_sync (modem, (GAsyncReadyCallback)mm_base_modem_sync_ready, NULL); - } - } - --- -2.31.1 - diff --git a/temp/modemmanager/0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch b/temp/modemmanager/0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch deleted file mode 100644 index d6fbff2e3..000000000 --- a/temp/modemmanager/0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch +++ /dev/null @@ -1,39 +0,0 @@ -From d02fad407c451e90fc6cbc0ad99aba86ff303816 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:18:42 +0200 -Subject: [PATCH 04/39] base-manager: avoid using the `mm_` prefix for static - private methods - ---- - src/mm-base-manager.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c -index c900eeaa..5af959fb 100644 ---- a/src/mm-base-manager.c -+++ b/src/mm-base-manager.c -@@ -677,9 +677,9 @@ gboolean mm_base_modem_sync_finish (MMBaseModem *self, - } - - static void --mm_base_modem_sync_ready (MMBaseModem *self, -- GAsyncResult *res, -- gpointer user_data) -+base_modem_sync_ready (MMBaseModem *self, -+ GAsyncResult *res, -+ gpointer user_data) - { - g_autoptr(GError) error = NULL; - -@@ -709,7 +709,7 @@ mm_base_manager_sync (MMBaseManager *self) - - /* We just want to start the synchronization, we don't need the result */ - if (modem) -- mm_base_modem_sync (modem, (GAsyncReadyCallback)mm_base_modem_sync_ready, NULL); -+ mm_base_modem_sync (modem, (GAsyncReadyCallback)base_modem_sync_ready, NULL); - } - } - --- -2.31.1 - diff --git a/temp/modemmanager/0005-base-modem-fix-modem_sync-operation-handling.patch b/temp/modemmanager/0005-base-modem-fix-modem_sync-operation-handling.patch deleted file mode 100644 index c02de15a5..000000000 --- a/temp/modemmanager/0005-base-modem-fix-modem_sync-operation-handling.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 261684e74d4d00df63d7106162e2d0bb42e9652c Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:19:06 +0200 -Subject: [PATCH 05/39] base-modem: fix modem_sync() operation handling - -The mm_base_modem_sync() method is an asynchronous method that -receives a callback and user data, and therefore we MUST always -complete the async method calling that callback. Set that up with a -GTask as usual. - -Also, the mm_base_modem_sync_finish() method should be implemented -along with mm_base_modem_sync(), not in the source file of the -caller of the async method. The finish() always depends on how the -async method was implemented, in our case using a GTask. ---- - src/mm-base-manager.c | 7 ------- - src/mm-base-modem.c | 34 +++++++++++++++++++++++++--------- - 2 files changed, 25 insertions(+), 16 deletions(-) - -diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c -index 5af959fb..236405bb 100644 ---- a/src/mm-base-manager.c -+++ b/src/mm-base-manager.c -@@ -669,13 +669,6 @@ mm_base_manager_num_modems (MMBaseManager *self) - - #if defined WITH_SYSTEMD_SUSPEND_RESUME - --gboolean mm_base_modem_sync_finish (MMBaseModem *self, -- GAsyncResult *res, -- GError **error) --{ -- return g_task_propagate_boolean (G_TASK (res), error); --} -- - static void - base_modem_sync_ready (MMBaseModem *self, - GAsyncResult *res, -diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c -index 38f43f8c..923f159a 100644 ---- a/src/mm-base-modem.c -+++ b/src/mm-base-modem.c -@@ -499,16 +499,26 @@ mm_base_modem_wait_link_port (MMBaseModem *self, - - /******************************************************************************/ - -+gboolean -+mm_base_modem_sync_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ - static void --mm_base_modem_sync_ready (MMBaseModem *self, -- GAsyncResult *res) -+sync_ready (MMBaseModem *self, -+ GAsyncResult *res, -+ GTask *task) - { -- g_autoptr (GError) error = NULL; -+ g_autoptr(GError) error = NULL; - -- MM_BASE_MODEM_GET_CLASS (self)->sync_finish (self, res, &error); -- if (error) { -- mm_obj_warn (self, "synchronization failed"); -- } -+ if (!MM_BASE_MODEM_GET_CLASS (self)->sync_finish (self, res, &error)) -+ g_task_return_error (task, error); -+ else -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); - } - - void -@@ -516,14 +526,20 @@ mm_base_modem_sync (MMBaseModem *self, - GAsyncReadyCallback callback, - gpointer user_data) - { -+ GTask *task; -+ -+ task = g_task_new (self, NULL, callback, user_data); -+ - g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync != NULL); - g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync_finish != NULL); - - MM_BASE_MODEM_GET_CLASS (self)->sync (self, -- (GAsyncReadyCallback) mm_base_modem_sync_ready, -- NULL); -+ (GAsyncReadyCallback) sync_ready, -+ task); - } - -+/******************************************************************************/ -+ - gboolean - mm_base_modem_disable_finish (MMBaseModem *self, - GAsyncResult *res, --- -2.31.1 - diff --git a/temp/modemmanager/0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch b/temp/modemmanager/0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch deleted file mode 100644 index 59b81d7f8..000000000 --- a/temp/modemmanager/0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 053d3f84f0fe4b13ec4586b180cea4aba8fc01ea Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:23:59 +0200 -Subject: [PATCH 06/39] base-modem: don't fail if sync() isn't implemented - ---- - src/mm-base-modem.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c -index 923f159a..28519ad4 100644 ---- a/src/mm-base-modem.c -+++ b/src/mm-base-modem.c -@@ -530,8 +530,13 @@ mm_base_modem_sync (MMBaseModem *self, - - task = g_task_new (self, NULL, callback, user_data); - -- g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync != NULL); -- g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync_finish != NULL); -+ if (!MM_BASE_MODEM_GET_CLASS (self)->sync || -+ !MM_BASE_MODEM_GET_CLASS (self)->sync_finish) { -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, -+ "Suspend/resume quick synchronization unsupported"); -+ g_object_unref (task); -+ return; -+ } - - MM_BASE_MODEM_GET_CLASS (self)->sync (self, - (GAsyncReadyCallback) sync_ready, --- -2.31.1 - diff --git a/temp/modemmanager/0007-base-modem-make-sync-available-only-if-suspend-resum.patch b/temp/modemmanager/0007-base-modem-make-sync-available-only-if-suspend-resum.patch deleted file mode 100644 index 68c3021d3..000000000 --- a/temp/modemmanager/0007-base-modem-make-sync-available-only-if-suspend-resum.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 4cf023022a07011120e18239722626efbded9180 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Wed, 26 May 2021 10:36:47 +0200 -Subject: [PATCH 07/39] base-modem: make sync() available only if - suspend-resume enabled - ---- - src/mm-base-modem.c | 4 ++++ - src/mm-base-modem.h | 6 ++++++ - 2 files changed, 10 insertions(+) - -diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c -index 28519ad4..580103ba 100644 ---- a/src/mm-base-modem.c -+++ b/src/mm-base-modem.c -@@ -499,6 +499,8 @@ mm_base_modem_wait_link_port (MMBaseModem *self, - - /******************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ - gboolean - mm_base_modem_sync_finish (MMBaseModem *self, - GAsyncResult *res, -@@ -543,6 +545,8 @@ mm_base_modem_sync (MMBaseModem *self, - task); - } - -+#endif /* WITH_SYSTEMD_SUSPEND_RESUME */ -+ - /******************************************************************************/ - - gboolean -diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h -index 75fd99f5..d9538251 100644 ---- a/src/mm-base-modem.h -+++ b/src/mm-base-modem.h -@@ -102,6 +102,7 @@ struct _MMBaseModemClass { - GAsyncResult *res, - GError **error); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME - /* Modem synchronization. - * When resuming in quick suspend/resume mode, - * this method triggers a synchronization of all modem interfaces */ -@@ -111,6 +112,7 @@ struct _MMBaseModemClass { - gboolean (* sync_finish) (MMBaseModem *self, - GAsyncResult *res, - GError **error); -+#endif - - /* signals */ - void (* link_port_grabbed) (MMBaseModem *self, -@@ -215,6 +217,8 @@ gboolean mm_base_modem_disable_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ - void mm_base_modem_sync (MMBaseModem *self, - GAsyncReadyCallback callback, - gpointer user_data); -@@ -222,6 +226,8 @@ gboolean mm_base_modem_sync_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); - -+#endif -+ - void mm_base_modem_process_sim_event (MMBaseModem *self); - - #endif /* MM_BASE_MODEM_H */ --- -2.31.1 - diff --git a/temp/modemmanager/0008-broadband-modem-ignore-cancellation-during-sync.patch b/temp/modemmanager/0008-broadband-modem-ignore-cancellation-during-sync.patch deleted file mode 100644 index b70004264..000000000 --- a/temp/modemmanager/0008-broadband-modem-ignore-cancellation-during-sync.patch +++ /dev/null @@ -1,31 +0,0 @@ -From d5ccd5fa9d1b6b5a0367bee7da347efd460f12ca Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:28:02 +0200 -Subject: [PATCH 08/39] broadband-modem: ignore cancellation during sync() - -There is no input cancellable in the method, so the GTask will never -get cancelled from the outside. ---- - src/mm-broadband-modem.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 6e47757e..7d928aa8 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11364,12 +11364,6 @@ syncing_step (GTask *task) - MMBroadbandModem *self; - SyncingContext *ctx; - -- /* Don't run new steps if we're cancelled */ -- if (g_task_return_error_if_cancelled (task)) { -- g_object_unref (task); -- return; -- } -- - self = g_task_get_source_object (task); - ctx = g_task_get_task_data (task); - --- -2.31.1 - diff --git a/temp/modemmanager/0009-broadband-modem-skip-synchronization-after-resume-if.patch b/temp/modemmanager/0009-broadband-modem-skip-synchronization-after-resume-if.patch deleted file mode 100644 index 577bb4522..000000000 --- a/temp/modemmanager/0009-broadband-modem-skip-synchronization-after-resume-if.patch +++ /dev/null @@ -1,53 +0,0 @@ -From d59ca53e142dcbbc6afa3d1ace97ac367f96986f Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 12:35:07 +0200 -Subject: [PATCH 09/39] broadband-modem: skip synchronization after resume if - not needed - -The synchronization after resume should only be needed on enabled -modems, as otherwise there is really no chance that the state of the -modem may have changed during suspend. - -E.g. if a modem is failed because it doesn't have a SIM card, or if -the SIM-PIN is locked, or if the modem has never been enabled, there -is no point in attempting to synchronize the runtime state of the -modem. ---- - src/mm-broadband-modem.c | 17 ++++++++++++++--- - 1 file changed, 14 insertions(+), 3 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 7d928aa8..db6eb8ce 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11396,13 +11396,24 @@ synchronize (MMBaseModem *self, - SyncingContext *ctx; - GTask *task; - -+ task = g_task_new (MM_BROADBAND_MODEM (self), NULL, callback, user_data); -+ -+ /* Synchronization after resume is not needed on modems that have never -+ * been enabled. -+ */ -+ if (MM_BROADBAND_MODEM (self)->priv->modem_state < MM_MODEM_STATE_ENABLED) { -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_WRONG_STATE, -+ "Synchronization after resume not needed in modem state '%s'", -+ mm_modem_state_get_string (MM_BROADBAND_MODEM (self)->priv->modem_state)); -+ g_object_unref (task); -+ return; -+ } -+ - /* Create SyncingContext */ - ctx = g_new0 (SyncingContext, 1); - ctx->step = SYNCING_STEP_FIRST; -- -- /* Create sync steps task and execute it */ -- task = g_task_new (MM_BROADBAND_MODEM (self), NULL, callback, user_data); - g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ - syncing_step (task); - } - --- -2.31.1 - diff --git a/temp/modemmanager/0010-iface-modem-time-synchronize-state-when-resuming.patch b/temp/modemmanager/0010-iface-modem-time-synchronize-state-when-resuming.patch deleted file mode 100644 index 530c8b70a..000000000 --- a/temp/modemmanager/0010-iface-modem-time-synchronize-state-when-resuming.patch +++ /dev/null @@ -1,196 +0,0 @@ -From 5b3585829a4752a4b53e725a22858aa759fac472 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sat, 1 May 2021 15:53:55 +0200 -Subject: [PATCH 10/39] iface-modem-time: synchronize state when resuming - -On resume, fetch the current network time as -the network time may be changed when suspended. ---- - src/mm-broadband-modem.c | 30 ++++++++++++++ - src/mm-iface-modem-time.c | 84 +++++++++++++++++++++++++++++++++++++++ - src/mm-iface-modem-time.h | 12 ++++++ - 3 files changed, 126 insertions(+) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index db6eb8ce..0e4f4740 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11343,6 +11343,7 @@ enable (MMBaseModem *self, - - typedef enum { - SYNCING_STEP_FIRST, -+ SYNCING_STEP_IFACE_TIME, - SYNCING_STEP_LAST, - } SyncingStep; - -@@ -11350,6 +11351,8 @@ typedef struct { - SyncingStep step; - } SyncingContext; - -+static void syncing_step (GTask *task); -+ - static gboolean - synchronize_finish (MMBaseModem *self, - GAsyncResult *res, -@@ -11358,6 +11361,24 @@ synchronize_finish (MMBaseModem *self, - return g_task_propagate_boolean (G_TASK (res), error); - } - -+static void -+iface_modem_time_sync_ready (MMIfaceModemTime *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr(GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ if (!mm_iface_modem_time_sync_finish (self, res, &error)) -+ mm_obj_warn (self, "time interface synchronization failed: %s", error->message); -+ -+ /* Go on to next step */ -+ ctx->step++; -+ syncing_step (task); -+} -+ - static void - syncing_step (GTask *task) - { -@@ -11372,6 +11393,15 @@ syncing_step (GTask *task) - ctx->step++; - /* fall through */ - -+ case SYNCING_STEP_IFACE_TIME: -+ /* -+ * Synchronize asynchronously the Time interface. -+ */ -+ mm_obj_info (self, "resume synchronization state (%d/%d): time interface sync", -+ ctx->step, SYNCING_STEP_LAST); -+ mm_iface_modem_time_sync (MM_IFACE_MODEM_TIME (self), (GAsyncReadyCallback)iface_modem_time_sync_ready, task); -+ return; -+ - case SYNCING_STEP_LAST: - mm_obj_info (self, "resume synchronization state (%d/%d): all done", - ctx->step, SYNCING_STEP_LAST); -diff --git a/src/mm-iface-modem-time.c b/src/mm-iface-modem-time.c -index 5770e7b7..e262b71d 100644 ---- a/src/mm-iface-modem-time.c -+++ b/src/mm-iface-modem-time.c -@@ -728,6 +728,90 @@ mm_iface_modem_time_enable (MMIfaceModemTime *self, - - /*****************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef struct _SyncingContext SyncingContext; -+static void interface_syncing_step (GTask *task); -+ -+typedef enum { -+ SYNCING_STEP_FIRST, -+ SYNCING_STEP_REFRESH_NETWORK_TIMEZONE, -+ SYNCING_STEP_LAST -+} SyncingStep; -+ -+struct _SyncingContext { -+ SyncingStep step; -+}; -+ -+gboolean -+mm_iface_modem_time_sync_finish (MMIfaceModemTime *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+interface_syncing_step (GTask *task) -+{ -+ MMIfaceModemTime *self; -+ SyncingContext *ctx; -+ -+ /* Don't run new steps if we're cancelled */ -+ if (g_task_return_error_if_cancelled (task)) { -+ g_object_unref (task); -+ return; -+ } -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ switch (ctx->step) { -+ case SYNCING_STEP_FIRST: -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_REFRESH_NETWORK_TIMEZONE: -+ /* We start it and schedule it to run asynchronously */ -+ start_network_timezone (self); -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_LAST: -+ /* We are done without errors! */ -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ -+ default: -+ break; -+ } -+ -+ g_assert_not_reached (); -+} -+ -+void -+mm_iface_modem_time_sync (MMIfaceModemTime *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncingContext *ctx; -+ GTask *task; -+ -+ /* Create SyncingContext */ -+ ctx = g_new0 (SyncingContext, 1); -+ ctx->step = SYNCING_STEP_FIRST; -+ -+ /* Create sync steps task and execute it */ -+ task = g_task_new (self, NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ interface_syncing_step (task); -+} -+ -+#endif -+ -+/*****************************************************************************/ -+ - typedef struct _InitializationContext InitializationContext; - static void interface_initialization_step (GTask *task); - -diff --git a/src/mm-iface-modem-time.h b/src/mm-iface-modem-time.h -index ca0640d6..a3ac7074 100644 ---- a/src/mm-iface-modem-time.h -+++ b/src/mm-iface-modem-time.h -@@ -125,6 +125,18 @@ gboolean mm_iface_modem_time_disable_finish (MMIfaceModemTime *self, - /* Shutdown Time interface */ - void mm_iface_modem_time_shutdown (MMIfaceModemTime *self); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+/* Sync Time interface (async) */ -+void mm_iface_modem_time_sync (MMIfaceModemTime *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_iface_modem_time_sync_finish (MMIfaceModemTime *self, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - /* Bind properties for simple GetStatus() */ - void mm_iface_modem_time_bind_simple_status (MMIfaceModemTime *self, - MMSimpleStatus *status); --- -2.31.1 - diff --git a/temp/modemmanager/0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch b/temp/modemmanager/0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch deleted file mode 100644 index eb19473dd..000000000 --- a/temp/modemmanager/0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 3ab85a1487e67ce8faf833bafc4c5dad430af396 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:31:13 +0200 -Subject: [PATCH 11/39] broadband-modem: skip time interface sync if no time - support - ---- - src/mm-broadband-modem.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 0e4f4740..91e023b8 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11397,10 +11397,14 @@ syncing_step (GTask *task) - /* - * Synchronize asynchronously the Time interface. - */ -- mm_obj_info (self, "resume synchronization state (%d/%d): time interface sync", -- ctx->step, SYNCING_STEP_LAST); -- mm_iface_modem_time_sync (MM_IFACE_MODEM_TIME (self), (GAsyncReadyCallback)iface_modem_time_sync_ready, task); -- return; -+ if (self->priv->modem_time_dbus_skeleton) { -+ mm_obj_info (self, "resume synchronization state (%d/%d): time interface sync", -+ ctx->step, SYNCING_STEP_LAST); -+ mm_iface_modem_time_sync (MM_IFACE_MODEM_TIME (self), (GAsyncReadyCallback)iface_modem_time_sync_ready, task); -+ return; -+ } -+ ctx->step++; -+ /* fall through */ - - case SYNCING_STEP_LAST: - mm_obj_info (self, "resume synchronization state (%d/%d): all done", --- -2.31.1 - diff --git a/temp/modemmanager/0012-iface-modem-time-ignore-cancellation-during-sync.patch b/temp/modemmanager/0012-iface-modem-time-ignore-cancellation-during-sync.patch deleted file mode 100644 index 79f9f6e39..000000000 --- a/temp/modemmanager/0012-iface-modem-time-ignore-cancellation-during-sync.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 35872aad3036c9c98cd3b1b6201c8057ac74ffc3 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 15:44:45 +0200 -Subject: [PATCH 12/39] iface-modem-time: ignore cancellation during sync() - -There is no input cancellable in the method, so the GTask will never -get cancelled from the outside. ---- - src/mm-iface-modem-time.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/src/mm-iface-modem-time.c b/src/mm-iface-modem-time.c -index e262b71d..0d4f3764 100644 ---- a/src/mm-iface-modem-time.c -+++ b/src/mm-iface-modem-time.c -@@ -757,12 +757,6 @@ interface_syncing_step (GTask *task) - MMIfaceModemTime *self; - SyncingContext *ctx; - -- /* Don't run new steps if we're cancelled */ -- if (g_task_return_error_if_cancelled (task)) { -- g_object_unref (task); -- return; -- } -- - self = g_task_get_source_object (task); - ctx = g_task_get_task_data (task); - --- -2.31.1 - diff --git a/temp/modemmanager/0013-iface-modem-3gpp-synchronize-state-when-resuming.patch b/temp/modemmanager/0013-iface-modem-3gpp-synchronize-state-when-resuming.patch deleted file mode 100644 index de053138b..000000000 --- a/temp/modemmanager/0013-iface-modem-3gpp-synchronize-state-when-resuming.patch +++ /dev/null @@ -1,283 +0,0 @@ -From f5acb7ce85fec0c6cf1d284c125008b961f7a56e Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sat, 13 Mar 2021 19:28:19 +0100 -Subject: [PATCH 13/39] iface-modem-3gpp: synchronize state when resuming - -On resume, refresh the EPS bearers and 3GPP registration -as the registration and bearers may expired during suspend. ---- - src/mm-broadband-modem.c | 31 +++++++ - src/mm-iface-modem-3gpp.c | 177 ++++++++++++++++++++++++++++++++++++++ - src/mm-iface-modem-3gpp.h | 12 +++ - 3 files changed, 220 insertions(+) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 91e023b8..05d72875 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11343,6 +11343,7 @@ enable (MMBaseModem *self, - - typedef enum { - SYNCING_STEP_FIRST, -+ SYNCING_STEP_IFACE_3GPP, - SYNCING_STEP_IFACE_TIME, - SYNCING_STEP_LAST, - } SyncingStep; -@@ -11379,6 +11380,24 @@ iface_modem_time_sync_ready (MMIfaceModemTime *self, - syncing_step (task); - } - -+static void -+iface_modem_3gpp_sync_ready (MMBroadbandModem *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr(GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ if (!mm_iface_modem_3gpp_sync_finish (MM_IFACE_MODEM_3GPP (self), res, &error)) -+ mm_obj_warn (self, "3GPP interface synchronization failed: %s", error->message); -+ -+ /* Go on to next step */ -+ ctx->step++; -+ syncing_step (task); -+} -+ - static void - syncing_step (GTask *task) - { -@@ -11393,6 +11412,18 @@ syncing_step (GTask *task) - ctx->step++; - /* fall through */ - -+ case SYNCING_STEP_IFACE_3GPP: -+ /* -+ * Start interface 3GPP synchronization. -+ * We hardly depend on the registration and bearer status, -+ * therefore we cannot continue with the other steps until -+ * this one is finished. -+ */ -+ mm_obj_info (self, "resume synchronization state (%d/%d): 3GPP interface sync", -+ ctx->step, SYNCING_STEP_LAST); -+ mm_iface_modem_3gpp_sync (MM_IFACE_MODEM_3GPP (self), (GAsyncReadyCallback)iface_modem_3gpp_sync_ready, task); -+ return; -+ - case SYNCING_STEP_IFACE_TIME: - /* - * Synchronize asynchronously the Time interface. -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index 93899355..c435da87 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -2341,6 +2341,183 @@ mm_iface_modem_3gpp_enable (MMIfaceModem3gpp *self, - - /*****************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef struct _SyncingContext SyncingContext; -+static void interface_syncing_step (GTask *task); -+ -+typedef enum { -+ SYNCING_STEP_FIRST, -+ SYNCING_STEP_REFRESH_3GPP_REGISTRATION, -+ SYNCING_STEP_REFRESH_EPS_BEARER, -+ SYNCING_STEP_LAST -+} SyncingStep; -+ -+struct _SyncingContext { -+ SyncingStep step; -+}; -+ -+gboolean -+mm_iface_modem_3gpp_sync_finish (MMIfaceModem3gpp *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+sync_eps_bearer_ready (MMIfaceModem3gpp *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ MMBearerProperties *properties; -+ SyncingContext *ctx; -+ g_autoptr (GError) error = NULL; -+ -+ mm_obj_dbg (self, "EPS bearer sync ready"); -+ ctx = g_task_get_task_data (task); -+ -+ properties = MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer_finish (self, res, &error); -+ if (!properties) { -+ mm_obj_dbg (self, "couldn't refresh EPS bearer properties: %s", error->message); -+ } else { -+ mm_iface_modem_3gpp_update_initial_eps_bearer (self, properties); -+ g_object_unref (properties); -+ } -+ -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+sync_eps_bearer (MMIfaceModem3gpp *self, -+ GAsyncReadyCallback callback, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ gboolean eps_supported = FALSE; -+ -+ g_object_get (self, -+ MM_IFACE_MODEM_3GPP_EPS_NETWORK_SUPPORTED, &eps_supported, -+ NULL); -+ -+ /* Refresh EPS bearer if supported */ -+ if (eps_supported && -+ MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer && -+ MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer_finish) { -+ MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer ( -+ self, -+ callback, -+ task); -+ return; -+ } -+ -+ /* If EPS is unsupported, just go to the next step */ -+ ctx = g_task_get_task_data (task); -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+sync_registration_ready (MMIfaceModem3gpp *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr (GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error); -+ if (error) { -+ mm_obj_dbg (self, "Synchronizing 3GPP registration failed: %s", error->message); -+ g_error_free (error); -+ } -+ -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step(task); -+} -+ -+static void -+interface_syncing_step (GTask *task) -+{ -+ MMIfaceModem3gpp *self; -+ SyncingContext *ctx; -+ -+ /* Don't run new steps if we're cancelled */ -+ if (g_task_return_error_if_cancelled (task)) { -+ g_object_unref (task); -+ return; -+ } -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ switch (ctx->step) { -+ case SYNCING_STEP_FIRST: -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_REFRESH_3GPP_REGISTRATION: -+ /* -+ * Refresh registration info to verify that the modem is still registered. -+ * Wait until registration checks are complete before going to the next step. -+ */ -+ mm_iface_modem_3gpp_run_registration_checks ( -+ self, -+ (GAsyncReadyCallback)sync_registration_ready, -+ task); -+ return; -+ -+ case SYNCING_STEP_REFRESH_EPS_BEARER: -+ /* -+ * Refresh EPS bearer and wait until complete. -+ * We want to make sure that the modem is fully enabled again -+ * when we refresh the mobile data connection bearers. -+ */ -+ sync_eps_bearer ( -+ self, -+ (GAsyncReadyCallback)sync_eps_bearer_ready, -+ task); -+ return; -+ -+ case SYNCING_STEP_LAST: -+ /* We are done without errors! */ -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ -+ default: -+ break; -+ } -+ -+ g_assert_not_reached (); -+} -+ -+void -+mm_iface_modem_3gpp_sync (MMIfaceModem3gpp *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncingContext *ctx; -+ GTask *task; -+ -+ /* Create SyncingContext */ -+ ctx = g_new0 (SyncingContext, 1); -+ ctx->step = SYNCING_STEP_FIRST; -+ -+ /* Create sync steps task and execute it */ -+ task = g_task_new (self, NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ interface_syncing_step (task); -+} -+ -+#endif -+ -+/*****************************************************************************/ -+ - typedef struct _InitializationContext InitializationContext; - static void interface_initialization_step (GTask *task); - -diff --git a/src/mm-iface-modem-3gpp.h b/src/mm-iface-modem-3gpp.h -index 258e5c10..027bef0f 100644 ---- a/src/mm-iface-modem-3gpp.h -+++ b/src/mm-iface-modem-3gpp.h -@@ -265,6 +265,18 @@ gboolean mm_iface_modem_3gpp_disable_finish (MMIfaceModem3gpp *self, - GAsyncResult *res, - GError **error); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+/* Sync 3GPP interface (async) */ -+void mm_iface_modem_3gpp_sync (MMIfaceModem3gpp *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_iface_modem_3gpp_sync_finish (MMIfaceModem3gpp *self, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - /* Shutdown Modem 3GPP interface */ - void mm_iface_modem_3gpp_shutdown (MMIfaceModem3gpp *self); - --- -2.31.1 - diff --git a/temp/modemmanager/0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch b/temp/modemmanager/0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch deleted file mode 100644 index 10884ca69..000000000 --- a/temp/modemmanager/0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch +++ /dev/null @@ -1,44 +0,0 @@ -From fa6b6f69d4a2646e6695722372d9aa6b3d327151 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:14:27 +0200 -Subject: [PATCH 14/39] iface-modem-3gpp: use g_autoptr() for the - MMBearerProperties during sync - ---- - src/mm-iface-modem-3gpp.c | 14 ++++++-------- - 1 file changed, 6 insertions(+), 8 deletions(-) - -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index c435da87..c6db5e4f 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -2370,20 +2370,18 @@ sync_eps_bearer_ready (MMIfaceModem3gpp *self, - GAsyncResult *res, - GTask *task) - { -- MMBearerProperties *properties; -- SyncingContext *ctx; -- g_autoptr (GError) error = NULL; -+ SyncingContext *ctx; -+ g_autoptr(MMBearerProperties) properties = NULL; -+ g_autoptr(GError) error = NULL; - - mm_obj_dbg (self, "EPS bearer sync ready"); - ctx = g_task_get_task_data (task); - - properties = MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer_finish (self, res, &error); -- if (!properties) { -- mm_obj_dbg (self, "couldn't refresh EPS bearer properties: %s", error->message); -- } else { -+ if (!properties) -+ mm_obj_dbg (self, "couldn't refresh initial EPS bearer status: %s", error->message); -+ else - mm_iface_modem_3gpp_update_initial_eps_bearer (self, properties); -- g_object_unref (properties); -- } - - /* Go on to next step */ - ctx->step++; --- -2.31.1 - diff --git a/temp/modemmanager/0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch b/temp/modemmanager/0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch deleted file mode 100644 index f46ab65b9..000000000 --- a/temp/modemmanager/0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4edb8e6c04347a0224d782f27ada1ad8d984fc91 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:15:30 +0200 -Subject: [PATCH 15/39] iface-modem-3gpp: fix double GError free on - registration sync failure - ---- - src/mm-iface-modem-3gpp.c | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index c6db5e4f..f0e9fe31 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -2427,11 +2427,8 @@ sync_registration_ready (MMIfaceModem3gpp *self, - - ctx = g_task_get_task_data (task); - -- mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error); -- if (error) { -- mm_obj_dbg (self, "Synchronizing 3GPP registration failed: %s", error->message); -- g_error_free (error); -- } -+ if (!mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error)) -+ mm_obj_dbg (self, "couldn't synchronize 3GPP registration: %s", error->message); - - /* Go on to next step */ - ctx->step++; --- -2.31.1 - diff --git a/temp/modemmanager/0016-iface-modem-3gpp-remove-redundant-log-message.patch b/temp/modemmanager/0016-iface-modem-3gpp-remove-redundant-log-message.patch deleted file mode 100644 index 9cb236607..000000000 --- a/temp/modemmanager/0016-iface-modem-3gpp-remove-redundant-log-message.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 346ca78aa710c0081af08838d5f31fc5a76065c2 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:17:57 +0200 -Subject: [PATCH 16/39] iface-modem-3gpp: remove redundant log message - -It doesn't give us any valuable information, so just remove it. ---- - src/mm-iface-modem-3gpp.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index f0e9fe31..cc39fa08 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -2374,7 +2374,6 @@ sync_eps_bearer_ready (MMIfaceModem3gpp *self, - g_autoptr(MMBearerProperties) properties = NULL; - g_autoptr(GError) error = NULL; - -- mm_obj_dbg (self, "EPS bearer sync ready"); - ctx = g_task_get_task_data (task); - - properties = MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->load_initial_eps_bearer_finish (self, res, &error); --- -2.31.1 - diff --git a/temp/modemmanager/0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch b/temp/modemmanager/0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch deleted file mode 100644 index 47737a83c..000000000 --- a/temp/modemmanager/0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 290de72a45dd44ae376299d239390ff477c93982 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 15:44:22 +0200 -Subject: [PATCH 17/39] iface-modem-3gpp: ignore cancellation during sync() - -There is no input cancellable in the method, so the GTask will never -get cancelled from the outside. ---- - src/mm-iface-modem-3gpp.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index cc39fa08..660eec65 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -2440,12 +2440,6 @@ interface_syncing_step (GTask *task) - MMIfaceModem3gpp *self; - SyncingContext *ctx; - -- /* Don't run new steps if we're cancelled */ -- if (g_task_return_error_if_cancelled (task)) { -- g_object_unref (task); -- return; -- } -- - self = g_task_get_source_object (task); - ctx = g_task_get_task_data (task); - --- -2.31.1 - diff --git a/temp/modemmanager/0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch b/temp/modemmanager/0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch deleted file mode 100644 index 4ab357634..000000000 --- a/temp/modemmanager/0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch +++ /dev/null @@ -1,38 +0,0 @@ -From beaefd7ce80732a90597561eb28d103c4249d471 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:26:12 +0200 -Subject: [PATCH 18/39] broadband-modem: fix type in the ready() for - iface_modem_3gpp_sync() - -When calling an async method ona given type, the convention is to use -the same type in the corresponding ready() method, so that we can use -it without additional casts on the finish(). ---- - src/mm-broadband-modem.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 05d72875..908795cf 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11381,7 +11381,7 @@ iface_modem_time_sync_ready (MMIfaceModemTime *self, - } - - static void --iface_modem_3gpp_sync_ready (MMBroadbandModem *self, -+iface_modem_3gpp_sync_ready (MMIfaceModem3gpp *self, - GAsyncResult *res, - GTask *task) - { -@@ -11390,7 +11390,7 @@ iface_modem_3gpp_sync_ready (MMBroadbandModem *self, - - ctx = g_task_get_task_data (task); - -- if (!mm_iface_modem_3gpp_sync_finish (MM_IFACE_MODEM_3GPP (self), res, &error)) -+ if (!mm_iface_modem_3gpp_sync_finish (self, res, &error)) - mm_obj_warn (self, "3GPP interface synchronization failed: %s", error->message); - - /* Go on to next step */ --- -2.31.1 - diff --git a/temp/modemmanager/0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch b/temp/modemmanager/0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch deleted file mode 100644 index 0427ca082..000000000 --- a/temp/modemmanager/0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1bfbb4a27fe5d88332dd1394c6b3aae4527661f6 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:32:20 +0200 -Subject: [PATCH 19/39] broadband-modem: skip 3GPP interface sync if no 3GPP - support - ---- - src/mm-broadband-modem.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 908795cf..05a86af3 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11419,10 +11419,14 @@ syncing_step (GTask *task) - * therefore we cannot continue with the other steps until - * this one is finished. - */ -- mm_obj_info (self, "resume synchronization state (%d/%d): 3GPP interface sync", -- ctx->step, SYNCING_STEP_LAST); -- mm_iface_modem_3gpp_sync (MM_IFACE_MODEM_3GPP (self), (GAsyncReadyCallback)iface_modem_3gpp_sync_ready, task); -- return; -+ if (self->priv->modem_3gpp_dbus_skeleton) { -+ mm_obj_info (self, "resume synchronization state (%d/%d): 3GPP interface sync", -+ ctx->step, SYNCING_STEP_LAST); -+ mm_iface_modem_3gpp_sync (MM_IFACE_MODEM_3GPP (self), (GAsyncReadyCallback)iface_modem_3gpp_sync_ready, task); -+ return; -+ } -+ ctx->step++; -+ /* fall through */ - - case SYNCING_STEP_IFACE_TIME: - /* --- -2.31.1 - diff --git a/temp/modemmanager/0020-iface-modem-synchronize-state-when-resuming.patch b/temp/modemmanager/0020-iface-modem-synchronize-state-when-resuming.patch deleted file mode 100644 index 12bc3f875..000000000 --- a/temp/modemmanager/0020-iface-modem-synchronize-state-when-resuming.patch +++ /dev/null @@ -1,371 +0,0 @@ -From 97cbdf4eb409afa4a7eca6d8dbadc65c39a008b1 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sun, 14 Mar 2021 09:53:49 +0100 -Subject: [PATCH 20/39] iface-modem: synchronize state when resuming - -Refresh signal strength and access technologies, -check for SIM swaps, and check if the SIM is locked. -The modem may have switched to a different -access technologies or have a different signal strength -when resuming. Moreover, the user may swap or remove -the SIM when suspended. ---- - src/mm-broadband-modem.c | 44 ++++++++++ - src/mm-iface-modem-3gpp.c | 2 +- - src/mm-iface-modem.c | 177 ++++++++++++++++++++++++++++++++++++-- - src/mm-iface-modem.h | 23 ++++- - 4 files changed, 238 insertions(+), 8 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 05a86af3..b99a38a6 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11343,6 +11343,7 @@ enable (MMBaseModem *self, - - typedef enum { - SYNCING_STEP_FIRST, -+ SYNCING_STEP_IFACE_MODEM, - SYNCING_STEP_IFACE_3GPP, - SYNCING_STEP_IFACE_TIME, - SYNCING_STEP_LAST, -@@ -11398,6 +11399,36 @@ iface_modem_3gpp_sync_ready (MMIfaceModem3gpp *self, - syncing_step (task); - } - -+static void -+iface_modem_sync_ready (MMIfaceModem *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ MMModemLock lock; -+ g_autoptr (GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ lock = mm_iface_modem_get_unlock_required (self); -+ -+ if (!mm_iface_modem_sync_finish (self, res, &error)) { -+ mm_obj_warn (self, "synchronizing Modem interface failed: %s", error->message); -+ } -+ -+ /* SIM is locked, skip synchronization */ -+ if (lock == MM_MODEM_LOCK_UNKNOWN || lock == MM_MODEM_LOCK_SIM_PIN || lock == MM_MODEM_LOCK_SIM_PUK) { -+ mm_obj_warn (self, "SIM is locked... Synchronization skipped"); -+ ctx->step = SYNCING_STEP_LAST; -+ syncing_step (task); -+ } -+ -+ /* Not locked, go on to next step */ -+ mm_obj_dbg (self, "modem unlocked, continue synchronization"); -+ ctx->step++; -+ syncing_step (task); -+ return; -+} -+ - static void - syncing_step (GTask *task) - { -@@ -11412,6 +11443,19 @@ syncing_step (GTask *task) - ctx->step++; - /* fall through */ - -+ case SYNCING_STEP_IFACE_MODEM: -+ /* -+ * Start interface Modem synchronization. -+ * We want to make sure that the SIM is unlocked and not swapped before -+ * synchronizing other interfaces. -+ */ -+ mm_obj_info (self, "resume synchronization state (%d/%d): Modem interface sync", -+ ctx->step, SYNCING_STEP_LAST); -+ mm_iface_modem_sync (MM_IFACE_MODEM (self), -+ (GAsyncReadyCallback)iface_modem_sync_ready, -+ task); -+ return; -+ - case SYNCING_STEP_IFACE_3GPP: - /* - * Start interface 3GPP synchronization. -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index 660eec65..ea1ab7cb 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -314,7 +314,7 @@ run_registration_checks_ready (MMIfaceModem3gpp *self, - * from home to roaming or viceversa, both registered states, so there - * wouldn't be an explicit refresh triggered from the modem interface as - * the modem never got un-registered during the sequence. */ -- mm_iface_modem_refresh_signal (MM_IFACE_MODEM (ctx->self)); -+ mm_iface_modem_refresh_signal (MM_IFACE_MODEM (ctx->self), FALSE); - mm_obj_dbg (self, "currently registered in a 3GPP network"); - g_task_return_boolean (task, TRUE); - g_object_unref (task); -diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c -index 7a84a6d2..f208e92a 100644 ---- a/src/mm-iface-modem.c -+++ b/src/mm-iface-modem.c -@@ -1587,12 +1587,28 @@ periodic_signal_check_cb (MMIfaceModem *self) - } - - void --mm_iface_modem_refresh_signal (MMIfaceModem *self) -+mm_iface_modem_refresh_signal (MMIfaceModem *self, -+ gboolean enforce) - { - SignalCheckContext *ctx; - -- /* Don't refresh polling if we're not enabled */ - ctx = get_signal_check_context (self); -+ -+ /* -+ * If enforced, poll once explicitly to make sure the signal strength -+ * and access technologies are updated. -+ * -+ * Modems with signal indication support block periodic polling scheduling. -+ * With enforce == TRUE, the periodic polling logic can run once as -+ * it override once the periodic polling prohibition. -+ * When the polling is complete, the periodic polling scheduling -+ * is blocked again to avoid that modems with signal indication support -+ * are periodic polled for their signal status. -+ */ -+ if (enforce) -+ ctx->enabled = TRUE; -+ -+ /* Don't refresh polling if we're not enabled */ - if (!ctx->enabled) { - mm_obj_dbg (self, "periodic signal check refresh ignored: checks not enabled"); - return; -@@ -1671,7 +1687,7 @@ periodic_signal_check_enable (MMIfaceModem *self) - } - - /* And refresh, which will trigger the first check at high frequency */ -- mm_iface_modem_refresh_signal (self); -+ mm_iface_modem_refresh_signal (self, FALSE); - } - - /*****************************************************************************/ -@@ -2345,7 +2361,7 @@ set_current_capabilities_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Capabilities updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self); -+ mm_iface_modem_refresh_signal (self, FALSE); - mm_gdbus_modem_complete_set_current_capabilities (ctx->skeleton, ctx->invocation); - } - -@@ -2835,7 +2851,7 @@ handle_set_current_bands_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Bands updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self); -+ mm_iface_modem_refresh_signal (self, FALSE); - mm_gdbus_modem_complete_set_current_bands (ctx->skeleton, ctx->invocation); - } - -@@ -3222,7 +3238,7 @@ handle_set_current_modes_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Modes updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self); -+ mm_iface_modem_refresh_signal (self, FALSE); - mm_gdbus_modem_complete_set_current_modes (ctx->skeleton, ctx->invocation); - } - -@@ -4206,6 +4222,155 @@ mm_iface_modem_enable (MMIfaceModem *self, - interface_enabling_step (task); - } - -+/*****************************************************************************/ -+/* MODEM SYNCHRONIZATION */ -+ -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef struct _SyncingContext SyncingContext; -+static void interface_syncing_step (GTask *task); -+ -+typedef enum { -+ SYNCING_STEP_FIRST, -+ SYNCING_STEP_DETECT_SIM_SWAP, -+ SYNCING_STEP_REFRESH_SIM_LOCK, -+ SYNCING_STEP_REFRESH_SIGNAL_STRENGTH, -+ SYNCING_STEP_LAST -+} SyncingStep; -+ -+struct _SyncingContext { -+ SyncingStep step; -+}; -+ -+gboolean -+mm_iface_modem_sync_finish (MMIfaceModem *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+sync_sim_lock_ready (MMIfaceModem *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr (GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ if (!MM_IFACE_MODEM_GET_INTERFACE (self)->load_unlock_required_finish (self, res, &error)) -+ mm_obj_warn (self, "checking sim lock status failed: %s", error->message); -+ -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+sync_detect_sim_swap_ready (MMIfaceModem *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr (GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ if (!mm_iface_modem_check_for_sim_swap_finish (self, res, &error)) -+ mm_obj_warn (self, "checking sim swap failed: %s", error->message); -+ -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+interface_syncing_step (GTask *task) -+{ -+ MMIfaceModem *self; -+ SyncingContext *ctx; -+ -+ /* Don't run new steps if we're cancelled */ -+ if (g_task_return_error_if_cancelled (task)) { -+ g_object_unref (task); -+ return; -+ } -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ switch (ctx->step) { -+ case SYNCING_STEP_FIRST: -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_DETECT_SIM_SWAP: -+ /* -+ * Detect possible SIM swaps. -+ * Checking lock status in all cases after possible SIM swaps are detected. -+ */ -+ mm_iface_modem_check_for_sim_swap ( -+ self, -+ 0, -+ NULL, -+ (GAsyncReadyCallback)sync_detect_sim_swap_ready, -+ task); -+ return; -+ -+ case SYNCING_STEP_REFRESH_SIM_LOCK: -+ /* -+ * Refresh SIM lock status and wait until complete. -+ */ -+ MM_IFACE_MODEM_GET_INTERFACE (self)->load_unlock_required ( -+ self, -+ FALSE, -+ (GAsyncReadyCallback)sync_sim_lock_ready, -+ task); -+ return; -+ -+ case SYNCING_STEP_REFRESH_SIGNAL_STRENGTH: -+ /* -+ * Start a signal strength and access technologies refresh sequence. -+ */ -+ mm_iface_modem_refresh_signal (self, TRUE); -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_LAST: -+ /* We are done without errors! */ -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ -+ default: -+ break; -+ } -+ -+ g_assert_not_reached (); -+} -+ -+void -+mm_iface_modem_sync (MMIfaceModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncingContext *ctx; -+ GTask *task; -+ -+ /* Create SyncingContext */ -+ ctx = g_new0 (SyncingContext, 1); -+ ctx->step = SYNCING_STEP_FIRST; -+ -+ /* Create sync steps task and execute it */ -+ task = g_task_new (self, NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ interface_syncing_step (task); -+} -+ -+#endif -+ - /*****************************************************************************/ - /* MODEM INITIALIZATION */ - -diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h -index 66d43ac0..1cd4bdd1 100644 ---- a/src/mm-iface-modem.h -+++ b/src/mm-iface-modem.h -@@ -460,6 +460,27 @@ gboolean mm_iface_modem_disable_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error); - -+/* Shutdown Modem interface */ -+void mm_iface_modem_shutdown (MMIfaceModem *self); -+ -+/* Helper to return an error when the modem is in failed state and so it -+ * cannot process a given method invocation -+ */ -+gboolean mm_iface_modem_abort_invocation_if_state_not_reached (MMIfaceModem *self, -+ GDBusMethodInvocation *invocation, -+ MMModemState minimum_required); -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+/* Sync Modem interface (async) */ -+void mm_iface_modem_sync (MMIfaceModem *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_iface_modem_sync_finish (MMIfaceModem *self, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - /* Allow setting power state */ - void mm_iface_modem_set_power_state (MMIfaceModem *self, - MMModemPowerState power_state, -@@ -526,7 +547,7 @@ void mm_iface_modem_update_signal_quality (MMIfaceModem *self, - guint signal_quality); - - /* Allow requesting to refresh signal via polling */ --void mm_iface_modem_refresh_signal (MMIfaceModem *self); -+void mm_iface_modem_refresh_signal (MMIfaceModem *self, gboolean enforce); - - /* Allow setting allowed modes */ - void mm_iface_modem_set_current_modes (MMIfaceModem *self, --- -2.31.1 - diff --git a/temp/modemmanager/0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch b/temp/modemmanager/0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch deleted file mode 100644 index 9a76f5af8..000000000 --- a/temp/modemmanager/0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 3ecb20084844dfccad6353abf38505d3c7635fd4 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:34:35 +0200 -Subject: [PATCH 21/39] broadband-modem: fail synchronization if no modem - exported in DBus - ---- - src/mm-broadband-modem.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index b99a38a6..8c5f7acd 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11449,7 +11449,13 @@ syncing_step (GTask *task) - * We want to make sure that the SIM is unlocked and not swapped before - * synchronizing other interfaces. - */ -- mm_obj_info (self, "resume synchronization state (%d/%d): Modem interface sync", -+ if (!self->priv->modem_dbus_skeleton) { -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_ABORTED, -+ "Synchronization aborted: no modem exposed in DBus"); -+ g_object_unref (task); -+ return; -+ } -+ mm_obj_info (self, "resume synchronization state (%d/%d): modem interface sync", - ctx->step, SYNCING_STEP_LAST); - mm_iface_modem_sync (MM_IFACE_MODEM (self), - (GAsyncReadyCallback)iface_modem_sync_ready, --- -2.31.1 - diff --git a/temp/modemmanager/0022-broadband-modem-fix-state-machine-logic-when-synchro.patch b/temp/modemmanager/0022-broadband-modem-fix-state-machine-logic-when-synchro.patch deleted file mode 100644 index f215993ab..000000000 --- a/temp/modemmanager/0022-broadband-modem-fix-state-machine-logic-when-synchro.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 82327e5898d77d0583e7f28f9d004df6a19f70b1 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:44:09 +0200 -Subject: [PATCH 22/39] broadband-modem: fix state machine logic when - synchronizing modem interface - ---- - src/mm-broadband-modem.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index 8c5f7acd..ac5fbb1c 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11420,6 +11420,7 @@ iface_modem_sync_ready (MMIfaceModem *self, - mm_obj_warn (self, "SIM is locked... Synchronization skipped"); - ctx->step = SYNCING_STEP_LAST; - syncing_step (task); -+ return; - } - - /* Not locked, go on to next step */ --- -2.31.1 - diff --git a/temp/modemmanager/0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch b/temp/modemmanager/0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch deleted file mode 100644 index 4b3bd0049..000000000 --- a/temp/modemmanager/0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch +++ /dev/null @@ -1,63 +0,0 @@ -From f466eda93a2a28421557ec9a7f1bf5d0aec7dd00 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 14:44:44 +0200 -Subject: [PATCH 23/39] broadband-modem: abort sync if locked SIM card found - -We made sure that the after resume synchronization was only started on -modems that had been enabled (and so unlocked). If we detect a locked -SIM card during the sync operation, it's either because the SIM card -was swapped, or because the modem was fully shutdown during the -suspension (and so the SIM requires SIM-PIN again). - -Either way, we cannot sync the state cleanly at this point, we must -trigger a full modem reprobe in order to move back the modem state to -Locked. ---- - src/mm-broadband-modem.c | 26 +++++++++++++++----------- - 1 file changed, 15 insertions(+), 11 deletions(-) - -diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c -index ac5fbb1c..d9a6d6ac 100644 ---- a/src/mm-broadband-modem.c -+++ b/src/mm-broadband-modem.c -@@ -11404,22 +11404,26 @@ iface_modem_sync_ready (MMIfaceModem *self, - GAsyncResult *res, - GTask *task) - { -- SyncingContext *ctx; -- MMModemLock lock; -- g_autoptr (GError) error = NULL; -+ SyncingContext *ctx; -+ MMModemLock lock; -+ g_autoptr(GError) error = NULL; - - ctx = g_task_get_task_data (task); -- lock = mm_iface_modem_get_unlock_required (self); - -- if (!mm_iface_modem_sync_finish (self, res, &error)) { -- mm_obj_warn (self, "synchronizing Modem interface failed: %s", error->message); -- } -+ if (!mm_iface_modem_sync_finish (self, res, &error)) -+ mm_obj_warn (self, "modem interface synchronization failed: %s", error->message); - -- /* SIM is locked, skip synchronization */ -+ /* The synchronization logic only runs on modems that were enabled before -+ * the suspend/resume cycle, and therefore we should not get SIM-PIN locked -+ * at this point, unless the SIM was swapped. */ -+ lock = mm_iface_modem_get_unlock_required (self); - if (lock == MM_MODEM_LOCK_UNKNOWN || lock == MM_MODEM_LOCK_SIM_PIN || lock == MM_MODEM_LOCK_SIM_PUK) { -- mm_obj_warn (self, "SIM is locked... Synchronization skipped"); -- ctx->step = SYNCING_STEP_LAST; -- syncing_step (task); -+ /* Abort the sync() operation right away, and report a new SIM event that will -+ * disable the modem and trigger a full reprobe */ -+ mm_obj_warn (self, "SIM is locked... synchronization aborted"); -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_ABORTED, -+ "Locked SIM found during modem interface synchronization"); -+ g_object_unref (task); - return; - } - --- -2.31.1 - diff --git a/temp/modemmanager/0024-iface-modem-remove-the-signal-quality-enforced-refre.patch b/temp/modemmanager/0024-iface-modem-remove-the-signal-quality-enforced-refre.patch deleted file mode 100644 index b42c2c00a..000000000 --- a/temp/modemmanager/0024-iface-modem-remove-the-signal-quality-enforced-refre.patch +++ /dev/null @@ -1,129 +0,0 @@ -From a414efa690d880b2037a084f33e05db4c2208123 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 15:40:36 +0200 -Subject: [PATCH 24/39] iface-modem: remove the signal quality enforced refresh - during sync() - -when mm_iface_modem_refresh_signal() is called, we'll restart the -signal quality refresh logic already, there is no need to request -an enforced start. - -The enforced start was also modifying ctx->enabled unconditionally, -which is really not ok. This logic would be enabled only when we're -registered, and that logic is fine, no need to change that. ---- - src/mm-iface-modem-3gpp.c | 2 +- - src/mm-iface-modem.c | 29 +++++++---------------------- - src/mm-iface-modem.h | 2 +- - 3 files changed, 9 insertions(+), 24 deletions(-) - -diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c -index ea1ab7cb..660eec65 100644 ---- a/src/mm-iface-modem-3gpp.c -+++ b/src/mm-iface-modem-3gpp.c -@@ -314,7 +314,7 @@ run_registration_checks_ready (MMIfaceModem3gpp *self, - * from home to roaming or viceversa, both registered states, so there - * wouldn't be an explicit refresh triggered from the modem interface as - * the modem never got un-registered during the sequence. */ -- mm_iface_modem_refresh_signal (MM_IFACE_MODEM (ctx->self), FALSE); -+ mm_iface_modem_refresh_signal (MM_IFACE_MODEM (ctx->self)); - mm_obj_dbg (self, "currently registered in a 3GPP network"); - g_task_return_boolean (task, TRUE); - g_object_unref (task); -diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c -index f208e92a..85df77bd 100644 ---- a/src/mm-iface-modem.c -+++ b/src/mm-iface-modem.c -@@ -1587,27 +1587,12 @@ periodic_signal_check_cb (MMIfaceModem *self) - } - - void --mm_iface_modem_refresh_signal (MMIfaceModem *self, -- gboolean enforce) -+mm_iface_modem_refresh_signal (MMIfaceModem *self) - { - SignalCheckContext *ctx; - - ctx = get_signal_check_context (self); - -- /* -- * If enforced, poll once explicitly to make sure the signal strength -- * and access technologies are updated. -- * -- * Modems with signal indication support block periodic polling scheduling. -- * With enforce == TRUE, the periodic polling logic can run once as -- * it override once the periodic polling prohibition. -- * When the polling is complete, the periodic polling scheduling -- * is blocked again to avoid that modems with signal indication support -- * are periodic polled for their signal status. -- */ -- if (enforce) -- ctx->enabled = TRUE; -- - /* Don't refresh polling if we're not enabled */ - if (!ctx->enabled) { - mm_obj_dbg (self, "periodic signal check refresh ignored: checks not enabled"); -@@ -1687,7 +1672,7 @@ periodic_signal_check_enable (MMIfaceModem *self) - } - - /* And refresh, which will trigger the first check at high frequency */ -- mm_iface_modem_refresh_signal (self, FALSE); -+ mm_iface_modem_refresh_signal (self); - } - - /*****************************************************************************/ -@@ -2361,7 +2346,7 @@ set_current_capabilities_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Capabilities updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self, FALSE); -+ mm_iface_modem_refresh_signal (self); - mm_gdbus_modem_complete_set_current_capabilities (ctx->skeleton, ctx->invocation); - } - -@@ -2851,7 +2836,7 @@ handle_set_current_bands_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Bands updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self, FALSE); -+ mm_iface_modem_refresh_signal (self); - mm_gdbus_modem_complete_set_current_bands (ctx->skeleton, ctx->invocation); - } - -@@ -3238,7 +3223,7 @@ handle_set_current_modes_ready (MMIfaceModem *self, - g_dbus_method_invocation_take_error (ctx->invocation, error); - else { - /* Modes updated: explicitly refresh signal and access technology */ -- mm_iface_modem_refresh_signal (self, FALSE); -+ mm_iface_modem_refresh_signal (self); - mm_gdbus_modem_complete_set_current_modes (ctx->skeleton, ctx->invocation); - } - -@@ -4332,9 +4317,9 @@ interface_syncing_step (GTask *task) - - case SYNCING_STEP_REFRESH_SIGNAL_STRENGTH: - /* -- * Start a signal strength and access technologies refresh sequence. -+ * Restart the signal strength and access technologies refresh sequence. - */ -- mm_iface_modem_refresh_signal (self, TRUE); -+ mm_iface_modem_refresh_signal (self); - ctx->step++; - /* fall through */ - -diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h -index 1cd4bdd1..5ba2167c 100644 ---- a/src/mm-iface-modem.h -+++ b/src/mm-iface-modem.h -@@ -547,7 +547,7 @@ void mm_iface_modem_update_signal_quality (MMIfaceModem *self, - guint signal_quality); - - /* Allow requesting to refresh signal via polling */ --void mm_iface_modem_refresh_signal (MMIfaceModem *self, gboolean enforce); -+void mm_iface_modem_refresh_signal (MMIfaceModem *self); - - /* Allow setting allowed modes */ - void mm_iface_modem_set_current_modes (MMIfaceModem *self, --- -2.31.1 - diff --git a/temp/modemmanager/0025-iface-modem-ignore-cancellation-during-sync.patch b/temp/modemmanager/0025-iface-modem-ignore-cancellation-during-sync.patch deleted file mode 100644 index 04561b9d7..000000000 --- a/temp/modemmanager/0025-iface-modem-ignore-cancellation-during-sync.patch +++ /dev/null @@ -1,31 +0,0 @@ -From fc25dae6d8f433244c1126908531b5961db5776d Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 15:43:52 +0200 -Subject: [PATCH 25/39] iface-modem: ignore cancellation during sync() - -There is no input cancellable in the method, so the GTask will never -get cancelled from the outside. ---- - src/mm-iface-modem.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c -index 85df77bd..b298eb89 100644 ---- a/src/mm-iface-modem.c -+++ b/src/mm-iface-modem.c -@@ -4277,12 +4277,6 @@ interface_syncing_step (GTask *task) - MMIfaceModem *self; - SyncingContext *ctx; - -- /* Don't run new steps if we're cancelled */ -- if (g_task_return_error_if_cancelled (task)) { -- g_object_unref (task); -- return; -- } -- - self = g_task_get_source_object (task); - ctx = g_task_get_task_data (task); - --- -2.31.1 - diff --git a/temp/modemmanager/0026-base-bearer-synchronize-state-when-resuming.patch b/temp/modemmanager/0026-base-bearer-synchronize-state-when-resuming.patch deleted file mode 100644 index 0953dd0b2..000000000 --- a/temp/modemmanager/0026-base-bearer-synchronize-state-when-resuming.patch +++ /dev/null @@ -1,241 +0,0 @@ -From a293dcb53274119799d079152b894ce4f660776c Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sat, 20 Mar 2021 16:23:14 +0100 -Subject: [PATCH 26/39] base-bearer: synchronize state when resuming - -Refresh connection status on resume to confirm -that the connection bearers are still valid. ---- - src/mm-base-bearer.c | 124 +++++++++++++++++++++++++++++++++++++++++++ - src/mm-base-bearer.h | 24 +++++++++ - src/mm-iface-modem.c | 25 +++++++++ - 3 files changed, 173 insertions(+) - -diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c -index 7510fe19..1ce6e49c 100644 ---- a/src/mm-base-bearer.c -+++ b/src/mm-base-bearer.c -@@ -1399,6 +1399,130 @@ mm_base_bearer_report_connection_status (MMBaseBearer *self, - - /*****************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef struct _SyncingContext SyncingContext; -+static void interface_syncing_step (GTask *task); -+ -+typedef enum { -+ SYNCING_STEP_FIRST, -+ SYNCING_STEP_REFRESH_CONNECTION, -+ SYNCING_STEP_LAST -+} SyncingStep; -+ -+struct _SyncingContext { -+ SyncingStep step; -+}; -+ -+gboolean -+mm_base_bearer_sync_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static gboolean -+reload_connection_status_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void -+reload_connection_status_ready (MMBaseBearer *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ SyncingContext *ctx; -+ g_autoptr(GError) error = NULL; -+ -+ ctx = g_task_get_task_data (task); -+ -+ reload_connection_status_finish (self, res, &error); -+ if (error) -+ mm_obj_warn (self, "reloading connection status failed: %s", error->message); -+ -+ /* Go on to the next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+interface_syncing_step (GTask *task) -+{ -+ MMBaseBearer *self; -+ SyncingContext *ctx; -+ -+ /* Don't run new steps if we're cancelled */ -+ if (g_task_return_error_if_cancelled (task)) { -+ g_object_unref (task); -+ return; -+ } -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ switch (ctx->step) { -+ case SYNCING_STEP_FIRST: -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_REFRESH_CONNECTION: -+ /* -+ * AT+PPP based connections should not be synced. -+ * When a AT+PPP connection bearer is connected, the 'ignore_disconnection_reports' flag is set. -+ */ -+ if (!self->priv->ignore_disconnection_reports) { -+ if (!MM_BASE_BEARER_GET_CLASS (self)->reload_connection_status) -+ mm_obj_warn (self, "unable to reload connection status, method not implemented"); -+ else { -+ mm_obj_dbg (self, "refreshing connection status"); -+ MM_BASE_BEARER_GET_CLASS (self)->reload_connection_status (self, -+ (GAsyncReadyCallback) reload_connection_status_ready, -+ task); -+ return; -+ } -+ } -+ ctx->step++; -+ /* fall through */ -+ -+ case SYNCING_STEP_LAST: -+ /* We are done without errors! */ -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ -+ default: -+ break; -+ } -+ -+ g_assert_not_reached (); -+} -+ -+void -+mm_base_bearer_sync (MMBaseBearer *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncingContext *ctx; -+ GTask *task; -+ -+ /* Create SyncingContext */ -+ ctx = g_new0 (SyncingContext, 1); -+ ctx->step = SYNCING_STEP_FIRST; -+ -+ /* Create sync steps task and execute it */ -+ task = g_task_new (self, NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)g_free); -+ interface_syncing_step (task); -+} -+ -+#endif -+ -+/*****************************************************************************/ -+ - static gchar * - log_object_build_id (MMLogObject *_self) - { -diff --git a/src/mm-base-bearer.h b/src/mm-base-bearer.h -index 1c1f96ea..a2a00166 100644 ---- a/src/mm-base-bearer.h -+++ b/src/mm-base-bearer.h -@@ -123,6 +123,18 @@ struct _MMBaseBearerClass { - GAsyncResult *res, - GError **error); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+ /* Reload connection status */ -+ void (* reload_connection_status) (MMBaseBearer *bearer, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ gboolean (* reload_connection_status_finish) (MMBaseBearer *bearer, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - /* Reload statistics */ - void (* reload_stats) (MMBaseBearer *bearer, - GAsyncReadyCallback callback, -@@ -169,4 +181,16 @@ void mm_base_bearer_disconnect_force (MMBaseBearer *self); - void mm_base_bearer_report_connection_status (MMBaseBearer *self, - MMBearerConnectionStatus status); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+/* Sync Broadband Bearer (async) */ -+void mm_base_bearer_sync (MMBaseBearer *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_base_bearer_sync_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - #endif /* MM_BASE_BEARER_H */ -diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c -index b298eb89..1fe1feff 100644 ---- a/src/mm-iface-modem.c -+++ b/src/mm-iface-modem.c -@@ -4220,6 +4220,7 @@ typedef enum { - SYNCING_STEP_DETECT_SIM_SWAP, - SYNCING_STEP_REFRESH_SIM_LOCK, - SYNCING_STEP_REFRESH_SIGNAL_STRENGTH, -+ SYNCING_STEP_REFRESH_BEARERS, - SYNCING_STEP_LAST - } SyncingStep; - -@@ -4271,6 +4272,22 @@ sync_detect_sim_swap_ready (MMIfaceModem *self, - interface_syncing_step (task); - } - -+static void -+reload_bearers (MMIfaceModem *self) -+{ -+ g_autoptr(MMBearerList) list = NULL; -+ -+ g_object_get (self, -+ MM_IFACE_MODEM_BEARER_LIST, &list, -+ NULL); -+ -+ if (list) { -+ mm_bearer_list_foreach (list, -+ (MMBearerListForeachFunc)mm_base_bearer_sync, -+ NULL); -+ } -+} -+ - static void - interface_syncing_step (GTask *task) - { -@@ -4317,6 +4334,14 @@ interface_syncing_step (GTask *task) - ctx->step++; - /* fall through */ - -+ case SYNCING_STEP_REFRESH_BEARERS: -+ /* -+ * Refresh bearers. -+ */ -+ reload_bearers (self); -+ ctx->step++; -+ /* fall through */ -+ - case SYNCING_STEP_LAST: - /* We are done without errors! */ - g_task_return_boolean (task, TRUE); --- -2.31.1 - diff --git a/temp/modemmanager/0027-base-bearer-improve-comments-of-the-load-reload_conn.patch b/temp/modemmanager/0027-base-bearer-improve-comments-of-the-load-reload_conn.patch deleted file mode 100644 index 4d7ea45be..000000000 --- a/temp/modemmanager/0027-base-bearer-improve-comments-of-the-load-reload_conn.patch +++ /dev/null @@ -1,54 +0,0 @@ -From c13c2134b4ef913f71f91128298080b5b1cf316b Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 20:58:40 +0200 -Subject: [PATCH 27/39] base-bearer: improve comments of the - load/reload_connection_status() methods - ---- - src/mm-base-bearer.h | 22 +++++++++++++++++++--- - 1 file changed, 19 insertions(+), 3 deletions(-) - -diff --git a/src/mm-base-bearer.h b/src/mm-base-bearer.h -index a2a00166..c5a4bda5 100644 ---- a/src/mm-base-bearer.h -+++ b/src/mm-base-bearer.h -@@ -113,9 +113,15 @@ struct _MMBaseBearerClass { - GError **error); - - /* Monitor connection status: -- * NOTE: only CONNECTED or DISCONNECTED should be reported here; this method -+ * -+ * Only CONNECTED or DISCONNECTED should be reported here; this method - * is used to poll for connection status once the connection has been -- * established */ -+ * established. -+ * -+ * This method will return MM_CORE_ERROR_UNSUPPORTED if the polling -+ * is not required (i.e. if we can safely rely on async indications -+ * sent by the modem). -+ */ - void (* load_connection_status) (MMBaseBearer *bearer, - GAsyncReadyCallback callback, - gpointer user_data); -@@ -125,7 +131,17 @@ struct _MMBaseBearerClass { - - #if defined WITH_SYSTEMD_SUSPEND_RESUME - -- /* Reload connection status */ -+ /* Reload connection status: -+ * -+ * This method should return the exact connection status of the bearer, and -+ * the check must always be performed (if supported). This method should not -+ * return MM_CORE_ERROR_UNSUPPORTED as a way to skip the operation, as in -+ * this case the connection monitoring is required during the quick -+ * suspend/resume synchronization. -+ * -+ * It is up to each protocol/plugin whether providing the same method here -+ * and in load_connection_status() makes sense. -+ */ - void (* reload_connection_status) (MMBaseBearer *bearer, - GAsyncReadyCallback callback, - gpointer user_data); --- -2.31.1 - diff --git a/temp/modemmanager/0028-base-bearer-fix-connection-reload-completion.patch b/temp/modemmanager/0028-base-bearer-fix-connection-reload-completion.patch deleted file mode 100644 index 6d40c8f93..000000000 --- a/temp/modemmanager/0028-base-bearer-fix-connection-reload-completion.patch +++ /dev/null @@ -1,42 +0,0 @@ -From ea6ecd7cf973022f0417e083bfe18aeaf9a94f84 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 15:51:51 +0200 -Subject: [PATCH 28/39] base-bearer: fix connection reload completion - -If we called the class reload_connection_status() method, we should -call the class reload_connection_status_finish() as well. ---- - src/mm-base-bearer.c | 10 +--------- - 1 file changed, 1 insertion(+), 9 deletions(-) - -diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c -index 1ce6e49c..71f6684b 100644 ---- a/src/mm-base-bearer.c -+++ b/src/mm-base-bearer.c -@@ -1422,14 +1422,6 @@ mm_base_bearer_sync_finish (MMBaseBearer *self, - return g_task_propagate_boolean (G_TASK (res), error); - } - --static gboolean --reload_connection_status_finish (MMBaseBearer *self, -- GAsyncResult *res, -- GError **error) --{ -- return g_task_propagate_boolean (G_TASK (res), error); --} -- - static void - reload_connection_status_ready (MMBaseBearer *self, - GAsyncResult *res, -@@ -1440,7 +1432,7 @@ reload_connection_status_ready (MMBaseBearer *self, - - ctx = g_task_get_task_data (task); - -- reload_connection_status_finish (self, res, &error); -+ MM_BASE_BEARER_GET_CLASS (self)->reload_connection_status_finish (self, res, &error); - if (error) - mm_obj_warn (self, "reloading connection status failed: %s", error->message); - --- -2.31.1 - diff --git a/temp/modemmanager/0029-base-bearer-propagate-the-new-connection-status-afte.patch b/temp/modemmanager/0029-base-bearer-propagate-the-new-connection-status-afte.patch deleted file mode 100644 index 307d54378..000000000 --- a/temp/modemmanager/0029-base-bearer-propagate-the-new-connection-status-afte.patch +++ /dev/null @@ -1,105 +0,0 @@ -From d04b388e4dbc9c341fbd7176d1eef2b0dcba49ba Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 21:17:42 +0200 -Subject: [PATCH 29/39] base-bearer: propagate the new connection status after - reload - -Just triggering a connection status reload won't change the actual -bearer object state. - -We change the signature of the reload_connection_status_finish() -method so that it returns the actual reloaded bearer connection -status, and so both the load_ and reload_ methods can be implemented -with exactly the same method, something that was not possible before. - -Once we get the new connection status reloaded, we apply it in the -bearer object only if it's DISCONNECTED (and it wasn't DISCONNECTED -before). This should cover the true real case we're interested in, and -nothing else (i.e. we won't overcomplicate the logic attempting to -handle disconnected->connected transitions detected in the sync() -operation). ---- - src/mm-base-bearer.c | 29 +++++++++++++++++++++++------ - src/mm-base-bearer.h | 6 +++--- - 2 files changed, 26 insertions(+), 9 deletions(-) - -diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c -index 71f6684b..69600c17 100644 ---- a/src/mm-base-bearer.c -+++ b/src/mm-base-bearer.c -@@ -1411,7 +1411,8 @@ typedef enum { - } SyncingStep; - - struct _SyncingContext { -- SyncingStep step; -+ SyncingStep step; -+ MMBearerStatus status; - }; - - gboolean -@@ -1427,14 +1428,29 @@ reload_connection_status_ready (MMBaseBearer *self, - GAsyncResult *res, - GTask *task) - { -- SyncingContext *ctx; -- g_autoptr(GError) error = NULL; -+ SyncingContext *ctx; -+ MMBearerConnectionStatus reloaded_status; -+ g_autoptr(GError) error = NULL; - - ctx = g_task_get_task_data (task); - -- MM_BASE_BEARER_GET_CLASS (self)->reload_connection_status_finish (self, res, &error); -- if (error) -+ /* The only update we're really interested in is the connected->disconnected -+ * one, because any other would be extremely strange and it's probably not -+ * worth trying to support those; e.g. a disconnected->connected change here -+ * would be impossible to be handled correctly. We'll also ignore intermediate -+ * states (connecting/disconnecting), as we can rely on the reports of the final -+ * state at some point soon. -+ * -+ * So, just handle DISCONNECTED at this point. -+ */ -+ reloaded_status = MM_BASE_BEARER_GET_CLASS (self)->reload_connection_status_finish (self, res, &error); -+ if (reloaded_status == MM_BEARER_CONNECTION_STATUS_UNKNOWN) - mm_obj_warn (self, "reloading connection status failed: %s", error->message); -+ else if ((ctx->status == MM_BEARER_STATUS_CONNECTED) && -+ (reloaded_status == MM_BEARER_CONNECTION_STATUS_DISCONNECTED)) { -+ mm_obj_dbg (self, "disconnection detected during status synchronization"); -+ mm_base_bearer_report_connection_status (self, reloaded_status); -+ } - - /* Go on to the next step */ - ctx->step++; -@@ -1501,9 +1517,10 @@ mm_base_bearer_sync (MMBaseBearer *self, - SyncingContext *ctx; - GTask *task; - -- /* Create SyncingContext */ -+ /* Create SyncingContext and store the original bearer status */ - ctx = g_new0 (SyncingContext, 1); - ctx->step = SYNCING_STEP_FIRST; -+ ctx->status = self->priv->status; - - /* Create sync steps task and execute it */ - task = g_task_new (self, NULL, callback, user_data); -diff --git a/src/mm-base-bearer.h b/src/mm-base-bearer.h -index c5a4bda5..16e4bae5 100644 ---- a/src/mm-base-bearer.h -+++ b/src/mm-base-bearer.h -@@ -145,9 +145,9 @@ struct _MMBaseBearerClass { - void (* reload_connection_status) (MMBaseBearer *bearer, - GAsyncReadyCallback callback, - gpointer user_data); -- gboolean (* reload_connection_status_finish) (MMBaseBearer *bearer, -- GAsyncResult *res, -- GError **error); -+ MMBearerConnectionStatus (* reload_connection_status_finish) (MMBaseBearer *bearer, -+ GAsyncResult *res, -+ GError **error); - - #endif - --- -2.31.1 - diff --git a/temp/modemmanager/0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch b/temp/modemmanager/0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch deleted file mode 100644 index d132ea753..000000000 --- a/temp/modemmanager/0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch +++ /dev/null @@ -1,207 +0,0 @@ -From 50be73286059a9694f0cc8cc8b42d73cb6e9cb1f Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 21:40:20 +0200 -Subject: [PATCH 30/39] iface-modem,bearer-list: sync all bearers one after the - other - -Do not launch N checks for N bearers and ignore their result. Instead, -go one by one, and report errors one by one. ---- - src/mm-bearer-list.c | 86 ++++++++++++++++++++++++++++++++++++++++++++ - src/mm-bearer-list.h | 11 ++++++ - src/mm-iface-modem.c | 49 +++++++++++++++++++------ - 3 files changed, 136 insertions(+), 10 deletions(-) - -diff --git a/src/mm-bearer-list.c b/src/mm-bearer-list.c -index 65717132..1ce53e05 100644 ---- a/src/mm-bearer-list.c -+++ b/src/mm-bearer-list.c -@@ -268,6 +268,92 @@ mm_bearer_list_disconnect_all_bearers (MMBearerList *self, - - /*****************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+typedef struct { -+ GList *pending; -+ MMBaseBearer *current; -+} SyncAllContext; -+ -+static void -+sync_all_context_free (SyncAllContext *ctx) -+{ -+ if (ctx->current) -+ g_object_unref (ctx->current); -+ g_list_free_full (ctx->pending, g_object_unref); -+ g_free (ctx); -+} -+ -+gboolean -+mm_bearer_list_sync_all_bearers_finish (MMBearerList *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (res), error); -+} -+ -+static void sync_next_bearer (GTask *task); -+ -+static void -+sync_ready (MMBaseBearer *bearer, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ g_autoptr(GError) error = NULL; -+ -+ if (!mm_base_bearer_sync_finish (bearer, res, &error)) -+ mm_obj_warn (bearer, "failed synchronizing state: %s", error->message); -+ -+ sync_next_bearer (task); -+} -+ -+static void -+sync_next_bearer (GTask *task) -+{ -+ SyncAllContext *ctx; -+ -+ ctx = g_task_get_task_data (task); -+ if (ctx->current) -+ g_clear_object (&ctx->current); -+ -+ /* No more bearers? all done! */ -+ if (!ctx->pending) { -+ g_task_return_boolean (task, TRUE); -+ g_object_unref (task); -+ return; -+ } -+ -+ ctx->current = MM_BASE_BEARER (ctx->pending->data); -+ ctx->pending = g_list_delete_link (ctx->pending, ctx->pending); -+ -+ mm_base_bearer_sync (ctx->current, (GAsyncReadyCallback)sync_ready, task); -+} -+ -+void -+mm_bearer_list_sync_all_bearers (MMBearerList *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ SyncAllContext *ctx; -+ GTask *task; -+ -+ ctx = g_new0 (SyncAllContext, 1); -+ -+ /* Get a copy of the list */ -+ ctx->pending = g_list_copy_deep (self->priv->bearers, -+ (GCopyFunc)g_object_ref, -+ NULL); -+ -+ task = g_task_new (self, NULL, callback, user_data); -+ g_task_set_task_data (task, ctx, (GDestroyNotify)sync_all_context_free); -+ -+ sync_next_bearer (task); -+} -+ -+#endif -+ -+/*****************************************************************************/ -+ - MMBearerList * - mm_bearer_list_new (guint max_bearers, - guint max_active_bearers) -diff --git a/src/mm-bearer-list.h b/src/mm-bearer-list.h -index 0d220eee..04af79e9 100644 ---- a/src/mm-bearer-list.h -+++ b/src/mm-bearer-list.h -@@ -85,4 +85,15 @@ gboolean mm_bearer_list_disconnect_all_bearers_finish (MMBearerList *self, - GAsyncResult *res, - GError **error); - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+void mm_bearer_list_sync_all_bearers (MMBearerList *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+gboolean mm_bearer_list_sync_all_bearers_finish (MMBearerList *self, -+ GAsyncResult *res, -+ GError **error); -+ -+#endif -+ - #endif /* MM_BEARER_LIST_H */ -diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c -index 1fe1feff..c3722c0a 100644 ---- a/src/mm-iface-modem.c -+++ b/src/mm-iface-modem.c -@@ -4273,19 +4273,49 @@ sync_detect_sim_swap_ready (MMIfaceModem *self, - } - - static void --reload_bearers (MMIfaceModem *self) -+sync_all_bearers_ready (MMBearerList *bearer_list, -+ GAsyncResult *res, -+ GTask *task) - { -- g_autoptr(MMBearerList) list = NULL; -+ MMIfaceModem *self; -+ SyncingContext *ctx; -+ g_autoptr (GError) error = NULL; -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); -+ -+ if (!mm_bearer_list_sync_all_bearers_finish (bearer_list, res, &error)) -+ mm_obj_warn (self, "synchronizing all bearer status failed: %s", error->message); -+ -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+} -+ -+static void -+reload_bearers (GTask *task) -+{ -+ MMIfaceModem *self; -+ SyncingContext *ctx; -+ g_autoptr(MMBearerList) bearer_list = NULL; -+ -+ self = g_task_get_source_object (task); -+ ctx = g_task_get_task_data (task); - - g_object_get (self, -- MM_IFACE_MODEM_BEARER_LIST, &list, -+ MM_IFACE_MODEM_BEARER_LIST, &bearer_list, - NULL); - -- if (list) { -- mm_bearer_list_foreach (list, -- (MMBearerListForeachFunc)mm_base_bearer_sync, -- NULL); -+ if (!bearer_list) { -+ /* Go on to next step */ -+ ctx->step++; -+ interface_syncing_step (task); -+ return; - } -+ -+ mm_bearer_list_sync_all_bearers (bearer_list, -+ (GAsyncReadyCallback)sync_all_bearers_ready, -+ task); - } - - static void -@@ -4338,9 +4368,8 @@ interface_syncing_step (GTask *task) - /* - * Refresh bearers. - */ -- reload_bearers (self); -- ctx->step++; -- /* fall through */ -+ reload_bearers (task); -+ return; - - case SYNCING_STEP_LAST: - /* We are done without errors! */ --- -2.31.1 - diff --git a/temp/modemmanager/0031-base-bearer-ignore-cancellation-during-sync.patch b/temp/modemmanager/0031-base-bearer-ignore-cancellation-during-sync.patch deleted file mode 100644 index 289c9616a..000000000 --- a/temp/modemmanager/0031-base-bearer-ignore-cancellation-during-sync.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 7c93327a711c3c5e0834acabd059ebd0fc70e379 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 21:46:34 +0200 -Subject: [PATCH 31/39] base-bearer: ignore cancellation during sync() - -There is no input cancellable in the method, so the GTask will never -get cancelled from the outside. ---- - src/mm-base-bearer.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c -index 69600c17..801c3ec1 100644 ---- a/src/mm-base-bearer.c -+++ b/src/mm-base-bearer.c -@@ -1463,12 +1463,6 @@ interface_syncing_step (GTask *task) - MMBaseBearer *self; - SyncingContext *ctx; - -- /* Don't run new steps if we're cancelled */ -- if (g_task_return_error_if_cancelled (task)) { -- g_object_unref (task); -- return; -- } -- - self = g_task_get_source_object (task); - ctx = g_task_get_task_data (task); - --- -2.31.1 - diff --git a/temp/modemmanager/0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch b/temp/modemmanager/0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch deleted file mode 100644 index 8e5252825..000000000 --- a/temp/modemmanager/0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0576f8d28405df80c689f478363a2a041f9d5df3 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 22:11:08 +0200 -Subject: [PATCH 32/39] broadband-bearer: reuse the same method for load and - reload - -The load_() method is used for connection monitoring; while the -reload_() method is used to sync connection status after a -suspend/resume operation. The same method can be used for both things -in the case of AT+CGACT? based modems. ---- - src/mm-broadband-bearer.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c -index 73869a0c..ff49903a 100644 ---- a/src/mm-broadband-bearer.c -+++ b/src/mm-broadband-bearer.c -@@ -2333,6 +2333,10 @@ mm_broadband_bearer_class_init (MMBroadbandBearerClass *klass) - base_bearer_class->report_connection_status = report_connection_status; - base_bearer_class->load_connection_status = load_connection_status; - base_bearer_class->load_connection_status_finish = load_connection_status_finish; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = load_connection_status; -+ base_bearer_class->reload_connection_status_finish = load_connection_status_finish; -+#endif - - klass->connect_3gpp = connect_3gpp; - klass->connect_3gpp_finish = detailed_connect_finish; --- -2.31.1 - diff --git a/temp/modemmanager/0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch b/temp/modemmanager/0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch deleted file mode 100644 index 8b4e736c8..000000000 --- a/temp/modemmanager/0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 5fdf3f0f26579cc9a453401de09ca6ea0292e27c Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 22:14:49 +0200 -Subject: [PATCH 33/39] novatel-lte: reuse the same method for load and reload - -The load_() method is used for connection monitoring; while the -reload_() method is used to sync connection status after a -suspend/resume operation. The same method can be used for both things -in the Novatel LTE plugin. ---- - plugins/novatel/mm-broadband-bearer-novatel-lte.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/plugins/novatel/mm-broadband-bearer-novatel-lte.c -index ec08f4d7..4419eb23 100644 ---- a/plugins/novatel/mm-broadband-bearer-novatel-lte.c -+++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.c -@@ -568,6 +568,10 @@ mm_broadband_bearer_novatel_lte_class_init (MMBroadbandBearerNovatelLteClass *kl - - base_bearer_class->load_connection_status = load_connection_status; - base_bearer_class->load_connection_status_finish = load_connection_status_finish; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = load_connection_status; -+ base_bearer_class->reload_connection_status_finish = load_connection_status_finish; -+#endif - - broadband_bearer_class->connect_3gpp = connect_3gpp; - broadband_bearer_class->connect_3gpp_finish = connect_3gpp_finish; --- -2.31.1 - diff --git a/temp/modemmanager/0034-sierra-reuse-the-same-method-for-load-and-reload.patch b/temp/modemmanager/0034-sierra-reuse-the-same-method-for-load-and-reload.patch deleted file mode 100644 index a64e31712..000000000 --- a/temp/modemmanager/0034-sierra-reuse-the-same-method-for-load-and-reload.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 14ea67c111b6116071f00c235b23152b21ab2d04 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 22:17:25 +0200 -Subject: [PATCH 34/39] sierra: reuse the same method for load and reload - -The load_() method is used for connection monitoring; while the -reload_() method is used to sync connection status after a -suspend/resume operation. The same method can be used for both things -in the Sierra plugin. ---- - plugins/sierra/mm-broadband-bearer-sierra.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/plugins/sierra/mm-broadband-bearer-sierra.c b/plugins/sierra/mm-broadband-bearer-sierra.c -index 2c2ef375..bf95a8eb 100644 ---- a/plugins/sierra/mm-broadband-bearer-sierra.c -+++ b/plugins/sierra/mm-broadband-bearer-sierra.c -@@ -663,6 +663,10 @@ mm_broadband_bearer_sierra_class_init (MMBroadbandBearerSierraClass *klass) - - base_bearer_class->load_connection_status = load_connection_status; - base_bearer_class->load_connection_status_finish = load_connection_status_finish; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = load_connection_status; -+ base_bearer_class->reload_connection_status_finish = load_connection_status_finish; -+#endif - - broadband_bearer_class->dial_3gpp = dial_3gpp; - broadband_bearer_class->dial_3gpp_finish = dial_3gpp_finish; --- -2.31.1 - diff --git a/temp/modemmanager/0035-cinterion-reuse-the-same-method-for-load-and-reload.patch b/temp/modemmanager/0035-cinterion-reuse-the-same-method-for-load-and-reload.patch deleted file mode 100644 index 080f697fb..000000000 --- a/temp/modemmanager/0035-cinterion-reuse-the-same-method-for-load-and-reload.patch +++ /dev/null @@ -1,31 +0,0 @@ -From e56cb4ebb98fe814a2f88d47d92e480a14be4a72 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 22:19:40 +0200 -Subject: [PATCH 35/39] cinterion: reuse the same method for load and reload - -The load_() method is used for connection monitoring; while the -reload_() method is used to sync connection status after a -suspend/resume operation. The same method can be used for both things -in the Cinterion plugin. ---- - plugins/cinterion/mm-broadband-bearer-cinterion.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/plugins/cinterion/mm-broadband-bearer-cinterion.c b/plugins/cinterion/mm-broadband-bearer-cinterion.c -index 464e75e9..861c7ccb 100644 ---- a/plugins/cinterion/mm-broadband-bearer-cinterion.c -+++ b/plugins/cinterion/mm-broadband-bearer-cinterion.c -@@ -681,6 +681,10 @@ mm_broadband_bearer_cinterion_class_init (MMBroadbandBearerCinterionClass *klass - - base_bearer_class->load_connection_status = load_connection_status; - base_bearer_class->load_connection_status_finish = load_connection_status_finish; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = load_connection_status; -+ base_bearer_class->reload_connection_status_finish = load_connection_status_finish; -+#endif - - broadband_bearer_class->dial_3gpp = dial_3gpp; - broadband_bearer_class->dial_3gpp_finish = dial_3gpp_finish; --- -2.31.1 - diff --git a/temp/modemmanager/0036-plugins-ignore-reload_connection_status-where-not-su.patch b/temp/modemmanager/0036-plugins-ignore-reload_connection_status-where-not-su.patch deleted file mode 100644 index 871ddc0be..000000000 --- a/temp/modemmanager/0036-plugins-ignore-reload_connection_status-where-not-su.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 938e087defb53ca55ccc356f8094ce91f3f7da1a Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 22:21:54 +0200 -Subject: [PATCH 36/39] plugins: ignore reload_connection_status() where not - supported - -Some of the AT-based connection methods don't have any way to query -connection status, or we don't have a proper implementation for those -yet. Ignore the reload operation in all those. ---- - plugins/altair/mm-broadband-bearer-altair-lte.c | 4 ++++ - plugins/huawei/mm-broadband-bearer-huawei.c | 4 ++++ - plugins/icera/mm-broadband-bearer-icera.c | 4 ++++ - plugins/iridium/mm-bearer-iridium.c | 4 ++++ - plugins/mbm/mm-broadband-bearer-mbm.c | 4 ++++ - plugins/option/mm-broadband-bearer-hso.c | 4 ++++ - 6 files changed, 24 insertions(+) - -diff --git a/plugins/altair/mm-broadband-bearer-altair-lte.c b/plugins/altair/mm-broadband-bearer-altair-lte.c -index 1ce965a8..52403418 100644 ---- a/plugins/altair/mm-broadband-bearer-altair-lte.c -+++ b/plugins/altair/mm-broadband-bearer-altair-lte.c -@@ -358,6 +358,10 @@ mm_broadband_bearer_altair_lte_class_init (MMBroadbandBearerAltairLteClass *klas - - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - - broadband_bearer_class->connect_3gpp = connect_3gpp; - broadband_bearer_class->connect_3gpp_finish = connect_3gpp_finish; -diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c -index 4bf2bb59..5a098d1b 100644 ---- a/plugins/huawei/mm-broadband-bearer-huawei.c -+++ b/plugins/huawei/mm-broadband-bearer-huawei.c -@@ -874,6 +874,10 @@ mm_broadband_bearer_huawei_class_init (MMBroadbandBearerHuaweiClass *klass) - base_bearer_class->report_connection_status = report_connection_status; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - - broadband_bearer_class->connect_3gpp = connect_3gpp; - broadband_bearer_class->connect_3gpp_finish = connect_3gpp_finish; -diff --git a/plugins/icera/mm-broadband-bearer-icera.c b/plugins/icera/mm-broadband-bearer-icera.c -index 1d6859c0..dcd477fa 100644 ---- a/plugins/icera/mm-broadband-bearer-icera.c -+++ b/plugins/icera/mm-broadband-bearer-icera.c -@@ -1000,6 +1000,10 @@ mm_broadband_bearer_icera_class_init (MMBroadbandBearerIceraClass *klass) - base_bearer_class->report_connection_status = report_connection_status; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - - broadband_bearer_class->dial_3gpp = dial_3gpp; - broadband_bearer_class->dial_3gpp_finish = dial_3gpp_finish; -diff --git a/plugins/iridium/mm-bearer-iridium.c b/plugins/iridium/mm-bearer-iridium.c -index 12b60419..511954f1 100644 ---- a/plugins/iridium/mm-bearer-iridium.c -+++ b/plugins/iridium/mm-bearer-iridium.c -@@ -252,4 +252,8 @@ mm_bearer_iridium_class_init (MMBearerIridiumClass *klass) - base_bearer_class->connect_finish = connect_finish; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - } -diff --git a/plugins/mbm/mm-broadband-bearer-mbm.c b/plugins/mbm/mm-broadband-bearer-mbm.c -index 8de7a09f..0ba42aea 100644 ---- a/plugins/mbm/mm-broadband-bearer-mbm.c -+++ b/plugins/mbm/mm-broadband-bearer-mbm.c -@@ -895,6 +895,10 @@ mm_broadband_bearer_mbm_class_init (MMBroadbandBearerMbmClass *klass) - base_bearer_class->report_connection_status = report_connection_status; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - - broadband_bearer_class->dial_3gpp = dial_3gpp; - broadband_bearer_class->dial_3gpp_finish = dial_3gpp_finish; -diff --git a/plugins/option/mm-broadband-bearer-hso.c b/plugins/option/mm-broadband-bearer-hso.c -index 908d32c6..3aa8de88 100644 ---- a/plugins/option/mm-broadband-bearer-hso.c -+++ b/plugins/option/mm-broadband-bearer-hso.c -@@ -786,6 +786,10 @@ mm_broadband_bearer_hso_class_init (MMBroadbandBearerHsoClass *klass) - base_bearer_class->report_connection_status = report_connection_status; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = NULL; -+ base_bearer_class->reload_connection_status_finish = NULL; -+#endif - - broadband_bearer_class->dial_3gpp = dial_3gpp; - broadband_bearer_class->dial_3gpp_finish = dial_3gpp_finish; --- -2.31.1 - diff --git a/temp/modemmanager/0037-bearer-qmi-implement-reload_connection_status-for-th.patch b/temp/modemmanager/0037-bearer-qmi-implement-reload_connection_status-for-th.patch deleted file mode 100644 index ad62a7dfb..000000000 --- a/temp/modemmanager/0037-bearer-qmi-implement-reload_connection_status-for-th.patch +++ /dev/null @@ -1,153 +0,0 @@ -From 1cf4e63d828669747424e740519a6e2da246be38 Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Sun, 23 May 2021 23:39:18 +0200 -Subject: [PATCH 37/39] bearer-qmi: implement reload_connection_status() for - the sync operation - -The original load_connection_status() method would return an -UNSUPPORTED error if connection monitoring wasn't required (which is -the default in most QMI modems). - -The new reload_connection_status() method requires the check to always -be done unconditionally. - -We take most of the original logic in the load_connection_status() for -the new reload_connection_status(), and we add the UNSUPPORTED error -logic exclusively in the new load_connection_status(). ---- - src/mm-bearer-qmi.c | 86 +++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 71 insertions(+), 15 deletions(-) - -diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c -index 670fb804..967594bf 100644 ---- a/src/mm-bearer-qmi.c -+++ b/src/mm-bearer-qmi.c -@@ -226,7 +226,7 @@ reload_stats (MMBaseBearer *self, - } - - /*****************************************************************************/ --/* Connection status polling */ -+/* Connection status check */ - - typedef enum { - CONNECTION_STATUS_CONTEXT_STEP_FIRST, -@@ -240,9 +240,9 @@ typedef struct { - } ConnectionStatusContext; - - static MMBearerConnectionStatus --load_connection_status_finish (MMBaseBearer *self, -- GAsyncResult *res, -- GError **error) -+reload_connection_status_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error) - { - gint val; - -@@ -312,16 +312,6 @@ connection_status_context_step (GTask *task) - - switch (ctx->step) { - case CONNECTION_STATUS_CONTEXT_STEP_FIRST: -- /* Connection status polling is an optional feature that must be -- * enabled explicitly via udev tags. If not set, out as unsupported */ -- if (self->priv->data && -- !mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (self->priv->data), -- "ID_MM_QMI_CONNECTION_STATUS_POLLING_ENABLE")) { -- g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, -- "Connection status polling not required"); -- g_object_unref (task); -- return; -- } - /* If no clients ready on start, assume disconnected */ - if (!self->priv->client_ipv4 && !self->priv->client_ipv6) { - g_task_return_int (task, MM_BEARER_CONNECTION_STATUS_DISCONNECTED); -@@ -369,7 +359,7 @@ connection_status_context_step (GTask *task) - } - - static void --load_connection_status (MMBaseBearer *self, -+reload_connection_status (MMBaseBearer *self, - GAsyncReadyCallback callback, - gpointer user_data) - { -@@ -385,6 +375,68 @@ load_connection_status (MMBaseBearer *self, - connection_status_context_step (task); - } - -+/*****************************************************************************/ -+/* Connection status polling */ -+ -+static MMBearerConnectionStatus -+load_connection_status_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ gint val; -+ -+ val = g_task_propagate_int (G_TASK (res), error); -+ if (val < 0) -+ return MM_BEARER_CONNECTION_STATUS_UNKNOWN; -+ -+ return (MMBearerConnectionStatus) val; -+} -+ -+static void -+reload_connection_status_ready (MMBaseBearer *self, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ MMBearerConnectionStatus status; -+ GError *error = NULL; -+ -+ status = reload_connection_status_finish (self, res, &error); -+ if (status == MM_BEARER_CONNECTION_STATUS_UNKNOWN) -+ g_task_return_error (task, error); -+ else -+ g_task_return_int (task, MM_BEARER_CONNECTION_STATUS_CONNECTED); -+ g_object_unref (task); -+} -+ -+static void -+load_connection_status (MMBaseBearer *_self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ MMBearerQmi *self = MM_BEARER_QMI (_self); -+ GTask *task; -+ -+ task = g_task_new (self, NULL, callback, user_data); -+ -+ /* Connection status polling is an optional feature that must be -+ * enabled explicitly via udev tags. If not set, out as unsupported. -+ * Note that when connected via a muxed link, the udev tag should be -+ * checked on the master interface (lower device) */ -+ if ((self->priv->data && -+ !mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (self->priv->data), -+ "ID_MM_QMI_CONNECTION_STATUS_POLLING_ENABLE")) || -+ (self->priv->link && -+ !mm_kernel_device_get_global_property_as_boolean (mm_kernel_device_peek_lower_device (mm_port_peek_kernel_device (self->priv->link)), -+ "ID_MM_QMI_CONNECTION_STATUS_POLLING_ENABLE"))) { -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, -+ "Connection status polling not required"); -+ g_object_unref (task); -+ return; -+ } -+ -+ reload_connection_status (_self, (GAsyncReadyCallback)reload_connection_status_ready, task); -+} -+ - /*****************************************************************************/ - /* Connect */ - -@@ -2235,4 +2287,8 @@ mm_bearer_qmi_class_init (MMBearerQmiClass *klass) - base_bearer_class->reload_stats_finish = reload_stats_finish; - base_bearer_class->load_connection_status = load_connection_status; - base_bearer_class->load_connection_status_finish = load_connection_status_finish; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = reload_connection_status; -+ base_bearer_class->reload_connection_status_finish = reload_connection_status_finish; -+#endif - } --- -2.31.1 - diff --git a/temp/modemmanager/0038-bearer-mbim-implement-reload_connection_status.patch b/temp/modemmanager/0038-bearer-mbim-implement-reload_connection_status.patch deleted file mode 100644 index b436e2e6d..000000000 --- a/temp/modemmanager/0038-bearer-mbim-implement-reload_connection_status.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 0a1d5d800810bce1fc14c09be5f42eb5b90e7edb Mon Sep 17 00:00:00 2001 -From: Aleksander Morgado -Date: Mon, 24 May 2021 00:08:07 +0200 -Subject: [PATCH 38/39] bearer-mbim: implement reload_connection_status() - -Implement connection status reloading for MBIM based bearers. - -Based on a patch by Dylan Van Assche ---- - src/mm-bearer-mbim.c | 115 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 115 insertions(+) - -diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c -index 55064b30..f0479ebb 100644 ---- a/src/mm-bearer-mbim.c -+++ b/src/mm-bearer-mbim.c -@@ -1424,6 +1424,117 @@ report_connection_status (MMBaseBearer *self, - - /*****************************************************************************/ - -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ -+static MMBearerConnectionStatus -+reload_connection_status_finish (MMBaseBearer *self, -+ GAsyncResult *res, -+ GError **error) -+{ -+ gint val; -+ -+ val = g_task_propagate_int (G_TASK (res), error); -+ if (val < 0) -+ return MM_BEARER_CONNECTION_STATUS_UNKNOWN; -+ -+ return (MMBearerConnectionStatus) val; -+} -+ -+static void -+reload_connection_status_ready (MbimDevice *device, -+ GAsyncResult *res, -+ GTask *task) -+{ -+ MMBearerMbim *self; -+ guint32 session_id; -+ MbimActivationState activation_state; -+ MMBearerConnectionStatus bearer_connection_status = MM_BEARER_CONNECTION_STATUS_UNKNOWN; -+ g_autoptr(MbimMessage) response = NULL; -+ g_autoptr(GError) error = NULL; -+ -+ self = g_task_get_source_object (task); -+ -+ response = mbim_device_command_finish (device, res, &error); -+ if (!response || -+ !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) || -+ !mbim_message_connect_response_parse ( -+ response, -+ &session_id, -+ &activation_state, -+ NULL, /* voice_call_state */ -+ NULL, /* ip_type */ -+ NULL, /* context_type */ -+ NULL, /* nw_error */ -+ &error)) { -+ g_prefix_error (&error, "Cannot load session ID '%u' status: ", -+ mm_bearer_mbim_get_session_id (MM_BEARER_MBIM (self))); -+ g_task_return_error (task, error); -+ g_object_unref (task); -+ return; -+ } -+ -+ mm_obj_dbg (self, "session ID '%u': %s", session_id, mbim_activation_state_get_string (activation_state)); -+ -+ switch (activation_state) { -+ case MBIM_ACTIVATION_STATE_ACTIVATED: -+ case MBIM_ACTIVATION_STATE_ACTIVATING: -+ /* for the purposes of the sync operation, it's fine to map ACTIVATING -+ * to CONNECTED, as we're really going to ignore that state in the actual -+ * processing of the logic. */ -+ bearer_connection_status = MM_BEARER_CONNECTION_STATUS_CONNECTED; -+ break; -+ case MBIM_ACTIVATION_STATE_DEACTIVATING: -+ bearer_connection_status = MM_BEARER_CONNECTION_STATUS_DISCONNECTING; -+ break; -+ case MBIM_ACTIVATION_STATE_DEACTIVATED: -+ bearer_connection_status = MM_BEARER_CONNECTION_STATUS_DISCONNECTED; -+ break; -+ case MBIM_ACTIVATION_STATE_UNKNOWN: -+ default: -+ break; -+ } -+ -+ if (bearer_connection_status == MM_BEARER_CONNECTION_STATUS_UNKNOWN) -+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, -+ "Cannot load session ID '%u' status", -+ mm_bearer_mbim_get_session_id (MM_BEARER_MBIM (self))); -+ else -+ g_task_return_int (task, bearer_connection_status); -+ g_object_unref (task); -+} -+ -+static void -+reload_connection_status (MMBaseBearer *self, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ MMPortMbim *mbim; -+ GTask *task = NULL; -+ g_autoptr(MbimMessage) message = NULL; -+ -+ if (!peek_ports (self, &mbim, NULL, callback, user_data)) -+ return; -+ -+ task = g_task_new (self, NULL, callback, user_data); -+ message = mbim_message_connect_query_new (mm_bearer_mbim_get_session_id (MM_BEARER_MBIM (self)), -+ MBIM_ACTIVATION_STATE_UNKNOWN, -+ MBIM_VOICE_CALL_STATE_NONE, -+ MBIM_CONTEXT_IP_TYPE_DEFAULT, -+ mbim_uuid_from_context_type (MBIM_CONTEXT_TYPE_INTERNET), -+ 0, -+ NULL); -+ mbim_device_command (mm_port_mbim_peek_device (mbim), -+ message, -+ 10, -+ NULL, -+ (GAsyncReadyCallback)reload_connection_status_ready, -+ task); -+} -+ -+#endif /* WITH_SYSTEMD_SUSPEND_RESUME */ -+ -+/*****************************************************************************/ -+ - MMBaseBearer * - mm_bearer_mbim_new (MMBroadbandModemMbim *modem, - MMBearerProperties *config, -@@ -1524,6 +1635,10 @@ mm_bearer_mbim_class_init (MMBearerMbimClass *klass) - base_bearer_class->reload_stats_finish = reload_stats_finish; - base_bearer_class->load_connection_status = NULL; - base_bearer_class->load_connection_status_finish = NULL; -+#if defined WITH_SYSTEMD_SUSPEND_RESUME -+ base_bearer_class->reload_connection_status = reload_connection_status; -+ base_bearer_class->reload_connection_status_finish = reload_connection_status_finish; -+#endif - - properties[PROP_SESSION_ID] = - g_param_spec_uint (MM_BEARER_MBIM_SESSION_ID, --- -2.31.1 - diff --git a/temp/modemmanager/0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch b/temp/modemmanager/0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch deleted file mode 100644 index 62c084773..000000000 --- a/temp/modemmanager/0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch +++ /dev/null @@ -1,207 +0,0 @@ -From f36e79292763a06b2548619858a54562149c9857 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Thu, 27 May 2021 21:25:16 +0200 -Subject: [PATCH 39/39] ModemManager: backport Quick Suspend/Resume patches to - MM 1.16.X - ---- - src/kerneldevice/mm-kernel-device.c | 18 ++++++++++++++++++ - src/kerneldevice/mm-kernel-device.h | 4 ++++ - src/mm-base-modem.c | 4 ++++ - src/mm-base-modem.h | 23 +++++++++++++++++++++++ - src/mm-bearer-mbim.c | 1 + - src/mm-bearer-mbim.h | 1 + - src/mm-bearer-qmi.c | 1 + - src/mm-bearer-qmi.h | 1 + - src/mm-iface-modem.h | 3 --- - 9 files changed, 53 insertions(+), 3 deletions(-) - -diff --git a/src/kerneldevice/mm-kernel-device.c b/src/kerneldevice/mm-kernel-device.c -index 464a3800..08d9d4a1 100644 ---- a/src/kerneldevice/mm-kernel-device.c -+++ b/src/kerneldevice/mm-kernel-device.c -@@ -26,6 +26,16 @@ static void log_object_iface_init (MMLogObjectInterface *iface); - - G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MMKernelDevice, mm_kernel_device, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init)) -+enum { -+ PROP_0, -+ PROP_LOWER_DEVICE, -+ PROP_LAST -+}; -+ -+struct _MMKernelDevicePrivate { -+ MMKernelDevice *lower_device; -+}; -+ - - /*****************************************************************************/ - -@@ -125,6 +135,12 @@ mm_kernel_device_get_physdev_product (MMKernelDevice *self) - NULL); - } - -+MMKernelDevice * -+mm_kernel_device_peek_lower_device (MMKernelDevice *self) -+{ -+ return self->priv->lower_device; -+} -+ - gint - mm_kernel_device_get_interface_class (MMKernelDevice *self) - { -@@ -347,6 +363,8 @@ log_object_build_id (MMLogObject *_self) - static void - mm_kernel_device_init (MMKernelDevice *self) - { -+ /* Initialize private data */ -+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_KERNEL_DEVICE, MMKernelDevicePrivate); - } - - static void -diff --git a/src/kerneldevice/mm-kernel-device.h b/src/kerneldevice/mm-kernel-device.h -index 45b270d5..678b3410 100644 ---- a/src/kerneldevice/mm-kernel-device.h -+++ b/src/kerneldevice/mm-kernel-device.h -@@ -28,9 +28,11 @@ - - typedef struct _MMKernelDevice MMKernelDevice; - typedef struct _MMKernelDeviceClass MMKernelDeviceClass; -+typedef struct _MMKernelDevicePrivate MMKernelDevicePrivate; - - struct _MMKernelDevice { - GObject parent; -+ MMKernelDevicePrivate *priv; - }; - - struct _MMKernelDeviceClass { -@@ -89,6 +91,8 @@ const gchar *mm_kernel_device_get_physdev_subsystem (MMKernelDevice *self); - const gchar *mm_kernel_device_get_physdev_manufacturer (MMKernelDevice *self); - const gchar *mm_kernel_device_get_physdev_product (MMKernelDevice *self); - -+MMKernelDevice *mm_kernel_device_peek_lower_device (MMKernelDevice *self); -+ - gboolean mm_kernel_device_cmp (MMKernelDevice *a, MMKernelDevice *b); - - /* Standard properties are usually associated to single ports */ -diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c -index 580103ba..e54add87 100644 ---- a/src/mm-base-modem.c -+++ b/src/mm-base-modem.c -@@ -115,6 +115,10 @@ struct _MMBaseModemPrivate { - /* MBIM ports */ - GList *mbim; - #endif -+ -+ /* Additional port links grabbed after having -+ * organized ports */ -+ GHashTable *link_ports; - }; - - guint -diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h -index d9538251..c52f0e18 100644 ---- a/src/mm-base-modem.h -+++ b/src/mm-base-modem.h -@@ -63,6 +63,11 @@ typedef struct _MMBaseModemPrivate MMBaseModemPrivate; - #define MM_BASE_MODEM_VENDOR_ID "base-modem-vendor-id" - #define MM_BASE_MODEM_PRODUCT_ID "base-modem-product-id" - #define MM_BASE_MODEM_REPROBE "base-modem-reprobe" -+#define MM_BASE_MODEM_DATA_NET_SUPPORTED "base-modem-data-net-supported" -+#define MM_BASE_MODEM_DATA_TTY_SUPPORTED "base-modem-data-tty-supported" -+ -+#define MM_BASE_MODEM_SIGNAL_LINK_PORT_GRABBED "base-modem-link-port-grabbed" -+#define MM_BASE_MODEM_SIGNAL_LINK_PORT_RELEASED "base-modem-link-port-released" - - struct _MMBaseModem { - MmGdbusObjectSkeleton parent; -@@ -132,6 +137,24 @@ gboolean mm_base_modem_grab_port (MMBaseModem *self, - MMPortSerialAtFlag at_pflags, - GError **error); - -+gboolean mm_base_modem_grab_link_port (MMBaseModem *self, -+ MMKernelDevice *kernel_device, -+ GError **error); -+gboolean mm_base_modem_release_link_port (MMBaseModem *self, -+ const gchar *subsystem, -+ const gchar *name, -+ GError **error); -+ -+void mm_base_modem_wait_link_port (MMBaseModem *self, -+ const gchar *subsystem, -+ const gchar *name, -+ guint timeout_ms, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+MMPort *mm_base_modem_wait_link_port_finish (MMBaseModem *self, -+ GAsyncResult *res, -+ GError **error); -+ - gboolean mm_base_modem_has_at_port (MMBaseModem *self); - - gboolean mm_base_modem_organize_ports (MMBaseModem *self, -diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c -index f0479ebb..99270474 100644 ---- a/src/mm-bearer-mbim.c -+++ b/src/mm-bearer-mbim.c -@@ -47,6 +47,7 @@ struct _MMBearerMbimPrivate { - guint32 session_id; - - MMPort *data; -+ MMPort *link; - }; - - /*****************************************************************************/ -diff --git a/src/mm-bearer-mbim.h b/src/mm-bearer-mbim.h -index 0d97d8d9..48c1c846 100644 ---- a/src/mm-bearer-mbim.h -+++ b/src/mm-bearer-mbim.h -@@ -24,6 +24,7 @@ - - #include "mm-base-bearer.h" - #include "mm-broadband-modem-mbim.h" -+#include "mm-kernel-device.h" - - #define MM_TYPE_BEARER_MBIM (mm_bearer_mbim_get_type ()) - #define MM_BEARER_MBIM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_BEARER_MBIM, MMBearerMbim)) -diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c -index 967594bf..52e155d7 100644 ---- a/src/mm-bearer-qmi.c -+++ b/src/mm-bearer-qmi.c -@@ -56,6 +56,7 @@ struct _MMBearerQmiPrivate { - guint event_report_ipv6_indication_id; - - MMPort *data; -+ MMPort *link; - guint32 packet_data_handle_ipv4; - guint32 packet_data_handle_ipv6; - }; -diff --git a/src/mm-bearer-qmi.h b/src/mm-bearer-qmi.h -index d75773f5..2a3c881c 100644 ---- a/src/mm-bearer-qmi.h -+++ b/src/mm-bearer-qmi.h -@@ -26,6 +26,7 @@ - - #include "mm-base-bearer.h" - #include "mm-broadband-modem-qmi.h" -+#include "mm-kernel-device.h" - - #define MM_TYPE_BEARER_QMI (mm_bearer_qmi_get_type ()) - #define MM_BEARER_QMI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_BEARER_QMI, MMBearerQmi)) -diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h -index 5ba2167c..110a839b 100644 ---- a/src/mm-iface-modem.h -+++ b/src/mm-iface-modem.h -@@ -460,9 +460,6 @@ gboolean mm_iface_modem_disable_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error); - --/* Shutdown Modem interface */ --void mm_iface_modem_shutdown (MMIfaceModem *self); -- - /* Helper to return an error when the modem is in failed state and so it - * cannot process a given method invocation - */ --- -2.31.1 - diff --git a/temp/modemmanager/APKBUILD b/temp/modemmanager/APKBUILD index 05eb81027..46af8bd1e 100644 --- a/temp/modemmanager/APKBUILD +++ b/temp/modemmanager/APKBUILD @@ -1,17 +1,16 @@ -# Forked from Alpine to apply quick suspend/resume patches for the PinePhone EG25-G modem - +# Forked from Alpine to package latest 1.18rc1 release candidate pkgname=modemmanager -pkgver=9999_git20210528 -_pkgver=1.16.6 +pkgver=9999_git20210819 +_pkgver=1.17.900 pkgrel=0 pkgdesc="ModemManager library" url="http://www.freedesktop.org/wiki/Software/ModemManager" -arch="all !mips !mips64 !s390x" # polkit +arch="all !mips !mips64 !s390x !riscv64" # limited by polkit license="GPL-2.0-or-later AND LGPL-2.1-or-later" +depends="dbus polkit" depends_dev="libmm-glib" makedepends="$depends_dev gobject-introspection-dev gtk-doc vala - libgudev-dev polkit-dev libmbim-dev libqmi-dev linux-headers libqrtr-glib-dev gettext-dev glib-dev" -makedepends="$makedepends automake autoconf autoconf-archive libtool" + libgudev-dev polkit-dev libmbim-dev libqmi-dev linux-headers" checkdepends="glib-dev" options="!check" # https://bugs.freedesktop.org/show_bug.cgi?id=101197 subpackages=" @@ -22,50 +21,10 @@ subpackages=" $pkgname-openrc $pkgname-bash-completion " -# https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/511/commits -# patches are integrated in these patches already source="https://www.freedesktop.org/software/ModemManager/ModemManager-$_pkgver.tar.xz - 0001-base-manager-add-quick-suspend-resume-base.patch - 0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch - 0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch - 0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch - 0005-base-modem-fix-modem_sync-operation-handling.patch - 0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch - 0007-base-modem-make-sync-available-only-if-suspend-resum.patch - 0008-broadband-modem-ignore-cancellation-during-sync.patch - 0009-broadband-modem-skip-synchronization-after-resume-if.patch - 0010-iface-modem-time-synchronize-state-when-resuming.patch - 0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch - 0012-iface-modem-time-ignore-cancellation-during-sync.patch - 0013-iface-modem-3gpp-synchronize-state-when-resuming.patch - 0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch - 0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch - 0016-iface-modem-3gpp-remove-redundant-log-message.patch - 0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch - 0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch - 0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch - 0020-iface-modem-synchronize-state-when-resuming.patch - 0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch - 0022-broadband-modem-fix-state-machine-logic-when-synchro.patch - 0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch - 0024-iface-modem-remove-the-signal-quality-enforced-refre.patch - 0025-iface-modem-ignore-cancellation-during-sync.patch - 0026-base-bearer-synchronize-state-when-resuming.patch - 0027-base-bearer-improve-comments-of-the-load-reload_conn.patch - 0028-base-bearer-fix-connection-reload-completion.patch - 0029-base-bearer-propagate-the-new-connection-status-afte.patch - 0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch - 0031-base-bearer-ignore-cancellation-during-sync.patch - 0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch - 0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch - 0034-sierra-reuse-the-same-method-for-load-and-reload.patch - 0035-cinterion-reuse-the-same-method-for-load-and-reload.patch - 0036-plugins-ignore-reload_connection_status-where-not-su.patch - 0037-bearer-qmi-implement-reload_connection_status-for-th.patch - 0038-bearer-mbim-implement-reload_connection_status.patch - 0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch $pkgname.rules - $pkgname.initd" + $pkgname.initd + " builddir="$srcdir"/ModemManager-$_pkgver build() { @@ -121,46 +80,7 @@ check() { } sha512sums=" -78a928007732baaa0eaed9d587913774d4fb79049d652474f39176190496012dc4c93fd0bd774ed6f86f845f3b9f345bcccf4c7b2438b83cf5846b2bcdcb39d5 ModemManager-1.16.6.tar.xz -c76ecd7f8fa679fcd011e7988f40cf1a6931a1c743a0440fc714f70967902f064a7738a15d3b90abf060e4617937beebaff1f454b44cf700c2c45362a489cc6d 0001-base-manager-add-quick-suspend-resume-base.patch -9a83651fd2a3c83fa79d5fc32794feb367f635a0dae0040b21f3999f1c3069b4bcea9e5003cffa0a95bd721201caea0fd678b62028ee22916618fda87a0804d3 0002-base-manager-make-sure-g_autoptr-variables-are-initi.patch -296d0484886644da22c29f8781a05eab52100c7c85b0d365e4e18d334127f1bf807b0fad10933a07f62dd7e0be0c15e592d85d95f6c36fd20ae74cb36fc4d57f 0003-base-manager-don-t-assume-a-MMDevice-always-holds-a-.patch -245e416a4cbd15c5505acf267e91d10fdb26629be5062bcc813b60da286c29bd5fa16e647e70f5afb8b2b6e7fbee8adb7e73d3cb363b848c9327d5650630134f 0004-base-manager-avoid-using-the-mm_-prefix-for-static-p.patch -c45fe7bdf34a444c05677d2cefe9ad80f61fe2b8f93262942b7032e014c40f8a12f1a6167f14fda8c4b45bb0ef7be2fd427e24c4d4eb73ffc017c506b85b362d 0005-base-modem-fix-modem_sync-operation-handling.patch -769398e5e575bf7dd62bbb53ddeda500614ea52412002b762dd6aae029ce95596b490c718624ac76bf4ce2fa888278f436125a27fc33de2ee6843dc2de05d7e4 0006-base-modem-don-t-fail-if-sync-isn-t-implemented.patch -cbaa137435b502594814f8b204372c23768d46a0492e04f0fc175a969764858b57f396cae20984a07c55f0b46c2dc63df4b8dee0c7c7185071d2dc5949c54fca 0007-base-modem-make-sync-available-only-if-suspend-resum.patch -8f9ac51997f404e6fca5ecc98b4bb9c62247c352344e3a83cf5955b992464fefe3b53dbae3ae3f0b6b3d7635ea1af2ad265b534bd3eb45bdd08a7a40f77d5822 0008-broadband-modem-ignore-cancellation-during-sync.patch -ee26e717e78d0665175397fe46ab06bf699b7ed9f61f43a24df63faa5c04aed91ac53e08044060eae416a5a91082f2e63a21c5682d56f18fdbe28072f39dad8e 0009-broadband-modem-skip-synchronization-after-resume-if.patch -022449ca8fc6277e7e15acb2f70703930e5f54cbd54794641b7329681137329909e1e46a2555a5ff6c7c06bfc5b57637a9fc7dd701019b6c7f0efdc210bb247b 0010-iface-modem-time-synchronize-state-when-resuming.patch -384f3cc68bb8fc99d66b2836aa223218aaa35b126aa58b31be4069d68854dda763964aed504808488e568275c9fce2d58a7ef430c29217a8f70bf90040f21bbe 0011-broadband-modem-skip-time-interface-sync-if-no-time-.patch -49ed4784ce74d4cc4118fba008820ac6b65ed283e44f2ae20f8f8b4b7d58cb3909ce38190b74712b948dbd0ef48e08a118c0de1630125e410aa26505ec8807a3 0012-iface-modem-time-ignore-cancellation-during-sync.patch -d0305030e0ce54d7b4990ab3eb54785881c03875d84e643640f1d3ef2e63fe11114a21dfeaa8808e4b879727263289c76bbdc50dd7ed859d7b9f65bdc8af781c 0013-iface-modem-3gpp-synchronize-state-when-resuming.patch -23564779a45f9be1f96568dd3f25e13d55480a45c6c66b4b8c733946937c985cf47c74db5ba3ee0752ed27f3bd1ecf1ca6f74c131954cd14565c74f27cfcc594 0014-iface-modem-3gpp-use-g_autoptr-for-the-MMBearerPrope.patch -3dc4b1625f16022d4532d19bc73ab1743bb09f05209e400618871d338f48c940567047cc602d3b83083aeeb13734cebce466f72181e5dc5124dead4944147680 0015-iface-modem-3gpp-fix-double-GError-free-on-registrat.patch -a9dae9d6fbc851ca022cba2226fc5225cd329c5d0cb537070d9fab7907317e47034fdde69bbeab880deb8fa80ca1fa10cf162599d6c4f33744f0a0953dc64e1c 0016-iface-modem-3gpp-remove-redundant-log-message.patch -58b4e987aef3ffd28845cb87e3d6055e5d2fe7c6796798c1c78cccb2073f3746c8d1949adaf0a098673b609f79a25d05153565cadfafd830e300131b498db2d8 0017-iface-modem-3gpp-ignore-cancellation-during-sync.patch -55d056132fa27a3765cb8bc3d516e1178b0f2d47e693f17e061d927d76c38e3e8830ccef2ee4a8ded810ac50d347bd4d7945be67630c564810b856ef8058c081 0018-broadband-modem-fix-type-in-the-ready-for-iface_mode.patch -b88cdcbe2474d875f45832ac9f24ba0dc1c492263792bfab2ee7a84dd23365a3811c185d47e3ca43710d7c3c976f950cae47455e97666ca809816b1705199255 0019-broadband-modem-skip-3GPP-interface-sync-if-no-3GPP-.patch -dd99f4788abe63e08ad20f3c1d0f55d88a059a974f491f3de26deb6bc2bbf117a72e169669693b27ada385d8012a6b66daae98ca135e12f30eff04b14a46f635 0020-iface-modem-synchronize-state-when-resuming.patch -dd8116a3a25422544b20d2639898f8d60e810c3075a4ed9972c1ba67f5918fa309b3df717e908891eb188d624ca494d53d0a2aa4fdca9037b353d531c80daeda 0021-broadband-modem-fail-synchronization-if-no-modem-exp.patch -3a21ff23bf9a9db604ad68171dda34cf833cafe96e9f57a3390de3f4d4d32f60f417de18d1f64a1dccd23d9a936975177101755cae8980cc93dbc035f1a7ded1 0022-broadband-modem-fix-state-machine-logic-when-synchro.patch -1aa82664e61cfc85c06849ee8a48ed20b268f5ed60106c0a21f1400726f001ffad35111ffd8593b8d9c08bf6a7b48cca93df5d06c11a88a249a5988204b581c3 0023-broadband-modem-abort-sync-if-locked-SIM-card-found.patch -f1c1691fbd94550170e23d08809c9d01fc644fa446dc0b482e741671fd0a31c96cb8ddd6ba6c03e29e996f6cb4c39c4a7f3d1ca614cb9435305269ead835d1f7 0024-iface-modem-remove-the-signal-quality-enforced-refre.patch -5387aa50d35f68db5577d2a8fd8862cfa40d56a9ffb8db22ed469011c765288b578979998ba1906c68e175fa9a1a2706678e9c13a9e11f500a773a06013c6fc7 0025-iface-modem-ignore-cancellation-during-sync.patch -ac46f072becac22ad5f88942e906b9e0bfa726e452a4b617d80c1d64fb224636218f22ab9dae4e13d875bcf59beec077bc1dc35ae29f9615e4034cf15f08d5f0 0026-base-bearer-synchronize-state-when-resuming.patch -9c52feb74c273e43eae3218b3ab221cc922536e4f73b5288b46ed59e7ae4be525d84fd510c27486a7735ccff826801d7d2f1a71b45a22a8919c563526495de53 0027-base-bearer-improve-comments-of-the-load-reload_conn.patch -f2891cf6ea1465bfcc4d4f902864e6fcb5c95ede724d9e55b90ab0d8f6d2b1512258d51345aa7653f30f46464ab1ca1996247ec194087e6c01788f6e606166c6 0028-base-bearer-fix-connection-reload-completion.patch -c4dfd858352f35f65397e38f2e5f9ca52899323bb9edc824b0c9397c02e2283add22c94468b4e784d14251b54ca96142c5b60c796130b836c3e4f9d6636d5aa9 0029-base-bearer-propagate-the-new-connection-status-afte.patch -4ab3bd5c6ae742dd0ed993fa540c8450e2458bc89679133e98dae802ead5e923408dca2e31ed63cf6892b443c44ef8d812f70f50fae5a77e8e511bbf535f7fb3 0030-iface-modem-bearer-list-sync-all-bearers-one-after-t.patch -cfcae1706d9fc0aca3f9d2fd60f05aa8c0985bc2bb94cae991900c97f0a7702cd3d9d0f6f4b39544855d8cbea7c4a29796f9abf6a8bf68506112cf0b0515a80e 0031-base-bearer-ignore-cancellation-during-sync.patch -84afa04a171064a916ff894854f79f48287a7f738fd7dbfaf00e825050fab30b4f8c56e690a021e3f370f0c332e73fb8696051bdc72fa5ba4d9ed204fc755085 0032-broadband-bearer-reuse-the-same-method-for-load-and-.patch -1b3c50476350ace754edd65a2748339edfee8ace5b56de3d38d3a6f1bdea9a0864becb03f948e8d1429b6f192b2e5c7d813731a24ac05f1dfb3b174f9725653a 0033-novatel-lte-reuse-the-same-method-for-load-and-reloa.patch -7a30cf38ff0f735794be282cc548f34a997d88d2d5acdcd077ffc398ff55a807180d5d309cfa6a254a8bb76ae7eb9d3b14fb972a3694dd454b99d635009ad1f3 0034-sierra-reuse-the-same-method-for-load-and-reload.patch -f4d8d23bb1c9c074db5c0036acae09b2a24587f7822119688f5bc017bcc1ea8570fc630d9b93267048b0f2295e6a8e669843b3d0c860ee6b2c43994e0c9685f4 0035-cinterion-reuse-the-same-method-for-load-and-reload.patch -689bebdd0a49adcfe1a35550f1424e376b70882ee97af9f622a636ab06ab13332a873320fab2dd52edd563e2ae8796a956e643b0a0aaa2093b65dc13aa90b397 0036-plugins-ignore-reload_connection_status-where-not-su.patch -bcee3ef714dd2117893176ccf402a21112d02c03e4dd062f6203e02a677ebe3add3141586b69cc2d76ef6a83b69cd53b55c7ede1649ab1ed8f400e45a358f9cb 0037-bearer-qmi-implement-reload_connection_status-for-th.patch -541baa9a07a2a5a6b6364412f95752a48a5ed398168a94ced1e2bef9f991b0c6cd6194060f39449d6fc4cfda8750cc2d974de6e30aef2ac806db4446a976e894 0038-bearer-mbim-implement-reload_connection_status.patch -4c411d8ae2aab3a0e84f9761db912500fdc01d5932722b34165d4b480af784fb63bd8268b4b66877c45d5778c28c7b6f4ed49434919dad2492b7e29a201b5a46 0039-ModemManager-backport-Quick-Suspend-Resume-patches-t.patch +0318f7c20a5090e32a2752ec05c33d447956f15cbccfe7773cbd39b81f42c02f18fbf1941c26ef766747d22c10787250c23b106fc4017ed4c4906c3c9810a0ff ModemManager-1.17.900.tar.xz 6fab86c27502b29be0c6610d835a3249a4a81993eb986cff2c3ea9393fadd3f693ba4bb0532ae0e50a83d359559511859dd05f7ea2f0cb52839f535a7e49f8a0 modemmanager.rules 9f74a2473b9cc7be42a467809639f5720ab251d13f29f8bbd4fd9a13edb80c10c5ee50fbe50819bfe67f231805b92f007c3e7403c46ab998dc843e1f9549659b modemmanager.initd "