linux/arch/sh/include/asm/suspend.h
<<
>>
Prefs
   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