Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
asm.h
Go to the documentation of this file.
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
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
90  ld.w \scratch, \scratch[TI_flags]
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__ */