]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/sleep-config.h
man/systemd-sysext: list ephemeral/ephemeral-import in the list of options
[thirdparty/systemd.git] / src / shared / sleep-config.h
CommitLineData
54d7fcc6
MY
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2#pragma once
3
69a283c5 4#include "forward.h"
54d7fcc6 5
54d7fcc6
MY
6typedef enum SleepOperation {
7 SLEEP_SUSPEND,
8 SLEEP_HIBERNATE,
9 SLEEP_HYBRID_SLEEP,
087a25d2
MY
10 _SLEEP_OPERATION_CONFIG_MAX,
11 /* The operations above require configuration for mode and state. The ones below are "combined"
12 * operations that use config from those individual operations. */
13
54d7fcc6 14 SLEEP_SUSPEND_THEN_HIBERNATE,
087a25d2 15
54d7fcc6
MY
16 _SLEEP_OPERATION_MAX,
17 _SLEEP_OPERATION_INVALID = -EINVAL,
18} SleepOperation;
19
087a25d2
MY
20const char* sleep_operation_to_string(SleepOperation s) _const_;
21SleepOperation sleep_operation_from_string(const char *s) _pure_;
22
792dd6f4 23static inline bool SLEEP_OPERATION_IS_HIBERNATION(SleepOperation operation) {
e024cdd2
MY
24 return IN_SET(operation, SLEEP_HIBERNATE, SLEEP_HYBRID_SLEEP);
25}
26
54d7fcc6
MY
27typedef struct SleepConfig {
28 bool allow[_SLEEP_OPERATION_MAX];
563ef8f9 29
087a25d2 30 char **states[_SLEEP_OPERATION_CONFIG_MAX];
a2124b35
MY
31 char **modes[_SLEEP_OPERATION_CONFIG_MAX]; /* Power mode after writing hibernation image (/sys/power/disk) */
32 char **mem_modes; /* /sys/power/mem_sleep */
087a25d2 33
54d7fcc6 34 usec_t hibernate_delay_usec;
2d00f4c3 35 bool hibernate_on_ac_power;
54d7fcc6
MY
36 usec_t suspend_estimation_usec;
37} SleepConfig;
38
087a25d2
MY
39SleepConfig* sleep_config_free(SleepConfig *sc);
40DEFINE_TRIVIAL_CLEANUP_FUNC(SleepConfig*, sleep_config_free);
54d7fcc6
MY
41
42int parse_sleep_config(SleepConfig **sleep_config);
43
dbef7bcf 44bool sleep_needs_mem_sleep(const SleepConfig *sc, SleepOperation operation) _pure_;
a2124b35 45
a0f6d74e
MY
46typedef enum SleepSupport {
47 SLEEP_SUPPORTED,
48 SLEEP_DISABLED, /* Disabled in SleepConfig.allow */
49 SLEEP_NOT_CONFIGURED, /* SleepConfig.states is not configured */
50 SLEEP_STATE_OR_MODE_NOT_SUPPORTED, /* SleepConfig.states/modes are not supported by kernel */
805deec0 51 SLEEP_RESUME_NOT_SUPPORTED,
40eb83a8 52 SLEEP_RESUME_DEVICE_MISSING, /* resume= is specified, but the device cannot be found in /proc/swaps */
3fce141c 53 SLEEP_RESUME_MISCONFIGURED, /* resume= is not set yet resume_offset= is configured */
a0f6d74e
MY
54 SLEEP_NOT_ENOUGH_SWAP_SPACE,
55 SLEEP_ALARM_NOT_SUPPORTED, /* CLOCK_BOOTTIME_ALARM is unsupported by kernel (only used by s2h) */
56} SleepSupport;
57
58int sleep_supported_full(SleepOperation operation, SleepSupport *ret_support);
59static inline int sleep_supported(SleepOperation operation) {
60 return sleep_supported_full(operation, NULL);
61}
23577f44
MY
62
63/* Only for test-sleep-config */
b0e3b85a
MY
64int sleep_state_supported(char * const *states);
65int sleep_mode_supported(const char *path, char * const *modes);