0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __ASM_PM_H
0009 #define __ASM_PM_H
0010
0011 #ifdef __ASSEMBLY__
0012
0013 #include <asm/asm-offsets.h>
0014 #include <asm/asm.h>
0015 #include <asm/mipsregs.h>
0016 #include <asm/regdef.h>
0017
0018
0019 .macro SUSPEND_SAVE_REGS
0020 subu sp, PT_SIZE
0021
0022 LONG_S $16, PT_R16(sp)
0023 LONG_S $17, PT_R17(sp)
0024 LONG_S $18, PT_R18(sp)
0025 LONG_S $19, PT_R19(sp)
0026 LONG_S $20, PT_R20(sp)
0027 LONG_S $21, PT_R21(sp)
0028 LONG_S $22, PT_R22(sp)
0029 LONG_S $23, PT_R23(sp)
0030 LONG_S $28, PT_R28(sp)
0031 LONG_S $30, PT_R30(sp)
0032 LONG_S $31, PT_R31(sp)
0033
0034 mfc0 k0, CP0_STATUS
0035 LONG_S k0, PT_STATUS(sp)
0036 .endm
0037
0038
0039 .macro RESUME_RESTORE_REGS_RETURN
0040 .set push
0041 .set noreorder
0042
0043 LONG_L k0, PT_STATUS(sp)
0044 mtc0 k0, CP0_STATUS
0045
0046 LONG_L $16, PT_R16(sp)
0047 LONG_L $17, PT_R17(sp)
0048 LONG_L $18, PT_R18(sp)
0049 LONG_L $19, PT_R19(sp)
0050 LONG_L $20, PT_R20(sp)
0051 LONG_L $21, PT_R21(sp)
0052 LONG_L $22, PT_R22(sp)
0053 LONG_L $23, PT_R23(sp)
0054 LONG_L $28, PT_R28(sp)
0055 LONG_L $30, PT_R30(sp)
0056 LONG_L $31, PT_R31(sp)
0057
0058 jr ra
0059 addiu sp, PT_SIZE
0060 .set pop
0061 .endm
0062
0063
0064 .macro LA_STATIC_SUSPEND
0065 la t1, mips_static_suspend_state
0066 .endm
0067
0068
0069 .macro SUSPEND_SAVE_STATIC
0070 #ifdef CONFIG_EVA
0071
0072
0073
0074
0075 mfc0 k0, CP0_PAGEMASK, 2
0076 LONG_S k0, SSS_SEGCTL0(t1)
0077 mfc0 k0, CP0_PAGEMASK, 3
0078 LONG_S k0, SSS_SEGCTL1(t1)
0079 mfc0 k0, CP0_PAGEMASK, 4
0080 LONG_S k0, SSS_SEGCTL2(t1)
0081 #endif
0082
0083 LONG_S sp, SSS_SP(t1)
0084 .endm
0085
0086
0087 .macro RESUME_RESTORE_STATIC
0088 #ifdef CONFIG_EVA
0089
0090
0091
0092
0093
0094 LONG_L k0, SSS_SEGCTL0(t1)
0095 mtc0 k0, CP0_PAGEMASK, 2
0096 LONG_L k0, SSS_SEGCTL1(t1)
0097 mtc0 k0, CP0_PAGEMASK, 3
0098 LONG_L k0, SSS_SEGCTL2(t1)
0099 mtc0 k0, CP0_PAGEMASK, 4
0100 tlbw_use_hazard
0101 #endif
0102
0103 LONG_L sp, SSS_SP(t1)
0104 .endm
0105
0106
0107 .macro SUSPEND_CACHE_FLUSH
0108 .extern __wback_cache_all
0109 .set push
0110 .set noreorder
0111 la t1, __wback_cache_all
0112 LONG_L t0, 0(t1)
0113 jalr t0
0114 nop
0115 .set pop
0116 .endm
0117
0118
0119 .macro SUSPEND_SAVE
0120 SUSPEND_SAVE_REGS
0121 LA_STATIC_SUSPEND
0122 SUSPEND_SAVE_STATIC
0123 SUSPEND_CACHE_FLUSH
0124 .endm
0125
0126
0127 .macro RESUME_RESTORE_RETURN
0128 LA_STATIC_SUSPEND
0129 RESUME_RESTORE_STATIC
0130 RESUME_RESTORE_REGS_RETURN
0131 .endm
0132
0133 #else
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146 struct mips_static_suspend_state {
0147 #ifdef CONFIG_EVA
0148 unsigned long segctl[3];
0149 #endif
0150 unsigned long sp;
0151 };
0152
0153 #endif
0154
0155 #endif