Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mn10300
include
asm
frame.inc
Go to the documentation of this file.
1
/* MN10300 Microcontroller core system register definitions -*- asm -*-
2
*
3
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4
* Written by David Howells (
[email protected]
)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public Licence
8
* as published by the Free Software Foundation; either version
9
* 2 of the Licence, or (at your option) any later version.
10
*/
11
#ifndef _ASM_FRAME_INC
12
#define _ASM_FRAME_INC
13
14
#ifndef __ASSEMBLY__
15
#error not for use in C files
16
#endif
17
18
#ifndef __ASM_OFFSETS_H__
19
#include <asm/asm-offsets.h>
20
#endif
21
#include <asm/thread_info.h>
22
23
#define pi break
24
25
#define fp a3
26
27
###############################################################################
28
#
29
# build a stack frame from the registers
30
# - the caller has subtracted 4 from SP before coming here
31
#
32
###############################################################################
33
.macro
SAVE_ALL
34
add
-4,
sp
#
next
exception
frame
ptr
save area
35
movm [
other
],(
sp
)
36
mov usp,
a1
37
mov
a1
,(
sp
) #
USP
in
MOVM[
other
]
dummy
slot
38
movm [
d2
,d3,
a2
,
a3
,exreg0,exreg1,exother],(
sp
)
39
mov
sp
,
fp
# FRAME
pointer
in
A3
40
add
-12,sp # allow
for
calls to be made
41
42
#
push
the
exception
frame
onto
the
front of
the
list
43
GET_THREAD_INFO
a1
44
mov (TI_frame,
a1
),
a0
45
mov
a0
,(REG_NEXT,
fp
)
46
mov
fp
,(TI_frame,
a1
)
47
48
# disable the FPU inside the kernel
49
and
~EPSW_FE,epsw
50
51
# we may be holding current in E2
52
#ifdef CONFIG_MN10300_CURRENT_IN_E2
53
mov (
__current
),
e2
54
#endif
55
.endm
56
57
###############################################################################
58
#
59
# restore the registers from a stack frame
60
#
61
###############################################################################
62
.macro
RESTORE_ALL
63
# peel back the stack to the calling frame
64
# - we need that when returning from interrupts to kernel mode
65
GET_THREAD_INFO a0
66
mov (TI_frame,a0),fp
67
mov
fp
,sp
68
mov (REG_NEXT,fp),
d0
69
mov
d0
,(TI_frame,
a0
) #
userspace
has
regs
->next == 0
70
71
#ifndef CONFIG_MN10300_USING_JTAG
72
mov (REG_EPSW,fp),d0
73
btst EPSW_T,d0
74
beq 99
f
75
76
or
EPSW_NMID,epsw
77
movhu (
DCR
),
d1
78
or
0x0001,
d1
79
movhu
d1
,(
DCR
)
80
81
99:
82
#
endif
83
movm (sp),[
d2
,d3,
a2
,
a3
,exreg0,exreg1,exother]
84
85
# must restore usp even if returning to kernel space,
86
# when CONFIG_PREEMPT is enabled.
87
mov (sp),
a1
#
USP
in
MOVM[
other
]
dummy
slot
88
mov
a1
,usp
89
90
movm (sp),[
other
]
91
add
8,sp
92
rti
93
94
.endm
95
96
97
#endif
/* _ASM_FRAME_INC */
Generated on Thu Jan 10 2013 13:12:25 for Linux Kernel by
1.8.2