1 /* 2 * Copyright (C) 2004-2006 Atmel Corporation 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 */ 8 #ifndef __ASM_AVR32_ASM_H__ 9 #define __ASM_AVR32_ASM_H__ 10 11 #include <asm/sysreg.h> 12 #include <asm/asm-offsets.h> 13 #include <asm/thread_info.h> 14 15 #define mask_interrupts ssrf SYSREG_GM_OFFSET 16 #define mask_exceptions ssrf SYSREG_EM_OFFSET 17 #define unmask_interrupts csrf SYSREG_GM_OFFSET 18 #define unmask_exceptions csrf SYSREG_EM_OFFSET 19 20 #ifdef CONFIG_FRAME_POINTER 21 .macro save_fp 22 st.w --sp, r7 23 .endm 24 .macro restore_fp 25 ld.w r7, sp++ 26 .endm 27 .macro zero_fp 28 mov r7, 0 29 .endm 30 #else 31 .macro save_fp 32 .endm 33 .macro restore_fp 34 .endm 35 .macro zero_fp 36 .endm 37 #endif 38 .macro get_thread_info reg 39 mov \reg, sp 40 andl \reg, ~(THREAD_SIZE - 1) & 0xffff 41 .endm 42 43 /* Save and restore registers */ 44 .macro save_min sr, tmp=lr 45 pushm lr 46 mfsr \tmp, \sr 47 zero_fp 48 st.w --sp, \tmp 49 .endm 50 51 .macro restore_min sr, tmp=lr 52 ld.w \tmp, sp++ 53 mtsr \sr, \tmp 54 popm lr 55 .endm 56 57 .macro save_half sr, tmp=lr 58 save_fp 59 pushm r8-r9,r10,r11,r12,lr 60 zero_fp 61 mfsr \tmp, \sr 62 st.w --sp, \tmp 63 .endm 64 65 .macro restore_half sr, tmp=lr 66 ld.w \tmp, sp++ 67 mtsr \sr, \tmp 68 popm r8-r9,r10,r11,r12,lr 69 restore_fp 70 .endm 71 72 .macro save_full_user sr, tmp=lr 73 stmts --sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr 74 st.w --sp, lr 75 zero_fp 76 mfsr \tmp, \sr 77 st.w --sp, \tmp 78 .endm 79 80 .macro restore_full_user sr, tmp=lr 81 ld.w \tmp, sp++ 82 mtsr \sr, \tmp 83 ld.w lr, sp++ 84 ldmts sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr 85 .endm 86 87 /* uaccess macros */ 88 .macro branch_if_kernel scratch, label 89 get_thread_info \scratch 90 ld.w \scratch, \scratch[TI_flags] 91 bld \scratch, TIF_USERSPACE 92 brcc \label 93 .endm 94 95 .macro ret_if_privileged scratch, addr, size, ret 96 sub \scratch, \size, 1 97 add \scratch, \addr 98 retcs \ret 99 retmi \ret 100 .endm 101 102 #endif /* __ASM_AVR32_ASM_H__ */ 103