riscv: kernel: Add support for hibernate/suspend to disk
[platform/kernel/linux-starfive.git] / arch / riscv / include / asm / suspend.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2021 Western Digital Corporation or its affiliates.
4  * Copyright (c) 2022 Ventana Micro Systems Inc.
5  */
6
7 #ifndef _ASM_RISCV_SUSPEND_H
8 #define _ASM_RISCV_SUSPEND_H
9
10 #include <asm/ptrace.h>
11
12 struct suspend_context {
13         /* Saved and restored by low-level functions */
14         struct pt_regs regs;
15         /* Saved and restored by high-level functions */
16         unsigned long scratch;
17         unsigned long tvec;
18         unsigned long ie;
19 #ifdef CONFIG_MMU
20         unsigned long satp;
21 #endif
22 };
23
24 /* Low-level CPU suspend entry function */
25 int __cpu_suspend_enter(struct suspend_context *context);
26
27 /* High-level CPU suspend which will save context and call finish() */
28 int cpu_suspend(unsigned long arg,
29                 int (*finish)(unsigned long arg,
30                               unsigned long entry,
31                               unsigned long context));
32
33 /* Low-level CPU resume entry function */
34 int __cpu_resume_enter(unsigned long hartid, unsigned long context);
35
36 /* Low-level API to support hibernation */
37 int swsusp_arch_suspend(void);
38 int swsusp_arch_resume(void);
39 int arch_hibernation_header_save(void *addr, unsigned int max_size);
40 int arch_hibernation_header_restore(void *addr);
41
42 /* Used to resume on the CPU we hibernated on */
43 int hibernate_resume_nonboot_cpu_disable(void);
44
45 #endif