File: /usr/src/linux/include/asm-m68k/entry.h

1     #ifndef __M68K_ENTRY_H
2     #define __M68K_ENTRY_H
3     
4     #include <linux/config.h>
5     #include <asm/setup.h>
6     #include <asm/page.h>
7     
8     /*
9      * Stack layout in 'ret_from_exception':
10      *
11      *	This allows access to the syscall arguments in registers d1-d5
12      *
13      *	 0(sp) - d1
14      *	 4(sp) - d2
15      *	 8(sp) - d3
16      *	 C(sp) - d4
17      *	10(sp) - d5
18      *	14(sp) - a0
19      *	18(sp) - a1
20      *	1C(sp) - a2
21      *	20(sp) - d0
22      *	24(sp) - orig_d0
23      *	28(sp) - stack adjustment
24      *	2C(sp) - sr
25      *	2E(sp) - pc
26      *	32(sp) - format & vector
27      */
28     
29     /*
30      * 97/05/14 Andreas: Register %a2 is now set to the current task throughout
31      *		     the whole kernel.
32      */
33     
34     /* the following macro is used when enabling interrupts */
35     #if defined(MACH_ATARI_ONLY) && !defined(CONFIG_HADES)
36     	/* block out HSYNC on the atari */
37     #define ALLOWINT 0xfbff
38     #define	MAX_NOINT_IPL	3
39     #else
40     	/* portable version */
41     #define ALLOWINT 0xf8ff
42     #define	MAX_NOINT_IPL	0
43     #endif /* machine compilation types */ 
44     
45     #ifdef __ASSEMBLY__
46     
47     #define curptr a2
48     
49     LFLUSH_I_AND_D = 0x00000808
50     LSIGTRAP = 5
51     
52     /* process bits for task_struct.ptrace */
53     PT_TRACESYS_OFF = 3
54     PT_TRACESYS_BIT = 1
55     PT_PTRACED_OFF = 3
56     PT_PTRACED_BIT = 0
57     PT_DTRACE_OFF = 3
58     PT_DTRACE_BIT = 2
59     
60     #define SAVE_ALL_INT save_all_int
61     #define SAVE_ALL_SYS save_all_sys
62     #define RESTORE_ALL restore_all
63     /*
64      * This defines the normal kernel pt-regs layout.
65      *
66      * regs a3-a6 and d6-d7 are preserved by C code
67      * the kernel doesn't mess with usp unless it needs to
68      */
69     
70     /*
71      * a -1 in the orig_d0 field signifies
72      * that the stack frame is NOT for syscall
73      */
74     .macro	save_all_int
75     	clrl	%sp@-		| stk_adj
76     	pea	-1:w		| orig d0
77     	movel	%d0,%sp@-	| d0
78     	moveml	%d1-%d5/%a0-%a1/%curptr,%sp@-
79     .endm
80     
81     .macro	save_all_sys
82     	clrl	%sp@-		| stk_adj
83     	movel	%d0,%sp@-	| orig d0
84     	movel	%d0,%sp@-	| d0
85     	moveml	%d1-%d5/%a0-%a1/%curptr,%sp@-
86     .endm
87     
88     .macro	restore_all
89     	moveml	%sp@+,%a0-%a1/%curptr/%d1-%d5
90     	movel	%sp@+,%d0
91     	addql	#4,%sp		| orig d0
92     	addl	%sp@+,%sp	| stk adj
93     	rte
94     .endm
95     
96     #define SWITCH_STACK_SIZE (6*4+4)	/* includes return address */
97     
98     #define SAVE_SWITCH_STACK save_switch_stack
99     #define RESTORE_SWITCH_STACK restore_switch_stack
100     #define GET_CURRENT(tmp) get_current tmp
101     
102     .macro	save_switch_stack
103     	moveml	%a3-%a6/%d6-%d7,%sp@-
104     .endm
105     
106     .macro	restore_switch_stack
107     	moveml	%sp@+,%a3-%a6/%d6-%d7
108     .endm
109     
110     .macro	get_current reg=%d0
111     	movel	%sp,\reg
112     	andw	#-KTHREAD_SIZE,\reg
113     	movel	\reg,%curptr
114     .endm
115     
116     #else /* C source */
117     
118     #define STR(X) STR1(X)
119     #define STR1(X) #X
120     
121     #define PT_OFF_ORIG_D0	 0x24
122     #define PT_OFF_FORMATVEC 0x32
123     #define PT_OFF_SR	 0x2C
124     #define SAVE_ALL_INT				\
125     	"clrl	%%sp@-;"    /* stk_adj */	\
126     	"pea	-1:w;"	    /* orig d0 = -1 */	\
127     	"movel	%%d0,%%sp@-;" /* d0 */		\
128     	"moveml	%%d1-%%d5/%%a0-%%a2,%%sp@-"
129     #define GET_CURRENT(tmp) \
130     	"movel	%%sp,"#tmp"\n\t" \
131     	"andw	#-"STR(KTHREAD_SIZE)","#tmp"\n\t" \
132     	"movel	"#tmp",%%a2"
133     
134     #endif
135     
136     #endif /* __M68K_ENTRY_H */
137