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