11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  linux/arch/m68knommu/kernel/entry.S
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (C) 1998  D. Jeff Dionne <jeff@lineo.ca>,
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                      Kenneth Albanowski <kjahds@kjahds.com>,
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (C) 2000  Lineo Inc. (www.lineo.com)
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Based on:
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  linux/arch/m68k/kernel/entry.S
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (C) 1991, 1992  Linus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * License.  See the file README.legal in the main directory of this archive
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for more details.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux/m68k support by Hamish Macdonald
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 68060 fixes by Jesper Skov
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ColdFire support by Greg Ungerer (gerg@snapgear.com)
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 5307 fixes by David W. Miller
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux 2.4 support David McCullough <davidm@snapgear.com>
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/linkage.h>
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/errno.h>
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h>
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/segment.h>
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/asm-offsets.h>
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/entry.h>
332d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan#include <asm/unistd.h>
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.text
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl buserr
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl trap
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl ret_from_exception
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl ret_from_signal
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_fork
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_clone
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_vfork
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(buserr)
4661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	SAVE_ALL_INT
47bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer	GET_CURRENT(%d0)
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	movel	%sp,%sp@- 		/* stack frame pointer argument */
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jsr	buserr_c
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jra	ret_from_exception
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(trap)
5461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	SAVE_ALL_INT
55bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer	GET_CURRENT(%d0)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	movel	%sp,%sp@- 		/* stack frame pointer argument */
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jsr	trap_c
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jra	ret_from_exception
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef TRAP_DBG_INTERRUPT
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl dbginterrupt
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(dbginterrupt)
6561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer	SAVE_ALL_INT
66bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer	GET_CURRENT(%d0)
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	movel	%sp,%sp@- 		/* stack frame pointer argument */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jsr	dbginterrupt_c
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jra	ret_from_exception
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(reschedule)
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* save top of frame */
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pea	%sp@
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	set_esp0
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pea	ret_from_exception
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jmp	schedule
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(ret_from_fork)
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	movel	%d1,%sp@-
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jsr	schedule_tail
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jra	ret_from_exception
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_fork)
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SAVE_SWITCH_STACK
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pea	%sp@(SWITCH_STACK_SIZE)
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	m68k_fork
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	RESTORE_SWITCH_STACK
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rts
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_vfork)
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SAVE_SWITCH_STACK
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pea	%sp@(SWITCH_STACK_SIZE)
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	m68k_vfork
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	RESTORE_SWITCH_STACK
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rts
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_clone)
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SAVE_SWITCH_STACK
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	pea	%sp@(SWITCH_STACK_SIZE)
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	m68k_clone
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addql	#4,%sp
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	RESTORE_SWITCH_STACK
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rts
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_sigreturn)
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SAVE_SWITCH_STACK
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	do_sigreturn
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	RESTORE_SWITCH_STACK
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rts
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_rt_sigreturn)
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SAVE_SWITCH_STACK
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jbsr	do_rt_sigreturn
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	RESTORE_SWITCH_STACK
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rts
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1232d7f16d6d12682c41fb287ea8261df8e4679f638Wilson CallanENTRY(ret_from_user_signal)
1242d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan	moveq #__NR_sigreturn,%d0
1252d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan	trap #0
1262d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan
1272d7f16d6d12682c41fb287ea8261df8e4679f638Wilson CallanENTRY(ret_from_user_rt_signal)
128760d6e7861f245599e0ca1e98ba524a77d401a51Maxim Kuvyrkov	movel #__NR_rt_sigreturn,%d0
1292d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan	trap #0
1302d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan
131