aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac16
-rw-r--r--meson.build6
-rw-r--r--meson_options.txt3
-rw-r--r--plugins/altair/mm-broadband-bearer-altair-lte.c2
-rw-r--r--plugins/cinterion/mm-broadband-bearer-cinterion.c2
-rw-r--r--plugins/huawei/mm-broadband-bearer-huawei.c2
-rw-r--r--plugins/icera/mm-broadband-bearer-icera.c2
-rw-r--r--plugins/iridium/mm-bearer-iridium.c2
-rw-r--r--plugins/mbm/mm-broadband-bearer-mbm.c2
-rw-r--r--plugins/novatel/mm-broadband-bearer-novatel-lte.c2
-rw-r--r--plugins/option/mm-broadband-bearer-hso.c2
-rw-r--r--plugins/sierra/mm-broadband-bearer-sierra.c2
-rw-r--r--po/POTFILES.in3
-rw-r--r--src/Makefile.am12
-rw-r--r--src/main.c6
-rw-r--r--src/meson.build7
-rw-r--r--src/mm-base-bearer.c2
-rw-r--r--src/mm-base-bearer.h4
-rw-r--r--src/mm-base-manager.c2
-rw-r--r--src/mm-base-manager.h2
-rw-r--r--src/mm-base-modem.c4
-rw-r--r--src/mm-base-modem.h4
-rw-r--r--src/mm-bearer-list.c2
-rw-r--r--src/mm-bearer-list.h2
-rw-r--r--src/mm-bearer-mbim.c6
-rw-r--r--src/mm-bearer-qmi.c2
-rw-r--r--src/mm-broadband-bearer.c2
-rw-r--r--src/mm-broadband-modem.c4
-rw-r--r--src/mm-context.c6
-rw-r--r--src/mm-context.h2
-rw-r--r--src/mm-iface-modem-3gpp.c2
-rw-r--r--src/mm-iface-modem-3gpp.h2
-rw-r--r--src/mm-iface-modem-time.c2
-rw-r--r--src/mm-iface-modem-time.h2
-rw-r--r--src/mm-iface-modem.c2
-rw-r--r--src/mm-iface-modem.h2
-rw-r--r--src/mm-sleep-monitor-powerd.c171
-rw-r--r--src/mm-sleep-monitor-systemd.c (renamed from src/mm-sleep-monitor.c)4
38 files changed, 253 insertions, 49 deletions
diff --git a/configure.ac b/configure.ac
index 3b3f5b12..490c70f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -262,6 +262,10 @@ AC_ARG_WITH(systemd-suspend-resume,
AS_HELP_STRING([--with-systemd-suspend-resume=no|yes],
[Enable systemd suspend/resume support [[default=auto]]]),,
[with_systemd_suspend_resume=auto])
+AC_ARG_WITH(powerd-suspend-resume,
+ AS_HELP_STRING([--with-powerd-suspend-resume=no|yes],
+ [Enable powerd suspend/resume support [[default=no]]]),,
+ [with_powerd_suspend_resume=no])
if test "x$with_systemd_suspend_resume" = "xauto"; then
if test "x$have_libsystemd" = "xyes" || test "x$have_libsystemd_login" = "xyes" || test "x$have_elogind" = "xyes"; then
@@ -275,15 +279,23 @@ case $with_systemd_suspend_resume in
yes)
if test "x$have_libsystemd" = "xno" && test "x$have_libsystemd_login" = "xno" && test "x$have_elogind" = "xno"; then
AC_MSG_WARN(libsystemd, libsystemd-login or elogind must be available at runtime for suspend/resume support)
- fi
- AC_DEFINE(WITH_SYSTEMD_SUSPEND_RESUME, 1, [Define if you have systemd suspend-resume support])
+ fi
;;
*)
with_systemd_suspend_resume=no
;;
esac
+if test "x$with_systemd_suspend_resume" = "xyes" && test "x$with_powerd_suspend_resume" = "xyes"; then
+ AC_MSG_ERROR(--with_systemd_suspend_resume and --with_powerd_suspend_resume should not be selected at the same time)
+fi
+
+if test "x$with_systemd_suspend_resume" = "xyes" || test "x$with_powerd_suspend_resume" = "xyes"; then
+ AC_DEFINE(WITH_SUSPEND_RESUME, 1, [Define if you have systemd or powerd suspend-resume support])
+fi
+
AM_CONDITIONAL(WITH_SYSTEMD_SUSPEND_RESUME, test "x$with_systemd_suspend_resume" = "xyes")
+AM_CONDITIONAL(WITH_POWERD_SUSPEND_RESUME, test "x$with_powerd_suspend_resume" = "xyes")
dnl-----------------------------------------------------------------------------
dnl systemd journal support
diff --git a/meson.build b/meson.build
index 010c0487..147ddcf1 100644
--- a/meson.build
+++ b/meson.build
@@ -197,6 +197,9 @@ endif
# Suspend/resume support
enable_systemd_suspend_resume = get_option('systemd_suspend_resume')
+enable_powerd_suspend_resume = get_option('powerd_suspend_resume')
+assert(not (enable_systemd_suspend_resume and enable_powerd_suspend_resume), 'systemd_suspend_resume and powerd_suspend_resume are not supported at the same time')
+
# systemd journal support
enable_systemd_journal = get_option('systemd_journal')
@@ -213,7 +216,7 @@ if enable_systemd_suspend_resume or enable_systemd_journal
endif
endif
endif
-config_h.set('WITH_SYSTEMD_SUSPEND_RESUME', enable_systemd_suspend_resume)
+config_h.set('WITH_SUSPEND_RESUME', enable_systemd_suspend_resume or enable_powerd_suspend_resume)
config_h.set('WITH_SYSTEMD_JOURNAL', enable_systemd_journal)
# PolicyKit
@@ -419,6 +422,7 @@ summary({
'qmi': enable_qmi,
'qrtr': enable_qrtr,
'systemd suspend/resume': enable_systemd_suspend_resume,
+ 'powerd suspend/resume': enable_powerd_suspend_resume,
'systemd journal': enable_systemd_journal,
'at command via dbus': enable_at_command_via_dbus,
}, section: 'Features')
diff --git a/meson_options.txt b/meson_options.txt
index 6b6bdecc..fa8d209e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -7,7 +7,8 @@ option('udevdir', type: 'string', value: '', description: 'udev base directory')
option('dbus_policy_dir', type: 'string', value: '', description: 'd-bus system policy directory')
option('systemdsystemunitdir', type: 'string', value: '', description: 'systemd system units directory')
-option('systemd_suspend_resume', type: 'boolean', value: true, description: 'enable suspend/resume support')
+option('systemd_suspend_resume', type: 'boolean', value: true, description: 'enable suspend/resume support with systemd')
+option('powerd_suspend_resume', type: 'boolean', value: false, description: 'enable suspend/resume support with powerd')
option('systemd_journal', type: 'boolean', value: true, description: 'enable systemd journal support')
option('polkit', type: 'combo', choices: ['strict', 'permissive', 'no'], value: 'strict', description: 'User auth-polkit configuration option.')
diff --git a/plugins/altair/mm-broadband-bearer-altair-lte.c b/plugins/altair/mm-broadband-bearer-altair-lte.c
index 52403418..812b04d8 100644
--- a/plugins/altair/mm-broadband-bearer-altair-lte.c
+++ b/plugins/altair/mm-broadband-bearer-altair-lte.c
@@ -358,7 +358,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = NULL;
base_bearer_class->reload_connection_status_finish = NULL;
#endif
diff --git a/plugins/cinterion/mm-broadband-bearer-cinterion.c b/plugins/cinterion/mm-broadband-bearer-cinterion.c
index 2802a75c..e7ff392c 100644
--- a/plugins/cinterion/mm-broadband-bearer-cinterion.c
+++ b/plugins/cinterion/mm-broadband-bearer-cinterion.c
@@ -680,7 +680,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = load_connection_status;
base_bearer_class->reload_connection_status_finish = load_connection_status_finish;
#endif
diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c
index 45e5a516..f166efa5 100644
--- a/plugins/huawei/mm-broadband-bearer-huawei.c
+++ b/plugins/huawei/mm-broadband-bearer-huawei.c
@@ -867,7 +867,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = NULL;
base_bearer_class->reload_connection_status_finish = NULL;
#endif
diff --git a/plugins/icera/mm-broadband-bearer-icera.c b/plugins/icera/mm-broadband-bearer-icera.c
index 1d558aa8..f6477595 100644
--- a/plugins/icera/mm-broadband-bearer-icera.c
+++ b/plugins/icera/mm-broadband-bearer-icera.c
@@ -859,7 +859,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = NULL;
base_bearer_class->reload_connection_status_finish = NULL;
#endif
diff --git a/plugins/iridium/mm-bearer-iridium.c b/plugins/iridium/mm-bearer-iridium.c
index b6df8e8d..52e8ada9 100644
--- a/plugins/iridium/mm-bearer-iridium.c
+++ b/plugins/iridium/mm-bearer-iridium.c
@@ -259,7 +259,7 @@ 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
+#if defined WITH_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 263ab5b3..c1407ab4 100644
--- a/plugins/mbm/mm-broadband-bearer-mbm.c
+++ b/plugins/mbm/mm-broadband-bearer-mbm.c
@@ -897,7 +897,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = NULL;
base_bearer_class->reload_connection_status_finish = NULL;
#endif
diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/plugins/novatel/mm-broadband-bearer-novatel-lte.c
index 4419eb23..cd3296e2 100644
--- a/plugins/novatel/mm-broadband-bearer-novatel-lte.c
+++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.c
@@ -568,7 +568,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = load_connection_status;
base_bearer_class->reload_connection_status_finish = load_connection_status_finish;
#endif
diff --git a/plugins/option/mm-broadband-bearer-hso.c b/plugins/option/mm-broadband-bearer-hso.c
index 592b2804..9199e7b3 100644
--- a/plugins/option/mm-broadband-bearer-hso.c
+++ b/plugins/option/mm-broadband-bearer-hso.c
@@ -804,7 +804,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = NULL;
base_bearer_class->reload_connection_status_finish = NULL;
#endif
diff --git a/plugins/sierra/mm-broadband-bearer-sierra.c b/plugins/sierra/mm-broadband-bearer-sierra.c
index b2c34c7c..5c540389 100644
--- a/plugins/sierra/mm-broadband-bearer-sierra.c
+++ b/plugins/sierra/mm-broadband-bearer-sierra.c
@@ -663,7 +663,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = load_connection_status;
base_bearer_class->reload_connection_status_finish = load_connection_status_finish;
#endif
diff --git a/po/POTFILES.in b/po/POTFILES.in
index e1be0d06..2097e3a0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,4 +1,5 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
data/org.freedesktop.ModemManager1.policy.in.in
-src/mm-sleep-monitor.c
+src/mm-sleep-monitor-powerd.c
+src/mm-sleep-monitor-systemd.c
diff --git a/src/Makefile.am b/src/Makefile.am
index e4ca5f7a..2a2c30dd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -399,7 +399,17 @@ nodist_ModemManager_SOURCES = $(DAEMON_ENUMS_GENERATED)
# Additional suspend/resume support via systemd
if WITH_SYSTEMD_SUSPEND_RESUME
-ModemManager_SOURCES += mm-sleep-monitor.h mm-sleep-monitor.c
+ModemManager_SOURCES += \
+ mm-sleep-monitor.h \
+ mm-sleep-monitor-systemd.c \
+ $(NULL)
+endif
+
+if WITH_POWERD_SUSPEND_RESUME
+ModemManager_SOURCES += \
+ mm-sleep-monitor.h \
+ mm-sleep-monitor-powerd.c \
+ $(NULL)
endif
# Additional QMI support in ModemManager
diff --git a/src/main.c b/src/main.c
index 8516d7bc..368df7ae 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,7 +31,7 @@
#include "mm-base-manager.h"
#include "mm-context.h"
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
# include "mm-sleep-monitor.h"
#endif
@@ -56,7 +56,7 @@ quit_cb (gpointer user_data)
return FALSE;
}
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
static void
sleeping_cb (MMSleepMonitor *sleep_monitor)
@@ -193,7 +193,7 @@ main (int argc, char *argv[])
name_lost_cb,
NULL,
NULL);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
{
MMSleepMonitor *sleep_monitor;
diff --git a/src/meson.build b/src/meson.build
index fdf6b09c..2d1faed7 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -266,7 +266,7 @@ endif
# Additional suspend/resume support via systemd
if enable_systemd_suspend_resume
- sources += files('mm-sleep-monitor.c')
+ sources += files('mm-sleep-monitor-systemd.c')
deps += [
gio_unix_dep,
@@ -274,6 +274,11 @@ if enable_systemd_suspend_resume
]
endif
+#suspend/resume support via powerd
+if enable_powerd_suspend_resume
+ sources += files('mm-sleep-monitor-powerd.c')
+endif
+
if enable_polkit
deps += polkit_gobject_dep
endif
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c
index f8d8e73a..64a19a97 100644
--- a/src/mm-base-bearer.c
+++ b/src/mm-base-bearer.c
@@ -1604,7 +1604,7 @@ mm_base_bearer_report_connection_status_detailed (MMBaseBearer *self
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef struct _SyncingContext SyncingContext;
static void interface_syncing_step (GTask *task);
diff --git a/src/mm-base-bearer.h b/src/mm-base-bearer.h
index c497a6d5..336b4442 100644
--- a/src/mm-base-bearer.h
+++ b/src/mm-base-bearer.h
@@ -149,7 +149,7 @@ struct _MMBaseBearerClass {
GAsyncResult *res,
GError **error);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
/* Reload connection status:
*
@@ -226,7 +226,7 @@ void mm_base_bearer_report_speeds (MMBaseBearer *self,
guint64 uplink_speed,
guint64 downlink_speed);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
/* Sync Broadband Bearer (async) */
void mm_base_bearer_sync (MMBaseBearer *self,
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 46f1ad43..13a98ebc 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -727,7 +727,7 @@ mm_base_manager_num_modems (MMBaseManager *self)
/*****************************************************************************/
/* Quick resume synchronization */
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
static void
base_modem_sync_ready (MMBaseModem *self,
diff --git a/src/mm-base-manager.h b/src/mm-base-manager.h
index be51d0c0..e913f497 100644
--- a/src/mm-base-manager.h
+++ b/src/mm-base-manager.h
@@ -66,7 +66,7 @@ void mm_base_manager_start (MMBaseManager *manager,
void mm_base_manager_shutdown (MMBaseManager *manager,
gboolean disable);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
void mm_base_manager_sync (MMBaseManager *manager);
#endif
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 9dc26601..e7c49025 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -629,7 +629,7 @@ mm_base_modem_wait_link_port (MMBaseModem *self,
/******************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
gboolean
mm_base_modem_sync_finish (MMBaseModem *self,
@@ -675,7 +675,7 @@ mm_base_modem_sync (MMBaseModem *self,
task);
}
-#endif /* WITH_SYSTEMD_SUSPEND_RESUME */
+#endif /* WITH_SUSPEND_RESUME */
/******************************************************************************/
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index 1b7a2219..24eba82b 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -109,7 +109,7 @@ struct _MMBaseModemClass {
GAsyncResult *res,
GError **error);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
/* Modem synchronization.
* When resuming in quick suspend/resume mode,
* this method triggers a synchronization of all modem interfaces */
@@ -245,7 +245,7 @@ gboolean mm_base_modem_disable_finish (MMBaseModem *self,
GAsyncResult *res,
GError **error);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
void mm_base_modem_sync (MMBaseModem *self,
GAsyncReadyCallback callback,
diff --git a/src/mm-bearer-list.c b/src/mm-bearer-list.c
index 790115eb..42e6b3ba 100644
--- a/src/mm-bearer-list.c
+++ b/src/mm-bearer-list.c
@@ -277,7 +277,7 @@ mm_bearer_list_disconnect_all_bearers (MMBearerList *self,
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef struct {
GList *pending;
diff --git a/src/mm-bearer-list.h b/src/mm-bearer-list.h
index 8f3c8d49..50338fdf 100644
--- a/src/mm-bearer-list.h
+++ b/src/mm-bearer-list.h
@@ -86,7 +86,7 @@ gboolean mm_bearer_list_disconnect_all_bearers_finish (MMBearerList *self,
GAsyncResult *res,
GError **error);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
void mm_bearer_list_sync_all_bearers (MMBearerList *self,
GAsyncReadyCallback callback,
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index 3a56e07e..542881e3 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -1709,7 +1709,7 @@ report_connection_status (MMBaseBearer *self,
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
static MMBearerConnectionStatus
reload_connection_status_finish (MMBaseBearer *self,
@@ -1845,7 +1845,7 @@ reload_connection_status (MMBaseBearer *self,
task);
}
-#endif /* WITH_SYSTEMD_SUSPEND_RESUME */
+#endif /* WITH_SUSPEND_RESUME */
/*****************************************************************************/
@@ -1906,7 +1906,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = reload_connection_status;
base_bearer_class->reload_connection_status_finish = reload_connection_status_finish;
#endif
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index c6835e40..b0a86bc4 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -2680,7 +2680,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = reload_connection_status;
base_bearer_class->reload_connection_status_finish = reload_connection_status_finish;
#endif
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index ffb5d6e8..0a4f7477 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -2043,7 +2043,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_bearer_class->reload_connection_status = load_connection_status;
base_bearer_class->reload_connection_status_finish = load_connection_status_finish;
#endif
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 3dde167e..5c309195 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -12064,7 +12064,7 @@ enable (MMBaseModem *self,
}
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef enum {
SYNCING_STEP_FIRST,
@@ -13640,7 +13640,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
base_modem_class->sync = synchronize;
base_modem_class->sync_finish = synchronize_finish;
#endif
diff --git a/src/mm-context.c b/src/mm-context.c
index 37793e5a..ecb409bb 100644
--- a/src/mm-context.c
+++ b/src/mm-context.c
@@ -231,7 +231,7 @@ static gchar *test_plugin_dir;
#if defined WITH_UDEV
static gboolean test_no_udev;
#endif
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
static gboolean test_no_suspend_resume;
static gboolean test_quick_suspend_resume;
#endif
@@ -266,7 +266,7 @@ static const GOptionEntry test_entries[] = {
NULL
},
#endif
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
{
"test-no-suspend-resume", 0, 0, G_OPTION_ARG_NONE, &test_no_suspend_resume,
"Disable suspend/resume support at runtime even if available",
@@ -340,7 +340,7 @@ mm_context_get_test_no_udev (void)
}
#endif
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
gboolean
mm_context_get_test_no_suspend_resume (void)
{
diff --git a/src/mm-context.h b/src/mm-context.h
index 8a5c0458..f33f27ac 100644
--- a/src/mm-context.h
+++ b/src/mm-context.h
@@ -50,7 +50,7 @@ const gchar *mm_context_get_test_plugin_dir (void);
#if defined WITH_UDEV
gboolean mm_context_get_test_no_udev (void);
#endif
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
gboolean mm_context_get_test_no_suspend_resume (void);
gboolean mm_context_get_test_quick_suspend_resume (void);
#endif
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 51536612..000d1abb 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -2794,7 +2794,7 @@ mm_iface_modem_3gpp_enable (MMIfaceModem3gpp *self,
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef struct _SyncingContext SyncingContext;
static void interface_syncing_step (GTask *task);
diff --git a/src/mm-iface-modem-3gpp.h b/src/mm-iface-modem-3gpp.h
index 39425f0f..042af657 100644
--- a/src/mm-iface-modem-3gpp.h
+++ b/src/mm-iface-modem-3gpp.h
@@ -302,7 +302,7 @@ gboolean mm_iface_modem_3gpp_disable_finish (MMIfaceModem3gpp *self,
GAsyncResult *res,
GError **error);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
/* Sync 3GPP interface (async) */
void mm_iface_modem_3gpp_sync (MMIfaceModem3gpp *self,
diff --git a/src/mm-iface-modem-time.c b/src/mm-iface-modem-time.c
index 0d4f3764..af631bcc 100644
--- a/src/mm-iface-modem-time.c
+++ b/src/mm-iface-modem-time.c
@@ -728,7 +728,7 @@ mm_iface_modem_time_enable (MMIfaceModemTime *self,
/*****************************************************************************/
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef struct _SyncingContext SyncingContext;
static void interface_syncing_step (GTask *task);
diff --git a/src/mm-iface-modem-time.h b/src/mm-iface-modem-time.h
index a3ac7074..753dc837 100644
--- a/src/mm-iface-modem-time.h
+++ b/src/mm-iface-modem-time.h
@@ -125,7 +125,7 @@ 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
+#if defined WITH_SUSPEND_RESUME
/* Sync Time interface (async) */
void mm_iface_modem_time_sync (MMIfaceModemTime *self,
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index bea7f077..69c1872b 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -4472,7 +4472,7 @@ mm_iface_modem_enable (MMIfaceModem *self,
/*****************************************************************************/
/* MODEM SYNCHRONIZATION */
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
typedef struct _SyncingContext SyncingContext;
static void interface_syncing_step (GTask *task);
diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h
index 43034dda..cf4274be 100644
--- a/src/mm-iface-modem.h
+++ b/src/mm-iface-modem.h
@@ -481,7 +481,7 @@ void mm_iface_modem_shutdown (MMIfaceModem *self);
gboolean mm_iface_modem_abort_invocation_if_state_not_reached (MMIfaceModem *self,
GDBusMethodInvocation *invocation,
MMModemState minimum_required);
-#if defined WITH_SYSTEMD_SUSPEND_RESUME
+#if defined WITH_SUSPEND_RESUME
/* Sync Modem interface (async) */
void mm_iface_modem_sync (MMIfaceModem *self,
diff --git a/src/mm-sleep-monitor-powerd.c b/src/mm-sleep-monitor-powerd.c
new file mode 100644
index 00000000..4d6d7bba
--- /dev/null
+++ b/src/mm-sleep-monitor-powerd.c
@@ -0,0 +1,171 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2022 Google, Inc.
+ * Author: Rukun Mao <rmao@google.com>
+ * Original code from ./mm-sleep-monitor-systemd.c
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+#include "mm-log-object.h"
+#include "mm-utils.h"
+#include "mm-sleep-monitor.h"
+
+#define PD_NAME "org.chromium.PowerManager"
+#define PD_PATH "/org/chromium/PowerManager"
+#define PD_INTERFACE "org.chromium.PowerManager"
+
+struct _MMSleepMonitor {
+ GObject parent_instance;
+
+ GDBusProxy *pd_proxy;
+};
+
+struct _MMSleepMonitorClass {
+ GObjectClass parent_class;
+
+ void (*sleeping) (MMSleepMonitor *monitor);
+ void (*resuming) (MMSleepMonitor *monitor);
+};
+
+enum {
+ SLEEPING,
+ RESUMING,
+ LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
+static void log_object_iface_init (MMLogObjectInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (MMSleepMonitor, mm_sleep_monitor, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init))
+
+/*****************************************************************************/
+
+static gchar *
+log_object_build_id (MMLogObject *_self)
+{
+ return g_strdup ("sleep-monitor-powerd");
+}
+
+/********************************************************************/
+
+static void
+signal_cb (GDBusProxy *proxy,
+ const gchar *sendername,
+ const gchar *signalname,
+ GVariant *args,
+ gpointer data)
+{
+ MMSleepMonitor *self = data;
+ gboolean is_about_to_suspend;
+
+ if (proxy == self->pd_proxy) {
+ if (strcmp (signalname, "SuspendImminent") == 0) {
+ mm_obj_info (self, "system suspend signal from powerd");
+ g_signal_emit (self, signals[SLEEPING], 0);
+ } else if (strcmp (signalname, "SuspendDone") == 0) {
+ mm_obj_info (self, "system resume signal from powerd");
+ g_signal_emit (self, signals[RESUMING], 0);
+ }
+ }
+}
+
+static void
+on_pd_proxy_acquired (GObject *object,
+ GAsyncResult *res,
+ MMSleepMonitor *self)
+{
+ GError *error = NULL;
+ char *owner;
+
+ self->pd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (!self->pd_proxy) {
+ mm_obj_warn (self, "failed to acquire powerd proxy: %s", error->message);
+ g_clear_error (&error);
+ return;
+ }
+
+ g_signal_connect (self->pd_proxy, "g-signal", G_CALLBACK (signal_cb), self);
+}
+
+static void
+mm_sleep_monitor_init (MMSleepMonitor *self)
+{
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ PD_NAME, PD_PATH, PD_INTERFACE,
+ NULL,
+ (GAsyncReadyCallback) on_pd_proxy_acquired, self);
+}
+
+static void
+finalize (GObject *object)
+{
+ MMSleepMonitor *self = MM_SLEEP_MONITOR (object);
+
+ if (self->pd_proxy)
+ g_object_unref (self->pd_proxy);
+
+ if (G_OBJECT_CLASS (mm_sleep_monitor_parent_class)->finalize != NULL)
+ G_OBJECT_CLASS (mm_sleep_monitor_parent_class)->finalize (object);
+}
+
+static void
+log_object_iface_init (MMLogObjectInterface *iface)
+{
+ iface->build_id = log_object_build_id;
+}
+
+static void
+mm_sleep_monitor_class_init (MMSleepMonitorClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = finalize;
+
+ signals[SLEEPING] = g_signal_new (MM_SLEEP_MONITOR_SLEEPING,
+ MM_TYPE_SLEEP_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MMSleepMonitorClass, sleeping),
+ NULL, /* accumulator */
+ NULL, /* accumulator data */
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[RESUMING] = g_signal_new (MM_SLEEP_MONITOR_RESUMING,
+ MM_TYPE_SLEEP_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MMSleepMonitorClass, resuming),
+ NULL, /* accumulator */
+ NULL, /* accumulator data */
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+MM_DEFINE_SINGLETON_GETTER (MMSleepMonitor, mm_sleep_monitor_get, MM_TYPE_SLEEP_MONITOR);
+
+/* ---------------------------------------------------------------------------------------------------- */
diff --git a/src/mm-sleep-monitor.c b/src/mm-sleep-monitor-systemd.c
index d3d181c1..a65aac42 100644
--- a/src/mm-sleep-monitor.c
+++ b/src/mm-sleep-monitor-systemd.c
@@ -34,7 +34,6 @@
#define SD_PATH "/org/freedesktop/login1"
#define SD_INTERFACE "org.freedesktop.login1.Manager"
-
struct _MMSleepMonitor {
GObject parent_instance;
@@ -55,6 +54,7 @@ enum {
RESUMING,
LAST_SIGNAL,
};
+
static guint signals[LAST_SIGNAL] = {0};
static void log_object_iface_init (MMLogObjectInterface *iface);
@@ -67,7 +67,7 @@ G_DEFINE_TYPE_EXTENDED (MMSleepMonitor, mm_sleep_monitor, G_TYPE_OBJECT, 0,
static gchar *
log_object_build_id (MMLogObject *_self)
{
- return g_strdup ("sleep-monitor");
+ return g_strdup ("sleep-monitor-systemd");
}
/********************************************************************/