1#ifndef _ASM_SH_SUSPEND_H 2#define _ASM_SH_SUSPEND_H 3 4#ifndef __ASSEMBLY__ 5#include <linux/notifier.h> 6 7#include <asm/ptrace.h> 8 9struct swsusp_arch_regs { 10 struct pt_regs user_regs; 11 unsigned long bank1_regs[8]; 12}; 13 14void sh_mobile_call_standby(unsigned long mode); 15 16#ifdef CONFIG_CPU_IDLE 17int sh_mobile_setup_cpuidle(void); 18#else 19static inline int sh_mobile_setup_cpuidle(void) { return 0; } 20#endif 21 22/* notifier chains for pre/post sleep hooks */ 23extern struct atomic_notifier_head sh_mobile_pre_sleep_notifier_list; 24extern struct atomic_notifier_head sh_mobile_post_sleep_notifier_list; 25 26/* priority levels for notifiers */ 27#define SH_MOBILE_SLEEP_BOARD 0 28#define SH_MOBILE_SLEEP_CPU 1 29#define SH_MOBILE_PRE(x) (x) 30#define SH_MOBILE_POST(x) (-(x)) 31 32/* board code registration function for self-refresh assembly snippets */ 33void sh_mobile_register_self_refresh(unsigned long flags, 34 void *pre_start, void *pre_end, 35 void *post_start, void *post_end); 36 37/* register structure for address/data information */ 38struct sh_sleep_regs { 39 unsigned long stbcr; 40 unsigned long bar; 41 42 /* MMU */ 43 unsigned long pteh; 44 unsigned long ptel; 45 unsigned long ttb; 46 unsigned long tea; 47 unsigned long mmucr; 48 unsigned long ptea; 49 unsigned long pascr; 50 unsigned long irmcr; 51 52 /* Cache */ 53 unsigned long ccr; 54 unsigned long ramcr; 55}; 56 57/* data area for low-level sleep code */ 58struct sh_sleep_data { 59 /* current sleep mode (SUSP_SH_...) */ 60 unsigned long mode; 61 62 /* addresses of board specific self-refresh snippets */ 63 unsigned long sf_pre; 64 unsigned long sf_post; 65 66 /* address of resume code */ 67 unsigned long resume; 68 69 /* register state saved and restored by the assembly code */ 70 unsigned long vbr; 71 unsigned long spc; 72 unsigned long sr; 73 unsigned long sp; 74 75 /* structure for keeping register addresses */ 76 struct sh_sleep_regs addr; 77 78 /* structure for saving/restoring register state */ 79 struct sh_sleep_regs data; 80}; 81 82/* a bitmap of supported sleep modes (SUSP_SH..) */ 83extern unsigned long sh_mobile_sleep_supported; 84 85#endif 86 87/* flags passed to assembly suspend code */ 88#define SUSP_SH_SLEEP (1 << 0) /* Regular sleep mode */ 89#define SUSP_SH_STANDBY (1 << 1) /* SH-Mobile Software standby mode */ 90#define SUSP_SH_RSTANDBY (1 << 2) /* SH-Mobile R-standby mode */ 91#define SUSP_SH_USTANDBY (1 << 3) /* SH-Mobile U-standby mode */ 92#define SUSP_SH_SF (1 << 4) /* Enable self-refresh */ 93#define SUSP_SH_MMU (1 << 5) /* Save/restore MMU and cache */ 94#define SUSP_SH_REGS (1 << 6) /* Save/restore registers */ 95 96#endif /* _ASM_SH_SUSPEND_H */ 97