cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

suspend.h (1694B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_SUSPEND_H
      3#define __ASM_SUSPEND_H
      4
      5#define NR_CTX_REGS 13
      6#define NR_CALLEE_SAVED_REGS 12
      7
      8/*
      9 * struct cpu_suspend_ctx must be 16-byte aligned since it is allocated on
     10 * the stack, which must be 16-byte aligned on v8
     11 */
     12struct cpu_suspend_ctx {
     13	/*
     14	 * This struct must be kept in sync with
     15	 * cpu_do_{suspend/resume} in mm/proc.S
     16	 */
     17	u64 ctx_regs[NR_CTX_REGS];
     18	u64 sp;
     19} __aligned(16);
     20
     21/*
     22 * Memory to save the cpu state is allocated on the stack by
     23 * __cpu_suspend_enter()'s caller, and populated by __cpu_suspend_enter().
     24 * This data must survive until cpu_resume() is called.
     25 *
     26 * This struct desribes the size and the layout of the saved cpu state.
     27 * The layout of the callee_saved_regs is defined by the implementation
     28 * of __cpu_suspend_enter(), and cpu_resume(). This struct must be passed
     29 * in by the caller as __cpu_suspend_enter()'s stack-frame is gone once it
     30 * returns, and the data would be subsequently corrupted by the call to the
     31 * finisher.
     32 */
     33struct sleep_stack_data {
     34	struct cpu_suspend_ctx	system_regs;
     35	unsigned long		callee_saved_regs[NR_CALLEE_SAVED_REGS];
     36};
     37
     38extern unsigned long *sleep_save_stash;
     39
     40extern int cpu_suspend(unsigned long arg, int (*fn)(unsigned long));
     41extern void cpu_resume(void);
     42int __cpu_suspend_enter(struct sleep_stack_data *state);
     43void __cpu_suspend_exit(void);
     44void _cpu_resume(void);
     45
     46int swsusp_arch_suspend(void);
     47int swsusp_arch_resume(void);
     48int arch_hibernation_header_save(void *addr, unsigned int max_size);
     49int arch_hibernation_header_restore(void *addr);
     50
     51/* Used to resume on the CPU we hibernated on */
     52int hibernate_resume_nonboot_cpu_disable(void);
     53
     54#endif