Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/avr32/include/asm/asm.h
10819 views
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
104