entry.h revision 61619b12078dc8b85a3d4cbfa16f650daa341bd1
161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifndef __M68K_ENTRY_H
261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define __M68K_ENTRY_H
361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/setup.h>
561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/page.h>
661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef __ASSEMBLY__
761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/thread_info.h>
861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif
961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
1061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
1161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Stack layout in 'ret_from_exception':
1261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *
1361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	This allows access to the syscall arguments in registers d1-d5
1461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *
1561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	 0(sp) - d1
1661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	 4(sp) - d2
1761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	 8(sp) - d3
1861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	 C(sp) - d4
1961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	10(sp) - d5
2061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	14(sp) - a0
2161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	18(sp) - a1
2261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	1C(sp) - a2
2361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	20(sp) - d0
2461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	24(sp) - orig_d0
2561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	28(sp) - stack adjustment
2661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	2C(sp) - [ sr              ] [ format & vector ]
2761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	2E(sp) - [ pc-hiword       ] [ sr              ]
2861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	30(sp) - [ pc-loword       ] [ pc-hiword       ]
2961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *	32(sp) - [ format & vector ] [ pc-loword       ]
3061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *		  ^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^
3161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *			M68K		  COLDFIRE
3261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
3361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
3461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* the following macro is used when enabling interrupts */
3561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#if defined(MACH_ATARI_ONLY)
3661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	/* block out HSYNC on the atari */
3761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define ALLOWINT	(~0x400)
3861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define	MAX_NOINT_IPL	3
3949148020bcb6910ce71417bd990a5ce7017f9bd3Sam Ravnborg#else
4061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	/* portable version */
4161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define ALLOWINT	(~0x700)
4261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define	MAX_NOINT_IPL	0
4361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* machine compilation types */
4461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
4561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef __ASSEMBLY__
4661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
4761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * This defines the normal kernel pt-regs layout.
4861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer *
4961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * regs a3-a6 and d6-d7 are preserved by C code
5061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * the kernel doesn't mess with usp unless it needs to
5161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
5261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define SWITCH_STACK_SIZE	(6*4+4)	/* includes return address */
5361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
5461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef CONFIG_COLDFIRE
5561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef CONFIG_COLDFIRE_SW_A7
5661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
5761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * This is made a little more tricky on older ColdFires. There is no
5861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * separate supervisor and user stack pointers. Need to artificially
5961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * construct a usp in software... When doing this we need to disable
6061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * interrupts, otherwise bad things will happen.
6161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
6261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.globl sw_usp
6361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.globl sw_ksp
6461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
6561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS
6661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	move	#0x2700,%sr		/* disable intrs */
6761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	btst	#5,%sp@(2)		/* from user? */
6861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	bnes	6f			/* no, skip */
6961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp,sw_usp		/* save user sp */
7061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addql	#8,sw_usp		/* remove exception */
7161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	sw_ksp,%sp		/* kernel sp */
7261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	subql	#8,%sp			/* room for exception */
7361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stkadj */
7461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* orig d0 */
7561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
7661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(-32),%sp		/* space for 8 regs */
7761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@
7861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	sw_usp,%a0		/* get usp */
7961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%a0@-,%sp@(PT_OFF_PC)	/* copy exception program counter */
8061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%a0@-,%sp@(PT_OFF_FORMATVEC)/*copy exception format/vector/sr */
8161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	bra	7f
8261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	6:
8361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stkadj */
8461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* orig d0 */
8561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
8661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(-32),%sp		/* space for 8 regs */
8761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@
8861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	7:
8961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
9061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
9161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT
9261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	SAVE_ALL_SYS
9361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveq	#-1,%d0			/* not system call entry */
9461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@(PT_OFF_ORIG_D0)
9561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
9661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
9761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_USER
9861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	move	#0x2700,%sr		/* disable intrs */
9961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	sw_usp,%a0		/* get usp */
10061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp@(PT_OFF_PC),%a0@-	/* copy exception program counter */
10161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp@(PT_OFF_FORMATVEC),%a0@-/*copy exception format/vector/sr */
10261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%sp@,%d1-%d5/%a0-%a2
10361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(32),%sp		/* space for 8 regs */
10461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp@+,%d0
10561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addql	#4,%sp			/* orig d0 */
10661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addl	%sp@+,%sp		/* stkadj */
10761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addql	#8,%sp			/* remove exception */
10861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp,sw_ksp		/* save ksp */
10961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	subql	#8,sw_usp		/* set exception */
11061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	sw_usp,%sp		/* restore usp */
11161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	rte
11261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
11361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
11461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RDUSP
11561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	sw_usp,%a3
11661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
11761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
11861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro WRUSP
11961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%a3,sw_usp
12061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
12161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
12261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* !CONFIG_COLDFIRE_SW_A7 */
12361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
12461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Modern ColdFire parts have separate supervisor and user stack
12561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * pointers. Simple load and restore macros for this case.
12661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
12761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS
12861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	move	#0x2700,%sr		/* disable intrs */
12961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stkadj */
13061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* orig d0 */
13161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
13261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(-32),%sp		/* space for 8 regs */
13361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@
13461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
13561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
13661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT
13761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	move	#0x2700,%sr		/* disable intrs */
13861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stkadj */
13961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	pea	-1:w			/* orig d0 */
14061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
14161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(-32),%sp		/* space for 8 regs */
14261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@
14361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
14461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
14561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_USER
14661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%sp@,%d1-%d5/%a0-%a2
14761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(32),%sp		/* space for 8 regs */
14861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp@+,%d0
14961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addql	#4,%sp			/* orig d0 */
15061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addl	%sp@+,%sp		/* stkadj */
15161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	rte
15261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
15361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
15461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RDUSP
15561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	/*move	%usp,%a3*/
15661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	.word	0x4e6b
15761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
15861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
15961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro WRUSP
16061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	/*move	%a3,%usp*/
16161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	.word	0x4e63
16261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
16361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
16461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* !CONFIG_COLDFIRE_SW_A7 */
16561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
16661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_SWITCH_STACK
16761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(-24),%sp		/* 6 regs */
16861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%a3-%a6/%d6-%d7,%sp@
16961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
17061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
17161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_SWITCH_STACK
17261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%sp@,%a3-%a6/%d6-%d7
17361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	lea	%sp@(24),%sp		/* 6 regs */
17461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
17561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
17661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* !CONFIG_COLDFIRE */
17761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
17861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
17961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * All other types of m68k parts (68000, 680x0, CPU32) have the same
18061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * entry and exit code.
18161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
18261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
18361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
18461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * a -1 in the orig_d0 field signifies
18561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * that the stack frame is NOT for syscall
18661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
18761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT
18861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stk_adj */
18961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	pea	-1:w			/* orig d0 */
19061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
19161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@-
19261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
19361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
19461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS
19561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	clrl	%sp@-			/* stk_adj */
19661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* orig d0 */
19761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%d0,%sp@-		/* d0 */
19861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%d1-%d5/%a0-%a2,%sp@-
19961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
20061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
20161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_ALL
20261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%sp@+,%a0-%a2/%d1-%d5
20361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp@+,%d0
20461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addql	#4,%sp			/* orig d0 */
20561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	addl	%sp@+,%sp		/* stk adj */
20661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	rte
20761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
20861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
20961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
21061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_SWITCH_STACK
21161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%a3-%a6/%d6-%d7,%sp@-
21261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
21361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
21461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_SWITCH_STACK
21561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	moveml	%sp@+,%a3-%a6/%d6-%d7
21661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
21761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
21861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* !CONFIG_COLDFIRE */
21961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
22061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/*
22161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Register %a2 is reserved and set to current task on MMU enabled systems.
22261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Non-MMU systems do not reserve %a2 in this way, and this definition is
22361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * not used for them.
22461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */
22561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define curptr a2
22661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
22761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define GET_CURRENT(tmp) get_current tmp
22861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro get_current reg=%d0
22961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%sp,\reg
23061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	andw	#-THREAD_SIZE,\reg
23161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	\reg,%curptr
23261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	movel	%curptr@,%curptr
23361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm
23461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
23561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* C source */
23661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
23761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define STR(X) STR1(X)
23861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define STR1(X) #X
23961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
24061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define SAVE_ALL_INT				\
24161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"clrl	%%sp@-;"    /* stk_adj */	\
24261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"pea	-1:w;"	    /* orig d0 = -1 */	\
24361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"movel	%%d0,%%sp@-;" /* d0 */		\
24461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"moveml	%%d1-%%d5/%%a0-%%a2,%%sp@-"
24561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
24661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define GET_CURRENT(tmp) \
24761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"movel	%%sp,"#tmp"\n\t" \
24861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"andw	#-"STR(THREAD_SIZE)","#tmp"\n\t" \
24961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"movel	"#tmp",%%a2\n\t" \
25061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	"movel	%%a2@,%%a2"
25161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
25249148020bcb6910ce71417bd990a5ce7017f9bd3Sam Ravnborg#endif
25361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer
25461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* __M68K_ENTRY_H */
255