1 /* SPDX-License-Identifier: LGPL-2.1+ */
4 #include <linux/fiemap.h>
7 typedef struct SleepConfig
{
8 bool allow_suspend
; /* AllowSuspend */
9 bool allow_hibernate
; /* AllowHibernation */
10 bool allow_s2h
; /* AllowSuspendThenHibernate */
11 bool allow_hybrid_sleep
; /* AllowHybridSleep */
13 char **suspend_modes
; /* SuspendMode */
14 char **suspend_states
; /* SuspendState */
15 char **hibernate_modes
; /* HibernateMode */
16 char **hibernate_states
; /* HibernateState */
17 char **hybrid_modes
; /* HybridSleepMode */
18 char **hybrid_states
; /* HybridSleepState */
20 usec_t hibernate_delay_sec
; /* HibernateDelaySec */
23 void free_sleep_config(SleepConfig
*sc
);
24 DEFINE_TRIVIAL_CLEANUP_FUNC(SleepConfig
*, free_sleep_config
);
26 /* entry in /proc/swaps */
27 typedef struct SwapEntry
{
35 SwapEntry
* swap_entry_free(SwapEntry
*se
);
36 DEFINE_TRIVIAL_CLEANUP_FUNC(SwapEntry
*, swap_entry_free
);
39 * represents values for /sys/power/resume & /sys/power/resume_offset
40 * and the matching /proc/swap entry.
42 typedef struct HibernateLocation
{
48 HibernateLocation
* hibernate_location_free(HibernateLocation
*hl
);
49 DEFINE_TRIVIAL_CLEANUP_FUNC(HibernateLocation
*, hibernate_location_free
);
51 int sleep_settings(const char *verb
, const SleepConfig
*sleep_config
, bool *ret_allow
, char ***ret_modes
, char ***ret_states
);
53 int read_fiemap(int fd
, struct fiemap
**ret
);
54 int parse_sleep_config(SleepConfig
**sleep_config
);
55 int find_hibernate_location(HibernateLocation
**ret_hibernate_location
);
57 int can_sleep(const char *verb
);
58 int can_sleep_disk(char **types
);
59 int can_sleep_state(char **types
);