1 /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 #pragma once 3 4 #include <linux/fiemap.h> 5 #include "time-util.h" 6 7 typedef enum SleepOperation { 8 SLEEP_SUSPEND, 9 SLEEP_HIBERNATE, 10 SLEEP_HYBRID_SLEEP, 11 SLEEP_SUSPEND_THEN_HIBERNATE, 12 _SLEEP_OPERATION_MAX, 13 _SLEEP_OPERATION_INVALID = -EINVAL, 14 } SleepOperation; 15 16 typedef struct SleepConfig { 17 bool allow[_SLEEP_OPERATION_MAX]; 18 char **modes[_SLEEP_OPERATION_MAX]; 19 char **states[_SLEEP_OPERATION_MAX]; 20 usec_t hibernate_delay_sec; 21 } SleepConfig; 22 23 SleepConfig* free_sleep_config(SleepConfig *sc); 24 DEFINE_TRIVIAL_CLEANUP_FUNC(SleepConfig*, free_sleep_config); 25 26 /* entry in /proc/swaps */ 27 typedef struct SwapEntry { 28 char *device; 29 char *type; 30 uint64_t size; 31 uint64_t used; 32 int priority; 33 } SwapEntry; 34 35 SwapEntry* swap_entry_free(SwapEntry *se); 36 DEFINE_TRIVIAL_CLEANUP_FUNC(SwapEntry*, swap_entry_free); 37 38 /* 39 * represents values for /sys/power/resume & /sys/power/resume_offset 40 * and the matching /proc/swap entry. 41 */ 42 typedef struct HibernateLocation { 43 dev_t devno; 44 uint64_t offset; 45 SwapEntry *swap; 46 } HibernateLocation; 47 48 HibernateLocation* hibernate_location_free(HibernateLocation *hl); 49 DEFINE_TRIVIAL_CLEANUP_FUNC(HibernateLocation*, hibernate_location_free); 50 51 int read_fiemap(int fd, struct fiemap **ret); 52 int parse_sleep_config(SleepConfig **sleep_config); 53 int find_hibernate_location(HibernateLocation **ret_hibernate_location); 54 55 int can_sleep(SleepOperation operation); 56 int can_sleep_disk(char **types); 57 int can_sleep_state(char **types); 58 59 const char* sleep_operation_to_string(SleepOperation s) _const_; 60 SleepOperation sleep_operation_from_string(const char *s) _pure_; 61